Mensagem "Variável não declarada" usando Flex

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:

image

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.