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

时间:2016-01-20 09:03:22

标签: c keyword flex-lexer lex

我写了一个简单的lex文件来识别C关键字。我的规则如下:

keyword do|while|char|if
%%
{keyword}  { printf("Keyword %s found.", yytext); }

问题是规则在源代码中正确识别char,但它还将putchar之类的内容标识为关键字char。如何强制规则仅识别关键字char,而不是在其他字词中出现时?

2 个答案:

答案 0 :(得分:2)

您需要在标识符之前添加关键字。这就是全部。 Lex正在按顺序搜索正则表达式。

%%

IF|ELSE|etc {action for keywords }

[a-zA-Z_][a-zA-Z0-9]* {action for identifiers}

%%

答案 1 :(得分:0)

您的词法分析器必须匹配其他内容(包括与“put”子字符串匹配的内容),以便区分关键字和非关键字。

如果我正在编写词法分析器,我会通过匹配可能的标识符并使​​用查找表来识别生成的标记中的关键字来简化它。