Escolar Documentos
Profissional Documentos
Cultura Documentos
Obtenha uma gramática para a sua linguagem fonte e realize o analasidar sintático via mapeamento (método J.J.Neto) ou
empiricamente (método de tentativas).
Para o projeto do analisador sintático devemos determinar os não terminais, cujas máquinas de estados governarão o processo de
reconhecimento. O analisador sintático tem a função de verificar se a seqüência do texto fonte obedece à gramática da linguagem.
Desta forma, a saída deste módulo é apenas a aceitação ou não arquivo de entrada. Veremos no projeto #4 que, enquanto os testes
prosseguem, o texto objeto é gerado pela rotinas semânticas asssociadas a cada transição do autômato.
1
Código do analisador sintático:
% FSIN2.M
global OUT
global Posicao
global Arquivo
global PILHA % PILHA para look_ahead
global Carac
global PROC % arquivo da procedure atual
global ctr , ctr = 1; % contador das acoes semanticas
global pilha , pilha = []; % para numeracao de estados
global tabela , tabela = []; % tabela simbolos
look_ahead = [];
Topo_Pilha = 'ÿ';
PILHA = [ Topo_Pilha ];
IN = fopen('c:\entra.txt','r');
OUT = fopen('c:\sai.txt','w');
Arquivo = le_arq2( IN );
Posicao = 1;
clc,home
disp(' ')
disp('####################### S U C E S S O ########################')
else
disp(' ')
disp('###################### ERRO SINTÁTICO #######################')
end
fclose( 'all' );
2
function ret = Gramatica( look_ahead )
while (1)
if strcmp(PILHA(1,1), 'ÿ' )
Carac = flex2([]);
else
Carac = deblank(PILHA(1,:));
end
VALOR = Carac(6:length(Carac));
CLASSE = Carac(1);
switch E
case 1
disp('Esperava por um IDENTIFICADOR')
case 2
disp('Esperava por um ">"')
case 3
disp('Esperava por um IDENTIFICADOR ou TERMINAL ou VAZIO (E)')
case 4
disp('Esperava por um "."')
case 5
disp('Esperava por um IDENTIFICADOR ou um "("')
case 6
disp('Esperava por um IDENTIFICADOR')
case 7
disp('Esperava por um ")"')
case 8
disp('Esperava por um IDENTIFICADOR')
end
E=0;
end
if (E==0 | E==9 )
break
end
end
ret = E;