为什么我的语法规则仅因为更改了规则名称的大小写而导致错误?

时间:2020-01-09 02:53:00

标签: antlr4

我从此处复制antlr4 json语法:grammar json

我修改了一些规则和代码,如下所示:

grammar PyJson;

my_rule
   : STRING
   ;

waha
   : STRING
   | INT
   ;

STRING
   : '"' (ESC | SAFECODEPOINT)* '"'
   ;
fragment ESC
   : '\\' (["\\/bfnrt] | UNICODE)
   ;

fragment UNICODE
   : 'u' HEX HEX HEX HEX
   ;

fragment HEX
   : [0-9a-fA-F]
   ;

fragment SAFECODEPOINT
   : ~ ["\\\u0000-\u001F]
   ;

fragment INT
   : '0' | [1-9] [0-9]*
   ;

WS
   : [ \t\n\r] + -> skip
   ;

我使用my_rule测试“ helloWorld”,它运行良好。但是,如果将规则“ waha”更改为“ WAHA”,则会引发错误。

[@0,0:11='"helloWorld"',<WAHA>,1:0]
[@1,20:19='<EOF>',<EOF>,5:0]
line 1:0 mismatched input '"helloWorld"' expecting STRING

为什么语法规则仅仅因为我改变了规则的大小写而运行错误?请问你能帮帮我吗?谢谢!

1 个答案:

答案 0 :(得分:3)

以大写字母开头的规则名称将自动被视为词法分析器规则,否则为解析器规则。进行更改后,您将waha转换为具有自己的令牌类型(<WAHA>)的词法分析器规则。这不是STRING所期望的my_rule类型,因此语法错误。