ANTLR演算子の優先順位
-
12-09-2019 - |
質問
どのように演算子の優先順位はANTLRに実装されていますか?
私は、現時点でのXtext / ANTLRパッケージを使用しています。
編集ます:
私が提案、および演算子の優先順位は、現在動作しますが、3 +のようなものは*今も働く何sepp2kました。事業者は、基本的には、ツリー「を通じて落下」されます。
はまた、私はANTLRのウェブサイトにCの文法を試してみましたが、同じことがANTLRworksで起こっています。
誰も問題が何であるかを知っていますか?
BinaryExpression:
'or'? AndOp; //or op
AndOp:
'and'? ComparisonOp;
ComparisonOp:
('>'|'<'|'>='|'<='|'=='|'~=')? ConcatOp;
ConcatOp:
'..'? AddSubOp;
AddSubOp:
('+' | '-')? MultDivOp;
MultDivOp:
('*' | '/')? ExpOp;
ExpOp:
'^'? expr=Expression;
解決
ANTLRを使用すると、文法規則での優先順位を符号化します。同様ます:
expr: mult ('+' mult)* ;
mult: atom ('*' atom)* ;
atom: INT | '(' expr ')' ;
これは解析であろう "1 + 2 * 3 +(4 + 6 * 5)" として "(1 +(2 * 3))+((4 * 5)+ 6)"
他のヒント
あなたがのXtextを使用しているので、
、私はのXtextのアクション概念を使用することをお勧めします。 これは、単純な式文法で一般的にこの1のようになります:
Sum: Product ({Sum.left=current} operator=('+'|'-') right=Product)*;
Product: Atom ({Product.left=current} operator=('+'|'-') right=Atom)*;
Atom: Number | Paren;
Paren: '(' Sum ')';
Number: value=INT;
詳細については、ドキュメントのを見てください。
所属していません StackOverflow