C++ flex/c++;正则表达式逻辑错误

C++ flex/c++;正则表达式逻辑错误,c++,regex,flex-lexer,C++,Regex,Flex Lexer,我尽了最大的努力,把所有(而且只)需要的信息都包括进去。让我知道看更多的东西是否能帮助你 我的正则表达式有问题。我的程序打印到一个.txt文件lexeme-tokenpairs。除了标识符和整数之外,一切正常。例如,标识符的令牌是262 示例输入文件: function main a: integer returns integer; b: integer is a * 2; 样本输出: function - 269 maina - 262 integer - 272 returns

我尽了最大的努力,把所有(而且只)需要的信息都包括进去。让我知道看更多的东西是否能帮助你

我的正则表达式有问题。我的程序打印到一个.txt文件lexeme-tokenpairs。除了标识符和整数之外,一切正常。例如,标识符的令牌是262

示例输入文件:

function main a: integer returns integer;
    b: integer is a * 2;
样本输出:

function - 269
maina - 262
integer - 272
returns - 274
integer - 272
; - 59
b - 262
integer - 272
is - 271
a - 262
2 - 263
; - 59
正确的输出是:

function - 269
main - 262
a - 262
: - 58
integer - 272
returns - 274
integer - 272
; - 59
b - 262
: - 58
integer - 272
is - 271
a - 262
* - 261
2 - 263
; - 59

总而言之,它组合了两个由空格分隔的标识符,还删除了标识符后面的任何标记。

您刚刚忘记在一些名称周围加上大括号。而不是

{letter}(letter|digit)*
你应该写

{letter}({letter}|{digit})*

您还需要将函数的规则整数的规则返回的规则移到标识符的规则之前,因为标识符的规则也匹配这些规则。

您关于将关键字放在标识符之前的评论很有帮助,但去掉名称并不会改变输出问题。无需担心。我用你的正则表达式修正切换回我的旧函数,它成功了。谢谢