我写了一个简单的lex文件来识别C关键字.我的规则如下:
keyword do|while|char|if
%%
{keyword} { printf("Keyword %s found.", yytext); }
问题是规则正确识别源代码中的char,但它也将putchar标识为关键字char.如何强制规则只识别关键字char,而不是在其他字时出现?
最佳答案 您需要在标识符之前放置关键字.就这样. Lex正在按顺序搜索正则表达式.
%%
IF|ELSE|etc {action for keywords }
[a-zA-Z_][a-zA-Z0-9]* {action for identifiers}
%%