Lex:C关键字规则无法正确识别

我写了一个简单的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}

%%
点赞