Antlr 缺少令牌和无关输入

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]* ; 其

我使用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]*
 ;
其他有关规则:

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小时前创建的问题。我从来没有说过我写的语法没有错误。欢迎你来帮助你。很好,摆脱你,去吧,放弃吧:我的背上没有皮。