gpt4 book ai didi

antlr - 忽略 ANTLRworks 中的空格

转载 作者:行者123 更新时间:2023-12-01 11:04:00 27 4
gpt4 key购买 nike

我有以下 ANTLR 语法:

grammar mygrammar;

ASSIGNMENT
: ID '=' INT
;

ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*
;

INT : '0'..'9'+
;

WS : ( ' '
| '\t'
| '\r'
| '\n'
) {$channel=HIDDEN;}
;

实际上只有ASSIGNMENT规则是我的,其余的都是ANTLRWorks 1.4.3添加的默认值。

当我在解释器中尝试语法时,诸如“a=5”的字符串成功,但诸如“b[space]=[space]6”的字符串失败:由于空格,我得到一个 MismatchedTokenException:

Picture of the interface with a MismatchedTokenException

来自阅读 ANTLR 网站和

Ignore rules: WS
{$channel=HIDDEN}
文本/语法规则,似乎应该忽略空格,但事实并非如此。

我做错了什么?

最佳答案

我知道您已经找到了答案,但让我解释一下为什么ASSIGNMENT 更改为 assignment 解决了这个问题。

因为以大写字母开头的规则是词法分析器规则(即标记)。并且 {skip();}{$channel=HIDDEN;} 导致词法分析器规则从解析器规则中跳过(或隐藏),而不是从词法分析器规则中。

这就是为什么 ASSIGNMENT(词法分析器规则)不接受任何空格,而 assignment(解析器规则)忽略它们的原因。

关于antlr - 忽略 ANTLRworks 中的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7897494/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com