Antlr 缺少令牌和无关输入
我使用Python3.g4语法,并尝试修改它。我想添加类型提示,从3个字符“#t”开始。它们可以在单独的行和after语句中。Antlr 缺少令牌和无关输入,antlr,antlr4,Antlr,Antlr4,我使用Python3.g4语法,并尝试修改它。我想添加类型提示,从3个字符“#t”开始。它们可以在单独的行和after语句中。 添加和修改的规则: simple_stmt : small_stmt ( ';' small_stmt )* ';'? type_comment? NEWLINE | type_comment NEWLINE ; type_comment : TYPE_COMMENT ; TYPE_COMMENT : '#' 't' ' ' ~[\r\n]* ; 其
添加和修改的规则:
simple_stmt
: small_stmt ( ';' small_stmt )* ';'? type_comment? NEWLINE
| type_comment NEWLINE
;
type_comment
: TYPE_COMMENT
;
TYPE_COMMENT
: '#' 't' ' ' ~[\r\n]*
;
其他有关规则:
stmt
: simple_stmt
| compound_stmt
;
fragment COMMENT
: '#' ~[\r\n]*
;
compound_stmt
: if_stmt
| while_stmt
| for_stmt
| try_stmt
| with_stmt
| funcdef
| classdef
| decorated
;
while_stmt
: WHILE test ':' suite ( ELSE ':' suite )?
;
suite
: simple_stmt
| NEWLINE INDENT stmt+ DEDENT
;
投入
a = 1 #t int
#t int
#t str
s = "string"
我发现以下错误:
line 3:0 missing NEWLINE at '#t int'
line 5:0 extraneous input '#t str' expecting NEWLINE
当线路
| type_comment NEWLINE
改为
| type_comment
我收到了其他类似的错误。这个语法的正确版本是什么?我猜
#t…
会被键入注释之前定义的规则匹配。尝试将键入\u COMMENT
定义为第一个lexer规则。如果这没有帮助,请发布您的整个语法。您的语法中肯定有一些错误(请参阅我在Git中的问题),并且Antlr4文档是半封闭的,因此我切换到其他工具。要构建更健壮的语法,请通过代码生成或其他方式对其进行测试。我厌倦了与所有的事情作斗争并放弃。听起来你有权得到快速和免费的帮助。您在19小时前创建的问题。我从来没有说过我写的语法没有错误。欢迎你来帮助你。很好,摆脱你,去吧,放弃吧:我的背上没有皮。