我试图制作.l文件,但在规则无法匹配的某些行中会出现警告
"true" return TRUE;
"false" return FALSE;
"int" return INT;
"char" return CHAR;
"float" return FLOAT;
"bool" return BOOLEAN;
"if" return IF;
"else" return ELSE;
"for" return FOR;
"while" return WHILE;
"do" return DO;
"switch" return SWITCH;
"case" return CASE;
"break" return BREAK;
"default" return DEFAULT;
答案 0 :(得分:2)
如果您粘贴到问题中的行是触发警告的行,那么可能是因为您在关键字规则之前对标识符有一个包罗万象的规则。最小的例子如下:
[[:space:]] /* ignore whitespace */
[[:alpha:]][[:alnum:]]* return ID; /* Wrong!! */
keyword return KEYWORD;
. return *yytext;
这将在第三行产生警告。
订单在(f)lex定义中很重要,因为如果两个规则都匹配相同的令牌且没有规则匹配更长的令牌,那么第一个规则将胜出。
中对此进行了解释