1
ANTLR4で識別子を照合しようとしているところに問題があり、しばらくしてから切断しているようです。ここに私の文法の関連する部分である:ANTLRでの識別子の解析
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'
それらのためにそれらを解析することができません。私は_で始まり、数字の束を使用するが、毎回同じ数の文字の後に失敗すると、なぜそれがうまくいくのか分からない。
トークンストリームのダンプは何を表示しますか?あなたのレクサーがテスト入力のために戻したトークンはどれですか? –
OOOHHHH!私はこの行を持っています:私はどのように科学記法を許可したいのために '' e '= 45'!正しい方向に私を指摘していただきありがとうございます! – CaseyB
私は答えとしてこれを投稿できると思います:-) –