Estou recebendo a seguinte mensagem quando tento executar:
Código lexico.l :
%{
#include <stdio.h>
#include "sintatico.tab.h"
%}
DIGIT [0-9]
ID [a-z][a-z0-9]*
%%
program {return(S_PROGRAM);}
if {return (S_IF); }
then {return (S_THEN); }
else {return (S_ELSE); }
while {return(S_WHILE);}
do {return(S_DO);}
var {return(S_VAR);}
begin {return(S_BEGIN);}
end {return(S_END);}
"/" {return(S_DIV);}
and {return(S_AND);}
or {return(S_OR);}
not {return(S_NOT);}
write {return(S_WRITE);}
read {return(S_READ);}
"+" {return(S_MAIS);}
"-" {return(S_MENOS);}
"*" {return(S_VEZES);}
":=" {return(S_ATRIBUI);}
":" {return(S_DOISPTOS);}
"." {return(S_PONTO);}
";" {return(S_PONTOVG);}
"," {return(S_VIRGULA);}
"(" {return(S_ABREPAR);}
")" {return(S_FECHAPAR);}
">" {return(S_MAIOR);}
"<" {return(S_MENOR);}
">=" {return(S_MAIGUAL);}
"<=" {return(S_MEIGUAL);}
"=" {return(S_IGUAL);}
"<>" {return(S_DIFERENTE);}
{DIGIT}+ {
strcpy(lexema,yytext);
return(S_NUMERO);
}
{ID} {
strcpy(lexema,yytext);
return(S_IDENTIF);
}
[ \t] /* faz nada. ignora espacos e tabulacao */
[\n] { numero_da_linha++; }
<<EOF>> { return (0); }
. {
printf("\nErro lexico. SIMBOLO DESCONHECIDO: [%s]. LINHA: %d.\n",yytext,numero_da_linha);
exit(1);
}
%%
O que é esse Flex? Tu consegue passar o link da documentação?
Primeiro pensei que fosse o extinto Adobe Flex.
Mas provavelmente é esse analisador léxico.
A variável lexema
não foi declarada em nenhum lugar.
1 curtida
Contextualizando, tenho que entregar um Compilador Pascal para MEPA utilizando Flex e Bison. Já foi disponibilizado o compilador parcialmente implementado e a partir dele devo fazer algumas correções e adaptações.
Link arquivos compilador parcialmente implementado: Pascal-para-Mepa---Parcialmente-implementado/compiladorParaTrabalhoFinal at main · VictorHugX/Pascal-para-Mepa---Parcialmente-implementado · GitHub
Uma das alterações que devo fazer para a versão final é: Corrigir problema de mensagem “Variável não declarada” (veja tabela de símbolos).
Este é o problema que postei acima. Já tentei declarar no arquivo Lexema.l como pode ver abaixo:
Mas recebo o seguinte erro quando tento declarar da forma mostrada acima:
Também notei que “lexema” e “numero_da_linha” são declarados no arquivo utils.c tbm. Não sei mais oque pode estar acontecendo.
Mas perceba que o problema de variável não declarada resolveu.
Olhando os exemplos que tem na página do github, acredito que ele não está encontrando a função yylex
porque você não pôs o seguinte include no arquivo:
#include "y.tab.h"
Se eu fosse você, daria uma estudada nos arquivos que tem no GitHub, pode te ajudar.