我對ANTLR相當陌生,所以這可能是一個簡單的問題。
我已經定義了一個簡單的語法這應該包括數字和標識符算術表達式ANTLR爲什麼不解析整個輸入?
的語法如下所示(以字母開始,並繼續與一個或多個字母或數字的字符串。):
grammar while;
@lexer::header {
package ConFreeG;
}
@header {
package ConFreeG;
import ConFreeG.IR.*;
}
@parser::members {
}
arith:
term
| '(' arith ('-' | '+' | '*') arith ')'
;
term returns [AExpr a]:
NUM
{
int n = Integer.parseInt($NUM.text);
a = new Num(n);
}
| IDENT
{
a = new Var($IDENT.text);
}
;
fragment LOWER : ('a'..'z');
fragment UPPER : ('A'..'Z');
fragment NONNULL : ('1'..'9');
fragment NUMBER : ('0' | NONNULL);
IDENT : (LOWER | UPPER) (LOWER | UPPER | NUMBER)*;
NUM : '0' | NONNULL NUMBER*;
fragment NEWLINE:'\r'? '\n';
WHITESPACE : (' ' | '\t' | NEWLINE)+ { $channel=HIDDEN; };
我在ANTLR IDE Eclipse插件中使用ANTLR v3。當我使用翻譯解析表達式(8 + a45)
,僅生成解析樹的一部分:
alt text http://i43.tinypic.com/or4idw.png
爲什麼第二項(A45)沒有得到解析?如果兩個詞都是數字,也會發生同樣的情況
謝謝
馬丁Wiboe
這是一個用於解析你的出發規則? – Gokul 2010-04-05 20:07:25
使用解釋器時,我選擇'arith'作爲解析規則。 – 2010-04-05 21:48:10