我遇到了一个问题,我试图在ANTLR4中匹配标识符,但它似乎会在一段时间后将它们切断。以下是我的语法的相关部分:
prog: (EOL)* statements;
statements: statement (EOL)+ (statement (EOL)+)* ;
statement : declaration ;
declaration : mutability ' '+ ident ' '* assign_operator ' '* expression ;
block : '{' statements '}';
expression : ident
| number ;
EOL : '\n' ;
mutability : ('let'|'var') ;
assign_operator : '=' ;
number : ('-'?(DIGIT|'_')+('.')?(DIGIT|'_')*('e''-'?)?(DIGIT|'_')*) ;
ident : ('_'|LETTER) ('_'|LETTER|DIGIT)* ;
DIGIT : '0'..'9' ;
LETTER : ('a'..'z'|'A'..'Z') ;下面是我的测试用例:
let _1 = 5
let _12 = 5
let _123 = 5
let _1234 = 5
let _12345 = 5
let _123456 = 5
let _1234567 = 5
let _12345678 = 5
let _123456789 = 5
let _1234567890 = 5
let a = 5
let ab = 5
let abc = 5
let abcd = 5
let abcde = 5
let abcdef = 5它对除最后两个语句以外的所有语句都有效。它给了我
line 33:8 no viable alternative at input 'let abcde'
line 34:8 no viable alternative at input 'let abcde'并且无法对它们进行解析。我不明白如果我以_开头并使用一堆数字,但每次使用相同数量的字母后它都失败了,为什么它会起作用。
发布于 2017-02-11 00:46:01
检查令牌流输出。通常,这类问题是由lexer生成的错误标记引起的。
https://stackoverflow.com/questions/42147342
复制相似问题