3

我尽了最大努力包含所有(并且仅)需要的信息。让我知道如果看到更多可以帮助你帮助我。

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

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

4

1 回答 1

1

您刚刚忘记在某些名称周围加上花括号。代替

{letter}(letter|digit)*

你应该写

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

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

于 2013-01-23T22:17:55.160 回答