我試圖實現一個表達式處理語法(即處理嵌套括號和東西)。到目前爲止我有以下內容,但它們無法處理某些情況(在下面的代碼塊之後出現成功/失敗的情況)。任何人都知道發生了什麼事?ANTLR用於表達式的語法
注:VARNAME + =和VARNAME =東西是XTEXT只是一些額外的AST代幫手東西。現在不要擔心他們。
...
NilExpression returns Expression:
'nil';
FalseExpression returns Expression:
'false';
TrueExpression returns Expression:
'true';
NumberExpression returns Expression:
value=Number;
StringExpression returns Expression:
value=STRING; //EllipsesExpression: '...';
//FunctionExpression: function=function; //don't allow random functions
UnaryExpression:
op=unop ('(' expr=Expression ')')|expr=Expression;
BinaryExpression:
'or'? AndOp; //or op
AndOp:
'and'? ComparisonOp;
ComparisonOp:
('>'|'<'|'>='|'<='|'=='|'~=')? ConcatOp;
ConcatOp:
'..'? AddSubOp;
AddSubOp:
('+' '-')? MultDivOp;
MultDivOp:
('*' '/')? ExpOp;
ExpOp:
'^'? (('(' expr=Expression ')')|expr=Expression);
ExprSideOne : Variable|NilExpression|FalseExpression|TrueExpression|
NumberExpression|StringExpression|UnaryExpression;
Expression:
(
'('
expression1=ExprSideOne expression2+=BinaryExpression*
')'
)
|
(expression1=ExprSideOne expression2+=BinaryExpression*)
;
...
而這裏的解析列表/失敗:
c = ((b)); //fails
c = ((a not b)); //fails
c = b; //parses
d = (b); //parses
需要遞歸。 出於好奇,爲什麼你的二元運算符規則寫成一元運算符?是否> = .. + *(1)應該是什麼意思? – 2009-10-10 04:10:21