EM
UM
GERADOR
DE
PROGRAMAS
PARA
SISTEMAS
DE REGRAS DE
PRCDUÇAO
VISANDO
À
EFICIÊNCIA
NA
EXECUÇÃO
DIssERTAÇAo
SUBMETIDA
À UNIVERSIDADE
FEDERAL DE
sANTA
CATARINA PARA A
OBTENÇAO
Do GRAU
DE
MESTRE
EM
ENGENHARIA
ELÉTRICA
ALVARO
DANIEL
ARION
IPALADIN
O
REGRAS DE
PRODUÇAO
VISANDO
A
EFICIENCIA
NA
EXECUÇAO
_ALVARO
DANIEL
ARIONI
PALADINO
~
ESTAIDISSERTAÇÃO
FOI
JULGADA
ADEQUADA
PARA A
OBTENÇAO
DO
TITULO
DE
, ~..
MESTRE
EM
ENGENHARIA
ELETRICA*
ESPECIALIDADE
ENGENHARIA
ELÉTRICA,
ÁREA
DE
CONCEN-
TRAÇAO SISTEMAS
DE
CONTROLE,
E
APROVADA
EM
SUA
FORMA
FINAL
PELO
PROGRAMA
DE POS-GRADUAÇAO
,<'____
D __-.. f 01,;O
4fz
. Prof. ' Z -137* O IETT,
Dr./
/
Orientador ,/`ƒ¢›"
>
_/“7
Prof.
JOAO EDRO SSUMP
AO
BASTOS,
Dr. D'EtatCoordenador
do Curso dePós-Graduação
em
Engenharia Elétricaf
Êlwãr
~
BANCA
EXAMIN AD
ORA
`.\. `¡\
gv
\ 'U \ \ ‹§" .g\` 'Ošê
, ,A..
Prof.
AUGU¡_fl
Uc1APAGL1A,Dr.
I
Co-orientadorWI
(UT
Prof. ~
AN
F§1Ê1íEs,Dr.
Irrg.›V Í / Qu--¬‹
Prof.
LUIZ
FERNANDO
JACINTHO
MAIA,
M.
'Pr0f.~¿E
BITTENCDURT,
Dr.4.
Agradecimentos
Aos
professoresHervé
Eric Garnousset eAugusto
Humberto
Bruciapaglia pela orientação,aos
membros
da
Banca
Examinadora
e aos demais professores e colegas doLCMI
pelaamizade
e convívio neste período.Também
agradeço àCAPES
e aoCNPQ
pelo auxílioSumário
Resumo
. . . viiiAbstract . . . .. ix
1
Introdução
1 2O
tempo
realem
sistemas
de
produção
4
2.1A
problemática dotempo
real . . . . 42.2 Características gerais dos sistemas de A
produção
. . . . . €O€O0O00Ó3Ó§ 2.2.1A
arquitetura dos sistemas de produção . . . . . 2.2.2A
estrutura de controle . . . . V . . . . . 2.2.3 Raciocíniomonotônico
. . . . . 2.2.4 Direção doencadeamento
das regras . . . . . 2.2.5 Diferençascom
aprogramação
clássica . . . . . 2.3Como
conciliar os dois conceitos . u do ponto de vista prático . . . 102.4 Conclusão . . . .. 12
3
As
escolhasfundamentais
13
3.1Gerador
deprograma ou
interpretador . . . _ . 13 3.2A
ordem
da
lógica que sustenta o sistema . . . 143.3 Características gerais da linguagem
SPP
. . . 153.4 Conclusão . . . 16
4
Metodologia
de desenvolvimento
18
4.1Os
objetivos propostos . . . 18 4.2A
definição do sistema . . . 19 4.3As
ferramentas de implementação . . . 21 4.4 Conclusão . . . 235
Aspectos
específicos
da
linguagem do gerador
24
5.1 Descrição básica . . . 245.2
Os
tipos de dados permitidos . . . 265.2.1 Tipos de dados básicos . . . 26
5.3 Operadores e funçoes . . . . . 5.3.1 Operadores básicos . . . . . 5.3.2 Funções externas e internas . . . . . 5.3.3 Expressões particulares . . . . .
5.4 Parte conclusão das regras . . . . .
5.4.1 Ações que afetam a
memória
de trabalho .~
5.4.2 Açoes de controle _ . . .' . . . . . 5.4.3 Ações de
comunicação
. . . . .5.5
Funcionamento da
máquina
de inferência . . . . .5.5.1 Condições para que
uma
regraingresse
no
conjunto de confiitos . . . . . . 5.5.2 Resolução de conflitos . . . . .5.6 Conclusão . . . . .
6
Conceitos
ealgoritmos desenvolvidos
6.1 Estruturas de dados e conceitos usados
na
geração6.1.1
As
tabelas do gerador . . . . . 6.1.2As
listas de influência e do estado anterior6.1.3
Complexidade
das condições . . . . . 6.1.4 Pré-compilação das condições . . . . .6.2 Arquitetura do
programa
gerado . . . . .6.2.1 Restrições aos tipos
LIST
eSYMBOL
. . . 6.2.2 Construçãoda
função de regra . . . . . 6.2.3 Pré-compilação do estado inicialdo
sistema6.3
O
algoritmo de execução . . . . .6.3.1
Mudança
de prioridade durante a execução6.4 Conclusão . . . . .
~
7
Avaliaçao de
desempenho
7.1 Análise do algoritmo de execução . . . . .
7.2 Avaliação prática' . . . . .
7.3 Aplicação ao controlador
PID
auto-ajustável . . . .7.4 Conclusão . . . . .
8
Conclusão
eperspectivas
A
Descrição
sintáticada
linguagem
SPP
B
Manual
do
usuário
Bibliografia2.1
Diagrama
de estados doMotor
de inferência .4.1
Diagrama
dosmódulos
do sistemaSPP
. . .4.2
LEX
em
conjuntocom
YACC
. . . . .6.1 Tabela de atributos . . . . .
6.2 Tabela de condições . . . . .
6.3 Tabela de regras . . . _ .
6.4
Diagrama
de blocos do algoritmo de execução7.1 Controlador
PID
auto-ajustável . . . . .Resumo
Esta dissertação apresenta o SPP,
um
sistema de produção proposicional desenvolvidocom
características adequadas para sua utilização
em
aplicações detempo
real,embora
possaser igualmente
usado
para outro tipo de aplicações. _O
SPP
éimplementado
como
um
gerador de programa,tem
uma
sintaxe lisp-like euma
boa
capacidade matemática. Requer a declaração explícita de atributos e funções, estábaseado
na
lógica proposicional e a suamáquina
de inferência trabalhasem
backtracking,com
raciocínionão
monotônico,em
encadeamento
para frente eatendendo
às estratégiasclássicas de resolução de conflitos.
Para
conseguiruma
boa
eficiência de execução, a linguagemC
foi escolhidacomo
basedo
desenvolvimento, sendo usada tanto para o sistema especialista geradocomo
para o pro-grama
gerador.Por
outro lado,uma
interfaceampla
e flexível entreSPP
e a linguagemC
insere o sistema
num
contexto deprogramação
híbrida (mistura de procedural e não pro-cedural), necessário para tornar compatíveis o
tempo
real e os sistemas especialistas.Abstract
The
SPP
propositional production system is introduced in this dissertation. It can be usedin real time as Well as traditional artificial intelligence applications.
The
SPP, which
is basedupon
the propositional logic Works as aprogram
generator,having a lisp-like input syntax
and
a strong mathematicalcapacity.The
declaration ofattributes
and
functionsmust
be explicit.The
inference engine operates with forwardchaining, With non-monotonic reasoning
and
Without backtracking. It follows the tradi-tional conflict resolution strategies.
In order to obtain portability
and
efiiciency in the execution, the systemWas
developedusing the
C
programming
language.The
expert systems produced with theSPP
generatorare also written in C.
On
the other hand, a wideand
flexible interface withC
inserts thesystem in a hybrid
programming
context (miscegenation of proceduraland
'non-proceduralprogramming).
In that way, an expert system can be easily included into a real timeenvironment. -
Capítulo
1
Introdução
O
uso de técnicas de inteligência artificialem
informáticatem
semostrado
particularmenteadequado na
resolução de problemas ondeuma
abordagem
através de algoritmos se tornaextremamente
difícilou
até impossível.Em
particular os sistemas especialistasusam
oconhecimento
de especialistashumanos
para a resolução, sobreum
domínio restrito ebem
definido, de problemas nas mais diversas áreas. Para
uma
descrição mais detalhada dossistemas especialistas o leitor
pode
ver por exemplo[Nil80,FG87,HWL83,HK85,Wat86].
Entre as linguagens criadas para o desenvolvimento de sistemas especialistas, as ba-
seadas
em
regras deprodução
têm
tido maior sucesso. Estas linguagens,denominadas
sistemas
de produção,
constituemum
paradigma
de representação centradonum
con-junto
não ordenado
de “regras”na forma
de pares (condição, ação).A
sua popularidadese deve sobretudo aos seguintes aspectos:
o
As
regras deprodução
possuem
uma
grande expressividade.o
Sao
um
modelo
natural e de fácil compreensão.0
Cada
regra representauma
porção especifica do conhecimento, facilitando o des_en-volvimento.
0 Se
tem
uma
forte separação entre o conhecimento (expressado nas regras) e aforma
de utilizá-lo (controle).
Porém,
para conseguir todas essas vantagens, os sistemas deprodução
geralmentetêm
que
pagar
o preço deserem
mais lentos enormalmente
repousar sobre outros sistemas degrande
consumo
de recursos demáquina como
LISP ou
PROLOG.
Istotem
dificultadoa sua aplicação
em
sistemas detempo
real, onde a resposta do sistema auma
solicitaçãoexterna deve ser fornecida
num
tempo
limitado.O
objeto desta dissertação é o desenvolvimento doSPP,
um
sistema de produção quevisa contornar essas desvantagens e se tornar viável para formar parte de aplicações de
tempo
real[LCS*88].Para
isto, oSPP
traduz o sistema de regras (declarativo)num
módulo
entrada,
como
porexemplo
condições do tipo “atributo=
constante”, para tornar essemodulo
C
omais
eficiente que for possível.Como
antecedente deste trabalho se deve mencionar o sistema de produção SPO, desen-volvido no
LCMI
sobreLISP
interpretado para dar suporte à primeira versão do projetode
um
controladorPID
auto-ajustável[Pag89l.A
possibilidadeda
substituição do sistemaSPO
peloSPP
na segunda
versão dó controladorPID
auto-ajustável,em
desenvolvimentono
LCMI,
foium
motivador importante deste trabalho.No
entantoSPP
está pensadocomo
um
sistema deprodução
de utilização geral epode
ser usadoem
quaisquer outrasaplicações, sejam estas
com
restrições detempo ou
não. .A
especificação do sistemaSPP
inclui os seguintes pontos:O
sistema deve aceitarcomo
entradauma
linguagem baseada noparadigma
dasregras de produção, e fornecer
na
saída a tradução para a linguagem convencionaldesse
programa
de regras.Se deve conseguir do
programa
convencional geradona
saída a maior eficiência deexecução que for possível.
A
ênfase do trabalho está colocada neste ponto.O
sistema deve possuirmecanismos
que facilitem a comunicação e interface domódulo
geradocom
tarefas escritasem
linguagem convencional,dando
lugar ao con-ceito de
programação
híbrida.A
sintaxeda linguagem
de regras deve adotar de preferência as estruturas funda-mentais das linguagens
LISP
e SPO.O
sistema deprodução
deve estar sustentadona
lógica proposicional.A
suamáquina
de inferência deve trabalharsem
backtracking,com
raciocínio naomonotônico,
em
encadeamento
para frente e atendendo às estratégias clássicas deresoluçao de conflitos.
A
linguagem definida deve possuir aindauma
razoável capacidadematemática
cons-truída internamente, e a declaração dos atributos e funções deve ser explícita.
As
principais etapascumpridas
foram:Especificação
da
linguagem de representaçãodo
conhecimento. _Especificação
da forma
padrão domódulo
C
gerado.Desenvolvimento
do
motor
de inferência inserido dentro domódulo
C
gerado.Desenvolvimento de
um
algoritmo de avaliação de premissasem
tempo
decom-
pilação.
Estes assuntos sao apresentados
no
presente trabalhoda
seguinte forma:O
capítulo 2 objetiva definir os conceitos fundamentais envolvidosna
problemática dotempo
real e dos sistemas de produção, assimcomo
realizaruma
primeira análise dascaracterísticas de
um
sistema de produção compatívelcom
os requisitosdo tempo
real.No
capítulo 3 são analisadas as diferentes alternativas disponíveis para a construçãodo
sistema, apresentando a justificativa de cadauma
das decisões tomadas.No
capítulo 4 se estabelecem os objetivos de nível mais baixo, assimcomo
uma
metodo-logia de desenvolvimento. São detalhadas as principais características desejadas para o
sistema e é formulada a
abordagem
escolhida para desenvolvê-lo. .No
capítulo 5 se fazuma
descrição da linguagem definida, apresentandoem
particularo funcionamento dos diferentes operadores e funções que possui. Por outro lado,
num
enfoque mais genérico, é analisada a lógica de funcionamento
da máquina
de inferência,indicando sua influência
na forma
de escrever as regras de produção.O
capítulo 6 trata aspectos relativos à implementação do sistema, analisando primeiroos algoritmos e conceitos utilizados pelo compilador, e posteriormente o algoritmo e as
estruturas de dados utilizados pela aplicação gerada.
No
capítulo 7 é analisada a complexidade do algoritmo de execução, e o seu comporta-Amento
é avaliadocom
alguns exemplos práticos.Também
seestudam
aspectos da aplicaçãodo
sistemaSPP
ao projeto deum
controladorPID
auto-ajustável.Finalmente, o capítulo 8 apresenta as conclusões e perspectivas finais sobre o trabalho
Capítulo
2
O
tempo
real
em
sistemas
de
AJ
produçao
Os
sistemas deprodução
têm
semostrado
ferramentas particularmente adequadas na re-solução de vários problemas de decisão
quando
estesnão permitem
uma
formalizaçãoalgorítmica simples, sendo
numerosas
as aplicaçõesonde
têm
sido utilizados substituindoou complementando
especialistashumanos.
Os
sistemas detempo
real, por outro lado,também
têm
sido usadosamplamente
sobretudona
indústriaonde
controlam processoscada vez mais complexos.
Porém,
a incapacidade de resolver alguns problemas de contro-le por
métodos
clássicos [Pag89] faz que o uso dos sistemas de produção para controlarprocessos de
tempo
real, se torneuma
alternativa pragmática e desejável.O
tempo
de execução geralmente elevado dos sistemas de produção,tem
impedido noentanto o seu
maior
aproveitamentoem
universos cuja dinâmicaimpõe
uma
forte res-trição
no
tempo
de resposta. Este capítulo objetiva definir os conceitos fundamentaisenvolvidos
na
problemática dotempo
real e dos sistemas de produção, assim comorealizaruma
primeira análise das características deum
sistema de produção compatívelcom
osrequisitos
do
tempo
real.2.1
A
problemática
do
tempo
real
Sendo
o objetivo do trabalho o desenvolvimento deum
sistema que' visa aplicaçõesem
tempo
real, o primeiro passo deve ser definir o que se entende portempo
real.Em
con-seqüência se
define
[LCS*88]:-'
Sistema
informático
de
tempo
real Sistema para o qual existeum
tempo
pré-fixado(imposto) ao final do qual deve produzir
uma
resposta ao seu ambiente.Embora
muitos sistemas popularescomo
os de reserva de passagens de avião sejamchama-
dos de
tempo
real, isto tecnicamentenão
é correto, pois elesnão
fornecem a respostanum
tempo
imposto. Este tipo de sistemas,onde
se supõe queuma
pessoa fica esperandouma
resposta rápida,
mas
que só será. fornecidanum
tempo
variável, seriam mais adequada-Os
sistemasem
tempo
realdevem
ainda terum
conjunto de propriedades relacionadascom
os seguintes conceitos [LCS*88]: _ _Tempo
de
resposta
O
sistema deve ser capaz de responder noinstanteem
que a respostaé necessária, de acordo
com
a restrição temporal presente.Assim
paraum
dado
evento de entrada e
um
estado arbitrário do sistema, este deve ser capaz de produziruma
resposta aceitável notempo
necessário.Correção
A
conduta do
sistema deve sermantida
dentro de limites aceitáveis ao longo dotempo; isto corresponde à geração de
uma
resposta aceitávelsem
violar as restrições.de
tempo
impostas pelo ambiente.Confiabilidade
necessário fixarum
limite inferior para otempo
médio
entre falhas(MTBF:
Mean
Time
Between
Fails).Disponibilidade
necessário igualmente fixarum
limite superior para oMTTR
(Mean
Time To
Repair),ou
seja estabelecerum
tempo
máximo
que o sistema possa ficar indisponível.A
definiçãodo
tempo
real é bastante exigente no que se refere aotempo
imposto, poismesmo
utilizandouma
abordagem
algorítmica seria difícil saber seem
todos os casos seobedece ao
tempo
imposto.Com
uma
linguagem baseadaem
regras de produção , ondeo controle é
não
determinista, seriaem
conseqüência muito mais difícil.De
qualquerforma, o
caminho para
verificar se a respostapode
ser obtidanum
tempo
imposto, passapela
decomposição da
tarefaem
operações elementares cuja duraçãomáxima
possa serestimada.
E
é neste sentido queuma
abordagem
algorítmica levavantagem
sobreuma
baseada
em
regras para aplicaçõesem
tempo
real. Porém, a “proceduralização” do controlede
um
sistema de regras pormeio da
traduçãonuma
linguagem convencional, reduziriaevidentemente os problemas.
Por
outro lado, quantomenor
otempo
de execução deuma
aplicação, maior a proba-bilidade
da
resposta serdada
num
tempo
imposto,mesmo
quenão
seja possível estimarexatamente
essetempo
de resposta. Seria o caso, por exemplo, deum
controlador digi-tal
onde
o período deamostragem
para fazer o controle sejada
ordem
de milissegimdos.Para não
alterar a função de controle ébom
que o controle seja acionado antes de tomar.a
próxima
amostra. Portanto, se experimentalmente o sistema der a respostana
mesma
ordem
detempo
(milissegundos), será muito difícil determinar se a aplicação atende aosrequisitos de
tempo
imposto.No
entanto, se nessas provas otempo
de resposta ficarna
ordem
de micro-segundosou
até centenas de micro-segundos,mesmo
sem
ter garantiasteóricas sobre o
tempo
de resposta, haveráuma
grande probabilidade de que otempo
imposto seja atingido
na
maioria das vezes.Em
função disto, para construirum
sistema de produção visando aplicaçõesem
tempo
real, deve-se dar ênfase nos seguintes aspectos fundamentais:
0
Embora
seja difícil, deve ser possível estimar otempo
máximo
das operaçoes necessá-rias para obter a resposta requerida.
Estas características são desejáveis,
mas
não é possível quantificá-las.Deve
ficar claro entãoque
não
se pretende criarum
sistema de produção que funcione para qualquer aplicaçãode
tempo
real,nem
um
que garantasempre
uma
resposta a respeito de sua aplicabilidade;De
fato, o sistema deprodução
desenvolvido que será apresentado nos próximos capítulosnão
possuinenhum
mecanismo
especial relacionadocom
a variável tempo [LCS*88].O
que se pretende é criarum
sistema de produção que, pela proceduralização do con-trole, e pela otimização
do
tempo
de execução, possa ser usadocom
segurança parauma
quantidade importante aplicações
com
restrição de tempo. por causa disto que foi es-colhido
como
título do trabalho“Um
gerador deprogramas
para sistemas de regras de*'97
produção visando a eficiência
na
execuçao .2.2
Características
gerais
dos
sistemas
de
ns.:
produçao
O
modelo
sistema de produção, introduzido por Post (1943), revelou-secomo
um
poderosoformalismo de
programação
devido sobretudo àforma
declarativa de expressão do conhe-cimento e ao caráter associativo de sua manipulação.
Embora
não existauma
análiseformal única para os Sistemas de Produção, se tentará apresentar aqui
um
sumário do quese encontra classicamente.
2.2.1
A
arquitetura dos sistemas
de
produção
Um
sistema deproduçao
secompõe
basicamente de três elementos:Memória
de trabalho
Uma
base de dados cujos elementos descrevem o estado do sis-tema no
processo de resolução.Base
de
regras
Um
conjunto de regras de produção contendo o conhecimento operacionalsobre o problema. '
Motor
de_ inferênciaUm
interpretador responsável pelo controle do sistema.O
poder de expressão e generalidade dos sistemas de produção é devida principalmente àsseguintes características:
1.
O
acesso às regras é feito deforma
associativa,ou
sejaem
função do estado do'
problema.
2.
A
execução deum
sistema de produçãonormalmente
é não determínísta pois existemEntão,
em
oposição a seqüênciafixa
de operações definida nos algoritmos(em
programaçãoconvencional), nos sistemas de produção o controle é dirigido pelos dados.
A
memória
de trabalhocontem
a qualquermomento
o estado corrente do sistema, seuselementos
são normalmente chamados
de objetos. Elespodem
representar instâncias deobjetos físicos relacionados
com
oproblema ou
elementos conceituaiscomo
metas a serematingidas
em
passos intermediáriosfOs
objetosda
memória
de trabalho condicionam odisparo das regras e
podem
ser criados,modificados ou
destruídos por elas.A
base de regras éformada
porum
conjuntonão ordenado
de regras de produção. Elastêm
uma
parte condição (ou antecedente) que deve ser satisfeita pelo estado corrente dosistema
(memória
de trabalho), euma
parte ação (ou conseqüente) indicando as alterações'a
serem
aplicadasno
estado correnteno
momento
do disparoda
regra.A
parte conseqüentepode
contertambém
ações atuando sobre o conjunto de regrascomo
criar, apagar oumodificar
regras[CM86,Win84],
ações permitindo alterar ocomportamento
domotor
deinferência, e interface de entrada/ saída.
Às
regraspodem também
ser associados atributosespeciais
como
prioridades, ou fatores de certeza.A
principal tarefa domotor
de inferência é decidir qual apróxima
regra a ser disparada.Ele
pode
ser vistocomo
uma
máquina
de estado finitacom
quatro estados[BFKM86] como
ilustrado
na
seguinte figura:Resoluçao Filtragem de Conflitos
ada
Execução
do
Motor
Figura 2.1:
Diagrama
de estadosdo
Motor
de inferênciaZ
A
descrição decada
estado é a seguinte:0
Na
etapa de filtragem, são determinadas as regras satisfeitas pelo estado correntedo sistema.
Cada
regra instanciada, juntocom
um
objeto que a instancia,passam
aconstituir
um
elemento do Conjunto de conflitos.Como
uma
regrapode
ser instan-ciada por vários conjuntos de objetos, ela
pode
aparecer várias vezes no conjunto deconflitos.
o
Na
etapa de resolução de conflitos se escolheum
par regra-objeto do conjunto deconflitos para disparar. Essa seleção
da
regra a disparar éum
problema aberto,o
Na
fase de execução são aplicadas as ações presentesna
parte de conseqüente daregra escolhida para o disparo.
o
A
parada do
sistemapode
ocorrer poruma
ação de controle,quando
se está execu~tando a conclusão de
uma
regra,ou
quando
o conjunto' de conflitos fica vazio.Conceitualmente simples, este
modelo
envolveno
entanto problemas complexos,como
oda
ineficiência inerente à etapa de filtragem {Sob87,GD84] e onão
determinismo da etapade resolução de conflitos.
2.2.2
A
estrutura
de
controle
A
estrutura de controle está intimamente relacionadacom
onão
determinismo da resoluçãode conflitos.
Os
seguintes aspectos são fundamentais:Regime
de
funcionamento Define
a atitude atomar quando
o conjunto de conflitosestiver vazio.
Em
regime irrevogável omotor
de inferência simplesmente para.Em
regime por tentativas
(com
baclctrackíng) omotor
de inferência tenta voltarnum
estado anterior e reconsiderar a escolha que tinha sido feita, disparando outra regra
[Lau84,HWL83].
~
Critérios
de
resoluçao de conflitos
Como
já foi dito, a escolha da regra a disparardentro
do
conjunto de conflitos éum
problema
aberto, e portanto existeum
grandenúmero
de critérios utilizados. Alguns deles são[BF86,BFKM86,Kae89]:
0
A
escolhada
primeira regra.0 -A regra de maior prioridade.
°
A
regra mais específica.0
A
instânciada
regra que utiliza os objetosmodificados
mais recentemente. .0
A
escolha deuma
regra que ainda não tenha sido instanciada.o
O
disparo de todas as regras pseudo paralelamente,como
no
sistemaMYCIN
[BS85].
o
O
uso de metaregras para escolher a regra a disparar [Dav80].A
definiçãoadequada da
estratégia de resolução de conflitos é fundamental para encontrara solução de
uma
forma
rápida e eficiente.A
melhor estratégia,bem
como
a melhor escolhado
regime de funcionamento depende principalmenteda
naturezado
problema.2.2.3
Raciocínio
monotônico
Quando
o sistema usaum
raciocíniomonotônico
[Tur86],nenhum
fato estabelecidopode
regra se torna válida
permanece
válida durante o restanteda
execução do sistema [Nil80].Isto evidentemente simplifica o controle do sistema.
Nos
sistemas especialistas no entanto, queenvolvem
um
conjunto de conhecimentosmuito
complexos, é interessante reconsiderar fatosda
memória
de trabalho.Os
sistemasque o
permitem,
por oposição aos anteriores, sãochamados
denão
monotônicos. Este tipode raciocínio complica o controle
do
sistema,porém
forneceuma
maior
flexibilidade.~
2.2.4
Direçao
do encadeamento
das regras
_
As
regras são encadeadas para frente (forward chainíng)quando
elas são aplicadas a partirdo estado corrente
do
sistema, descrito pelamemória
de trabalho, até produzirum
estadoque represente a solução do problema
ou
até chegar à conclusão de quenão
é possível acharuma
solução.As
regras são aplicadas para trás (backward chainíng)quando
são usadas paradecompor
o
problema
inicialem
sub-problemas mais simples, até encontrarum
conjunto de problemasequivalentes ao original cuja veracidade possa ser facilmente verificada a partir dos dados
iniciais [Nil71,FG87].
Os
sistemascom
encadeamento
para frente são mais adequados para problemas onde setem
vários estados finais aceitáveis, enquanto oencadeamento
para trás é maisadequado
nos sistemas de diagnóstico onde, para chegar a
um
único objetivo, setem
um
amplo
conjunto de fatos iniciais.
nv
2.2.5
Diferenças
com
a
programaçao
clássica
As
diferenças entre aprogramação
convencional e aprogramação usando
omodelo
desistemas de
produção
podem
ser sumariadasna
seguinte tabela [Wat86,BF86]:Progralnação
clássicaSistemas
de
produção
Informações principalmente numéricas. Informaçoes simbólicas.
O
controle e os dados estão misturados.O
controle e os dados estão separados,o controle
na
máquina
de inferência e osdados
na
base de conhecimento(memória
de regras
+
memória
de trabalho).O
fluxo
de controle está determinado por Setem
um
comportamento
nao deter- _um
algoritmo pré-definido. minista.~
Se trabalha
com
um
conhecimento exato. Sepode
teruma
representaçao do conhe-cimento incerto.
A
supressãoou
acréscimo de dados éAmodificaçao
dosdadosésimples
e'fácil.Essas diferentes características levam a situações onde é
melhor
usar omodelo
de regras eoutras
onde
omodelo
clássico é mais vantajoso[BF86,BFKM86).
As
vantagens dos sistemas de produção estão relacionadascom
a maior modularidade(pois
uma
regra éuma
porção de conhecimento independente do resto), a facilidade deaprendizado
do modelo
devido à sua uniformidade, e a naturalidade domodelo
em
si poisos conhecimentos dos especialistas
podem
ser expressados deforma
natural por regras deprodução.
A
desvantagem do
modelo
de produção reside basicamentena
ineficiência de execução,e
no
fato que, sendo o controle determinado pelo sistema, acaba sendopouco
transparente.Isto
pode
dificultar a detecção de problemascomo
loopsou
deadlocks.A
ineficiência deexecução é conseqüência
também
do controle dirigido pelo sistema. Entreuma
operaçãoe a seguinte, existe
um
overhead importante devido ao fato que o sistematem
que esco-lher de
forma
automática a operação seguinte.Nos
sistemas clássicos,onde
o usuário dáexplicitamente a
ordem
de execução das operações, esse overhead não existe.2.3
Como
conciliar os
dois
conceitos
do
ponto
de
vista
prático
Qualquer
alternativa para tornar compatíveis o conceito detempo
real e a flexibilidadedos sistemas de
produção
passará necessariamente poruma
solução de compromisso. Istosignifica que terá que deixar de lado algumas características
não
fundamentais dos sistemasde produção, para concentrar os esforços nos aspectos mais importantes,
ou
por outro ladoaceitar
tempos
de resposta muito maiores.Como
a ênfase do trabalho é de construirum
sistema deprodução
que forneça a respostanum
tempo
aceitável, será interessante analisar aqui quais são as características domodelo
baseado
em
regras que sepode
abrirmão
sem
por isso desvirtuá-lo demais.Porém,
essaflexibilização sozinha
não
será suficiente para melhorar odesempenho
deforma
apreciável.Um
eficiente algoritmo de compilaçao do conhecimento será desenvolvidocom
base nessemodelo
flexibilizado.Como
já foi dito, a ferramenta desenvolvida neste trabalhonão
possui maismecanismos
especializados para aplicações de
tempo
real do queuma
linguagem convencionalcomo
C.No
entanto, consegue eliminar a maior parte dos aspectos dos sistemas de produção quepodem
dificultar a sua utilização nesse tipo de aplicações.As
regras de produção sãotransformadas
num
módulo
escritona
linguagemC
(procedural) que fornece omesmo
~
resultado que se obteria
da
execuçãonao
determinista das regras.Esse
módulo
C
está pensado para rodarcomo
uma
tarefa “inteligente” deum
sistemamaior
(possivelmente detempo
real),podendo
atuar tantocomo
uma
simples função a serchamada, ou
atécomo
um
processo concorrentecom
o restodo
sistema. Isto vai dependerde
uma
escolha deprogramação
(seqüencialou
concorrente) eda
naturezado
sistemaoperacional, pois todos os
mecanismos
de controle de processos disponíveisem C
estaraoEm
conseqüêncianão
serão tratados aqui aspectos teóricosda
problemática dotempo
real,
como
sincronismoou
assincronismo [Mil83],nem
será feitauma
análise mais detalhadado
problema do
tempo
de resposta finito [LCS*88].No
lugar disso se estudarão aspectospráticos relativos à construção de
um
sistema de produção dedesempenho
aceitávelquando
utilizado
como
módulo
inteligente deum
sistema detempo
real.Eliminação
do manuseio
dinâmico
da
memória
A
estrutura interna dos sistemas de produção dispõe tradicionalmente demétodos
paracriar e apagar objetos de
forma
dinâmicana
memória. lsto se torna evidente para ossistemas baseados
na
lógica de primeiraordem
[MCS],onde
uma
classe de objetospode
ser instanciada
um
número
ilimitado de vezes.Cada
nova instanciação representana
prática a criação de
um
novo objeto deforma
dinâmica.Os
sistemas baseadosna
lógica proposicional, ondenão há
instanciação de objetos,também
não dispensam
essemecanismo
já que geralmentepossuem comandos
para criare apagar atributos.
No
entanto,como
normalmente
seconhecem
previamente todos osatributos que virão a ser criados, é possível, dispensar a criação dinâmica de objetos. Isto
não
implicaque
a linguagemnão
irá tercomandos
para criarou
apagar atributos,mas
simplesmente que, durante a execução, a criação e o
apagado
de atributos será simuladapois cada atributo terá seu espaço de
memória
reservado durante toda a execução.Evidentemente
, omodelo
de sistemas deprodução não
é afetado por estemodo
detratar a criação e destruição de atributos. Por outro lado, isso permite eliminar
um
overhead importante que
sem
dúvida contribuirá a melhorar odesempenho
do sistema.A
melhoria obtida pela eliminação do manuseio dinâmico dos atributos
pode
ser ainda maiorse a linguagem tiver declarações dos tipos dos atributos, pois assim cada atributo será
tratado de acordo
com
seu tipo particular eem
conseqüência só seriam gastos os recursosde
máquina
estritamente necessários para cada caso.A
flexibilidade
necessária
AGeralmente
os sistemas de produçãopossuem
uma
importante flexibilidade que é muitoútil, sobretudo
na
etapa de desenvolvimentoda
aplicação. São coisascomo
por exemplo:~
o
A
possibilidade de criar novas regras deforma
dinâmica,um
esforçoem
direçao asistemas que
aprendam
sozinhos. '0
A
possibilidade de desfazer inferências deforma
interativa para explorar outros ca-minhos,
uma
ferramenta pensada especialmente para facilitar o desenvolvimento.0
A
possibilidade de escolher entreencadeamento
para frente (Forward chaining) ouencadeamento
para atrás(Backward
chaining).0
A
implementação
deum
mecanismo
de backtracking, que garanta (se o grafo deobriga o sistema a lembrar de todos os estados
onde
poderá reconsiderar o caminhoescolhido.
Um
sistema deprodução
sem
ferramentascomo
as mencionadasacima
seria eviden-temente
menos
geral emenos
poderoso,porém
ainda manteria as suas característicasfundamentais e a probabilidade de conseguir
uma
implementação razoavelmente eficienteseria maior. Então,
na
procura deuma
solução de compromisso, sepodem
descartar al-guns dispositivos que por serem
extremamente
gerais e poderososacabariam
consumindoI`€C1lI`SOS €Xa.g6I`&dOS.
~
A
soluçao interpretada
Tradicionalmente as abordagens interpretadas são tidas
como
vantajosasem
termos dodesenvolvimento de programas. Isto é ainda mais válido para as linguagens baseadas
em
regras de produção,
onde
como
já vimos, o enfoque énão
procedural. Por outro lado,as abordagens interpretadas são ineficientes e inadequadas para aplicações onde existem
requisitos sobre o
tempo
de resposta. Por causa disso, às vezes até são produzidos tantocompiladores
como
interpretadores para amesma
linguagem.Em
última instância, a maiorvantagem
das abordagens interpretadas sobre ascom-
piladas é que resulta
num
ciclo demodificação
e testes mais curto.Então
visandoum
sistema de
produção
eficienteem
termos de execução, se poderia adotaruma
alterna-tiva compilada. Contudo, a solução interpretada
tem
sido a maisusada
em
inteligênciaartificial devido sobretudo à linguagem
LISP
[Cha85], que éamplamente
usada nas imple-mentações.
Em
conseqüênciauma
alternativa que nos parece interessante é de desenvolverum
compilador cuja entrada pudesse sertambém
interpretada.ou
2.4
Conclusao
.Neste capítulo foi
abordada
a problemática dotempo
real, definindo conceitos importantescomo
otempo
imposto para o sistema geraruma
resposta. Posteriormente se fezuma
descrição
sumária
do que se entende por sistema de produção, destacando especialmentea
abordagem
declarativa e não procedural deste tipo de linguagens ecomo
isto incidena
ineficiência de execução deste tipo de sistemas. Finalmente se fez
uma
primeira análise doque deveria ser levado
em
consideraçãona
procura deuma
solução decompromisso
queimplementasse
um
sistema deprodução
compatívelcom
as restriçõesdo
tempo
real.A
criação e destruição de objetos deforma
dinâmicana memória,
a adoção deuma
solução interpretada, e
uma
certa dose de fiexibilidade são alguns dos pontos quepoderiam
ser deixados
num
segundo
planosem
por isso desvirtuar omodelo
clássico de sistemada
Capítulo
3
As
escolhas
fundamentais
Para
atingir o objetivo deum
sistema de produção compatívelcom
aplicaçõesem
tempo,real, será necessário
um
determinadonúmero
de hipóteses e restriçõesquediminuam
acomplexidade
do problema
e o situemnum
marco
de referênciaadequado
para a classe deproblemas que tentará resolver. Esse conjunto de postulados representará
em
conseqüênciaum
ponto de partidana
direção deum
sistemacom
as características desejadas.No
presente capítulo serão analisadas diferentes alternativas possíveis, apresentando ajustificativa das decisões tomadas.
Cada
hipótese feita aqui implicaránuma
escolha dealto nível, que servirá
como
ponto de referência e guiana
realização do trabalho.3.1
Gerador
de
programa
ou
interpretador
O
modelo
de sistemas de produção, apresentado no capítulo anterior, poderia ser imple-mentado
tanto porum
interpretador de regras,como
porum
gerador de programa.Na
segunda opção
um
compilador traduziria oprograma
de regras de produção parauma
linguagem procedural que realizasse
uma
função equivalente.Embora
a maioria dos sistemas especialistas baseadosnum
interpretadordisponham
de
um
processo maisou
menos
complexo
de compilação de regras de produção, isto sem-pre implica
na
representação interna das regras por estruturas de dados específicas.Em
conseqüência, neste tipo de sistemas o processo
chamado
de “compilação” é somenteum
jeito de fazer
com
que omotor
de inferência percamenos
tempo
nas etapas de filtragem eresolução de conflitos. '
A
compilação de regras de produção, porum
sistema gerador de programa, seriaum
processo
bem
mais abrangente poisalém da
utilização deuma
estrutura de dados es-pecífica tanto para as regras
como
para os objetos que constituem o sistema, amáquina
deinferência tradicional seria
também
substituída porum
conjunto de instruções e estruturasde dados particulares distribuídas dentro do código procedural gerado pelo sistema.
A
pos-sibilidade de mexer,
no
processo de geração, tantocom
as estruturas de dados quantocom
o código que será. executado
com
essas estruturas,dá
uma
maior liberdade para encontrarsaída
um
código executável, ele seria diretamenteum
compilador.Em
face às dificuldadesde
implementação
isto geralmente não será o caso - pelo menos' nas primeiras etapas depesquisa.
Em
conseqüência, sendo a saídaum
programa
escritoem
alguma
linguagemconvencional
como
C
ouPASCAL,
a função desse gerador deprograma
seria,numa
formamais conveniente, descrita
como
a deum
pré-compilador.Na
opção do interpretador toda ã base de regras vai ser transformadanuma
estruturade dados. Neste caso se teria então a flexibilidade de poder mexer, praticamente
sem
restrições,
com
as regras de produção durante a execução do sistema.Com
a possibilidadede acrescentar
ou modificar
regrasem
funçãoda
execução de outras regras, sepoderiam
modelar
funções complexas,dando
lugar até aum
processo de aprendizado.Em
contra-partida, para aplicações
em
tempo
realonde
o sistema especialistanormalmente
deverárodar
como
uma
tarefa deum
sistema maior, parece difícil conseguir o entrosamentoda
aplicação
com
um
interpretador de regras complexo.O
gerador de programa,em
comparação
com
o interpretador, forneceum
sistema espe-cialista
menos
flexível pois a parte das regras que for traduzida para código será inalteráveldurante a execução do sistema. Isto,
no
entanto, resultanuma
vantagem quando
se pensaem
aplicações detempo
real, pois o código gerado serábem
mais simples queum
complexointerpretador de regras, sendo
em
conseqüência mais fácil o seu entrosamentocom
outrastarefas de
um
sistemaem
tempo
real.3.2
A
ordem
da
lógica
que
sustenta
o
sistema
‹
A
lógica proposicional(também chamada
lógica deordem
0 devido à ausência de variáveis)é a base dos sistemas de produção de
ordem
0 (ou proposicionais), que nãoadmitem
variaveis e
funcionam
com
a restrição da existência deuma
quantidade finita de objetosna
memória
de trabalho.Na
lógica de primeiraordem
[Men79], no entanto,uma mesma
condiçãopode
sertestada
com
diferentes objetos, representados por variáveis.Nos
sistemas de produção' deprimeira
ordem
[For81,Kae89], baseados nesta lógica, a possibilidade de testar as condiçõesdas regras entre diferentes objetos,
aumenta
a expressividade e flexibilidadeda
linguagemde representação do conhecimento.
Na
maioria destes sistemas as variáveis são considera-das quantificadas universalmente.
Alguns poucos sistemas de produção,
como
SNARK-2
[Via84],admitem
o uso devariáveis
também
para os predicados, e sãochamados
em
conseqüênciacomo
sistemasde
ordem
2. .~
Os
sistemas deordem
1, ecom
maior
motivo os deordem
2,requerem
um
algoritmo defiltragem
muito complexo
para encontrar todas as instâncias possíveis deuma
regra a cadaciclo de inferência.
De
fato este éum
problema
aberto,onde
existem muitas abordagens[For82,Ghaz81,GK88].
Porém,
trata-se deum
problema
deuma
complexidade intrínsecamuito
grande,onde
os avançosnão
podem
iralém
deum
determinado limite.1
ou maior
fazcom
que geralmente se torne difícil a sua aplicação nos sistemasem
tempo
real,
onde
as restrições detempo
de execução sãocom
certeza importantes. Então,em
primeira instância a alternativa proposicional seria a mais adequada. Deve-se notar no
entanto, que sistemas “simulando” primeira
ou segunda
ordem
não seriam incompatíveiscom
otempo
real.Por
exemplo,um
sistemacom
a restriçãoideuma
quantidademáxima
(maior do que 1) de objetos a
serem
considerados poderia teruma
implementação muitoeficiente.
Um
sistema deste tipo teria somente a aparência deum
de primeira ordem,pois poderia ser reduzido a
um
sistema proposicional transformando cada condiçãocom
variável
num
conjunto de condições simples associadas acada
objeto considerado.3.3
Características
gerais
da linguagem
SPP
A
linguagemSPP
(Sistema deProdução
Proposicional), desenvolvida neste trabalho, foipensada
com
um
conjunto de características quevisam
tornar compatíveis as aplicações detempo
real e os sistemas especialistas. Muitas destas características játêm
sido discutidasanteriormente,
porém
serão igualmente sumariadasna
presente seção. Essas opções dealto nível ,adotadas para a implementação do
SPP,
são as seguintes:0
O
SPP
éimplementado
como
um
gerador de programa.As
razões deum
melhortempo
de execução, juntocom
um
entrosamento mais simplescom
outras tarefas deuma
aplicaçãoem
tempo
real,foram
as que maispesaram na
decisão.De
qualquerforma
as duas opçõesnão
são exclusivas entre si. Poderia sertambém
implemen-tado
um
interpretador que aceitassecomo
entrada a sintaxe doSPP.
Isto, de fato,aumentaria a flexibilidade de desenvolvimento
sem
diminuirem
nada
a capacidadede
tempo
real, pois seria possível desenvolvercom
o interpretador e, a seguir, obtero produto final por geração de
um
programa na
linguagem convencional (C nestecaso). '
0
A
sintaxeda
linguagemSPP
está baseada nas estruturas fundamentaisda
linguagemLISP,
ficando
assimuma
linguagem lisp-like.Em
particular todas as funções e o-peradores
usam
a notação pré-fixada do LISP. Esta escolha obedece aos seguintesmotivos: _
1.
A
tradiçãodo
LISP
em
inteligência artificial émuito
grande, e resulta portantonatural construir
uma
linguagem desse tipocom
uma
sintaxe lisp-like.2. Essa sintaxe facilitaria
grandemente
a eventual implementação deum
ambientede desenvolvimento
em
LISP
com
funções de edição, interpretação, depuração,compilação, etc. Nesta hipótese o
SPP
seria utilizado só para a geração docódigo runtime
em
C.0
Um
procedimento de backtrackíng,como
já foi visto, criariaum
“overhead” inde-que
uma
tal estratégia não permitiria garantirum
tempo
de resposta limitado, indis-pensável para aplicações
em
tempo
real. Portanto oSPP
adota,como
OPS5
[For81]e outros sistemas especialistas, o critério de
nunca
reavaliar as decisões tomadas.Dessa
forma, o processo de inferência termina cada vez que o conjunto de conflitosfica
vazio. Nestes sistemassem
backtracking, (setambém
são nao monotônicos) aestratégia de resolução de conflitos passa a ter
uma
importância fundamental.0
A
máquina
de inferência doSPP
funcionaem
encadeamento
para frente.Como
nãoé possível criar
um
sistema de produçãocom
um
algoritmo de compilação eficienteque
funcione tanto para frentecomo
para trás, o melhor é tentar' otimizaruma
dasduas alternativas.
A
escolha foi realizadaem
funçãoda
maior aplicabilidade doencadeamento
para frente à classe de problemas que se pretendia resolver.o
O
sistemaSPP
utilizaum
raciocínio não monotônico. Esta escolha foi feita visando amaior
flexibilidade do sistema.Porém,
sistemas de produção monotônicoscom
uma
grande
eficiência de execução(como
KHEOPS
[GP88])têm
sido desenvolvidoscom
sucesso.
0
O
SPP,
como
seu próprionome
indica, éum
sistema baseadona
lógica proposicional.Na
seção anteriorforam
analisadasem
profundidade as razões desta opção.0
O
tipo dos atributos e funçoes externas deve ser declarado deforma
explícita nosfontes
SPP.
Isto vai contribuir para a eficiência de execução e para a otimizaçãoda
utilizaçao
da memória.
0
Mesmo
com
algumas
restrições secundárias, a intenção é que oSPP
funcione real-mente
como
um
sistema de produção.Em
conseqüência, todas as estratégias clássicasde resolução de conflitos [For81],
como
a prioridade, a refração, a recentidade e a es-pecificidade, são implementadas.
0
As
aplicações detempo
real freqüentementedevem
realizar cálculos complexos paradeterminar, por exemplo, ações de controle.
O
sistemaSPP
está dotado deuma
boa
capacidade
matemática
construída internamente, para auxiliar oprogramador
nessesentido. -
Tudo
o que acaba de ser sumariado, representa as características globaisda
linguagemde
produção
desenvolvida. Para encontrarum
maior detalhe, o leitor deve se dirigir aoCapítulo 5.
vv
3.4
Conclusao
à _No
presente capítuloforam
delineadas as principais características do sistema de produçãoSPP.
E
implementado
como
um
gerador de programa,tem
uma
sintaxe lisp-like euma
baseado
na
lógica proposicional, e a suamáquina
de inferência trabalhasem
backtracking,com
raciocínio não monotônico,em
encadeamento para frente e atendendo às estratégiasclássicas de resoluçao de conflitos.
Por trás de cada opção adotada, sempre se teve presente o objetivo de entrosar o
modelo
de sistemas deprodução
com
as exigências dotempo
real.As
restrições que estaCapítulo
4
Metodologia
de
desenvolvimento
As
hipóteses feitas até agora dãoum
marco
suficiente para se estabelecer objetivos denível mais baixo, assim
como
uma
metodologia de desenvolvimento.No
presente capítulosão detalhadas as principais características desejadas para o sistema, e é formulada a
abordagem
escolhida para desenvolvê-lo.A
escolha das ferramentas decomputação
aserem
utilizadasno
processo de desenvolvi-mento
é outro ponto importante que será analisado a seguir.4.1
Os
objetivos
propostos
Um
sistemacom
as características especificadas até agorapode
eventualmentetomar
di-versas formas.
As
opções de implementação são muitas e a escolha entre elas dependerásobretudo dos objetivos que se pretenda atingir. Neste trabalho, o objetivo de nível mais
alto é
sem
dúvida obterum
sistema de produção que possa ser usadocomo
uma
tarefa “in-teligente” de
um
sistemaem
tempo
real. Ele ,no
entanto, deve ser divididoem
objetivosmais específicos de
modo
a daruma
forma
definitiva ao sistema.Por
motivos de padronização e generalidade, assimcomo
em
funçãoda
sua reconhecidaeficiência de execução, a linguagem
C
foi escolhidacomo
suporte para oprograma
geradopelo sistema
SPP.
No
marco
desta decisão, os objetivos que se tentou atingirpodem
sersumariados assim: '
.
o
Todo
programa
escritona
linguagem de regras doSPP
deverá ser transformadonum
conjunto de rotinas
em C
quequando chamadas
por outra tarefaC
simularão otrabalho que faria a
máquina
de inferênciado
sistema de produção.0
A
comunicação
de dados entre a tarefaC
gerada e o restante do sistema será fa-cilitado
com
a possibilidadeda
chamada
dos dois lados. Isto é,uma
comunicaçãopode
ser iniciada peloprograma
principal,chamando
ao sistema especialista gerado,ou
também
pelo sistema especialista, requerendo porexemplo
dados doprograma
o
O
programa
C
gerado deverá fazer uso dos operadores doC
em
todos os casosem
que isto for possível, de
modo
a conseguiruma
melhor eficiência de execução.0
Um
sistema detempo
real que utilize o conceito de regras de produção será ne-cessariamente
uma
aplicação híbrida - parte dele serão regras de produção e outraparte será linguagem convencional. Neste sentido se torna interessante que a maior
quantidade possível de recursos da linguagem
C
estejam disponíveisna
linguagemde regras. Isto inclui desde a possibilidade de
chamar
diretamente qualquer rotinaescrita
em
C, até a capacidade de usar,mesmo
que indiretamente,_os mais complexostipos de dados que
podem
ser definidosem
C.o
Sempre
que for possível, oprograma
C
gerado usará estruturas de apontadores paraevitar a procura seqüencial.
Em
particular, as estruturas de dadosassimcomo
ocódigo gerado, deverão estar organizados de tal
forma
que a resolução de conflitos(de acordo
com
as estratégias especificadasno
capítulo anterior) não leve anenhum
overhead.
Ou
seja que após a filtragem, as regrasdevem
ficar ordenadas no conjuntode conflitos de acordo
com
essas estratégias.o
A
ordem
das tarefas,na
etapa de filtragem, deverá ser orientada para realizar somenteos testes estritamente necessarios para a determinação do
novo
conjunto de conflitos.Isto significa, por exemplo, que
quando
uma
regra tiveruma
premissa falsa, as outrasnão
serão avaliadas.Da
observação dasmetas
especificadas se conclui que oprograma
C
gerado seráum
softwarecomplexo,
em
face sobretudo à generalidade que se pretende obter e a sua importantedependência de estruturas encadeadas para conseguir
uma
maior eficiência de execução.4.2
A
definição
do
sistema
O
desenvolvimento do sistemaSPP
foi baseadonuma
metodologia estruturada, implemen-tando os diversos
módulos
separadamente.Uma
visão de alto nívelda
arquitetura dosistema
pode
ser apreciadana figura
4.1.O
programa
principal analisa as diferentes opções de compilação e divide o trabalhoentre os outros
módulos
de nível inferior. Basicamente, a transformação da linguagem de'regras
no programa
C
é realizada por etapas.Numa
primeira etapa, a informação contidanas regras de
produção
éarmazenada
num
conjunto de tabelas internas (ver capítulo 6).Posteriormente, a informação dessas tabelas é ainda compilada para resolver entre outras
coisas as referências cruzadas. Finalmente, o conteúdo das tabelas é usado para construir
as funções e estruturas
C
doprograma
gerado. " ' ` 'O
módulo
analisador léxico, identifica os diferentes tokens presentesna
linguagem deregras e os passa para o analisador sintático. Este, por sua vez analisa a sintaxe