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

flex / c++ regex logic error

本文关键字:错误 正则表达式 flex      更新时间:2023-10-16

我尽力包含所有(且仅)所需的信息。让我知道看到更多是否可以帮助你帮助我。

我的正则表达式有问题。我的程序打印到.txt文件词法 - 令牌对。除了标识符和整数外,一切正常。例如,标识符的令牌为 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})*

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