在词法分析器规则 Antlr4 中匹配 EOF 令牌

Match EOF token in lexer rule Antlr4

提问人:MainS 提问时间:6/16/2021 更新时间:6/16/2021 访问量:532

问:

我想在 Antlt4 的词法分析器规则中匹配令牌,但它不起作用:EOF

RULE:    EOF;

在输入文本文件后,词法分析器只识别一个正确的标记RULE

但是,如果我尝试做这样的事情:

WORD:    'word';
RULE:    EOF;

和这个输入文件:

word

我进入了 lexer 认可的令牌列表。WORD

谁能解释为什么会这样,在这种情况下如何按规则匹配?EOFRULE

(在第二个输入文件中,我在“word”字符串后面没有字符

java 令牌 antlr antlr4 eof

评论

0赞 Bart Kiers 6/16/2021
输入源在给定语法的情况下生成标记这一事实似乎是正确的。我想我不明白你想做什么。wordWORDWORD: 'word'; RULE: EOF;
1赞 kaby76 6/16/2021
EOF 在词法分析器语法中的使用是未定义的。您正在探测不检查词法分析器中 EOF 的代码。EOF 硬连线为 -1。EOF 显示为流中的最后一个令牌,即使使用“工作”示例也是如此。 被分配了一个正值,并且不能为标记文件中的别名重新分配为 -1 - 它被错误地生成词法分析器 - 并且无法使用语法分配标记值。“正常”标记假定为正标记值。相反,请为“word: WORD EOF”定义一个解析器规则,并包含一个语义谓词来要求标记是连续的。RULEtokens { ... }

答: 暂无答案