缺少令牌和无关输入

时间:2015-12-10 10:34:29

标签: antlr antlr4

我使用来自here的Python3.g4语法并尝试修改它。我想添加类型提示,从3个字符开始#34; #t"。它们可以在单独的行上和后面的陈述中 添加和修改规则:

IDisposable

其他相关规则:

using

输入

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

我收到其他类似的错误。这个语法的正确版本是什么?

1 个答案:

答案 0 :(得分:0)

我的猜测是#t ...TYPE_COMMENT之前定义的规则相匹配。尝试将TYPE_COMMENT定义为第一个词法分析器规则。如果这没有帮助,请发表你的整个语法。