Flex无法识别标识符

时间:2018-02-04 19:10:34

标签: c parsing flex-lexer

我正在尝试使用flex实现一个非常简单的解析器。我目前卡在ID识别中。那是我的代码:

ID [a−zA−Z_][a−zA−Z0−9_]*
...
{ID} { printf( "An identifier: %s\n", yytext ); return TOK_ID;}

然而,我得到的只是标识符的第一个字母,例如,如果我尝试解析:

int _underscore ;

结果是:

An identifier: _

有什么建议吗?

编辑:

通过更准确的分析,我发现代码只能识别带有a,z,A,Z,_的id,它们是正则表达式中的显式字符。我没有在网上找到类似的东西,这是一个错误吗?

EDIT2:

如果我以这种方式修改代码所有工作

ID [a−zA−Z_][a−zA−Z0−9_]*
...
[a−zA−Z_][a−zA−Z0−9_]* { printf( "An identifier: %s\n", yytext ); return TOK_ID;}

根据文件,它应该以另一种方式起作用。

1 个答案:

答案 0 :(得分:3)

这是一个字符编码问题。在您的复制粘贴源代码中,您在ID的定义中看起来的内容如ASCII连字符(-,代码U + 2D):

ID [a−zA−Z_][a−zA−Z0−9_]*

AREN'吨。相反,他们是unicode减号(,U + 2212)。如果使用正确的连字符替换不正确的减号,则该行将如下所示:

ID [a-zA-Z_][a-zA-Z0-9_]*

根据您的字体,如果您仔细看非常,您可能会发现第一个版本中的与第二个版本中的-之间存在差异。

无论如何,用上面的第二个版本替换你的ID定义(或者从头开始重新输入,一切都应该很好。