我正在使用 flex 从声明语句中生成标记:
int a = 5;
令牌是:
<int> <id,a> <=> <5>
请注意,int 的词素是 int,a 是令牌 id 的词素。
来到 lex 代码:
%{
#define YYSTYPE char*
#include "parser.tab.h"
#include "stdlib.h"
int lineno=1;
%}
white [ \t]+
letter [A-Za-z]
digit [0-9]
id {letter}({letter}|{digit})*
number {digit}+
relop >=|<=|>|<|==|!=
%%
{white} { }
{number} {yylval=strdup(yytext); return NUMBER;}
{id} { yylval=strdup(yytext); return ID;}
"+" return PLUS;
"-" return MINUS;
"*" return TIMES;
"/" return DIVIDE;
int return INT;
float return FLOAT;
问题是字符串 int 和 float 被匹配为 ID,并且令牌作为 ID 返回。因此存在语法错误。有没有办法解决这个问题?