質問

どのように演算子の優先順位は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;

詳細については、ドキュメントのを見てください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top