Flex没有编译词法分析器 - 宏的错误
问题描述:
我用flex编写的词法分析器出现问题。当我尝试编译它时,没有创建exe文件,并且出现很多错误。以下是Flex文件:Flex没有编译词法分析器 - 宏的错误
%{
#ifdef PRINT
#define TOKEN(t) printf("Token: " #t "\n");
#else
#define TOKEN(t) return(t);
#endif
%}
delim [ \t\n]
ws {delim}+
digit [0-9]
id {character}({character}|{digit})*
number {digit}+
character [A-Za-z]
%%
{ws} ; /* Do Nothing */
":" TOKEN(COLON);
";" TOKEN(SEMICOLON);
"," TOKEN(COMMA);
"(" TOKEN(BRA);
")" TOKEN(CKET);
"." TOKEN(DOT);
"'" TOKEN(APOS);
"=" TOKEN(EQUALS);
"<" TOKEN(LESSTHAN);
">" TOKEN(GREATERTHAN);
"+" TOKEN(PLUS);
"-" TOKEN(SUBTRACT);
"*" TOKEN(MULTIPLY);
"/" TOKEN(DIVIDE);
{id} TOKEN(ID);
{number} TOKEN(NUMBER);
'{character}' TOKEN(CHARACTER_CONSTANT);
%%
这是我收到的错误:
spl.l: In function 'yylex':
spl.l:19:7: error: 'COLON' undeclared (first use in this function)
":" TOKEN(COLON);
^
spl.l:5:25: note: in definition of macro 'TOKEN'
#define TOKEN(t) return(t);
^
spl.l:19:7: note: each undeclared identifier is reported only once for each function it appears in
":" TOKEN(COLON);
^
spl.l:5:25: note: in definition of macro 'TOKEN'
#define TOKEN(t) return(t);
^
spl.l:20:7: error: 'SEMICOLON' undeclared (first use in this function)
";" TOKEN(SEMICOLON);
^
spl.l:5:25: note: in definition of macro 'TOKEN'
#define TOKEN(t) return(t);
,我使用编译命令:
flex a.l
gcc -o newlex.exe lex.yy.c -lfl
任何人都可以看到我的可能会出错?
答
您必须先定义令牌。定义(即ids)COLON
,SEMICOLON
等页码不是由flex生成的。这里
%{
#ifdef PRINT
#define TOKEN(t) printf("Token: " #t "\n");
#else
#define TOKEN(t) return(t);
#endif
enum { COLON = 257, SEMICOLON, COMMA, BRA, CKET, DOT, APOS, EQUALS,
LESSTHAN, GREATERTHAN, PLUS, SUBTRACT, MULTIPLY, DIVIDE,
ID, NUMBER, CHARACTER_CONSTANT };
%}
我建议IDS> 257能够同时直接从词法分析器作进一步处理返回的ASCII字符代码:你可以在枚举你的词法分析器文件的顶部定义它。 但是,通常,令牌名称也会用于yacc/bison的解析器文件,该文件会生成包含在您的词法分析器中的头文件(默认名称为y.tab.h
),该文件包含那些也与解析器函数相匹配的记号的生成的id 。
+0
谢谢你,现在有道理! – user8786494
顺便说一句,你不应该需要一个“;”在你的宏中,你已经调用它了 –