为什么我的语法规则会导致错误,只是因为我更改了规则名称的大小写?
Why does my grammar rule cause an error, just because I changed the casing of the rule name?
我从这里复制 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
为什么语法规则因为我改变了规则的大小写而运行错误?请问你能帮帮我吗?谢谢!
以大写字母开头的规则名称被自动认为是词法分析器规则,否则就是解析器规则。通过您的更改,您将 waha
转换为具有自己的标记类型 (<WAHA>
) 的词法分析器规则。这不是 my_rule
期望的 STRING
类型,因此出现语法错误。
我从这里复制 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
为什么语法规则因为我改变了规则的大小写而运行错误?请问你能帮帮我吗?谢谢!
以大写字母开头的规则名称被自动认为是词法分析器规则,否则就是解析器规则。通过您的更改,您将 waha
转换为具有自己的标记类型 (<WAHA>
) 的词法分析器规则。这不是 my_rule
期望的 STRING
类型,因此出现语法错误。