2017-03-14 7 views
1

私はZ表記法(ISO UTF版)のantlr4文法に取り組んできました。この仕様ではlex段階と "2段階の"解析が必要です。 あなたは最初にNAME(またはDECORWORD)トークンの束にそれを入れてから、結果のトークンをスペックのパーサー文法のoperatorTemplateルールに対して解析し、適切なトークンを置き換え、最後に新しい変更されたトークンストリームを解析してAST 。ANTLR4の動的演算子の優先順位と結合性は?

私は上記の作業をしていますが、パーサーのルールの優先順位と結合性を動的に設定する方法を理解できないため、解析ツリーが間違っています。

演算子の構文は次のようになります(数字が優先される):私はルール上の関連性を設定するための任意のAPIを見ていないので、私はセマンティック述語、何かのように試してみました

-generic 5 rightassoc (_ → _) 
-function 65 rightassoc (_ ◁ _) 

expression: 
: {ZSupport.isLeftAssociative()}? expression I expression 
| <assoc=right> expression i expression 
; 

または

expression: 
: {ZSupport.isLeftAssociative()}? expression i expression 
| <assoc=right> {ZSupport.isRightAssociative()}? expression I expression 
; 

しかし、私は、次のルールセットは、相互に-REを残している」取得筆記体[式] "

これはできますか?

+0

連想性がANTLRでどのように指定されているかについては、TDARの70ページを参照してください。 – GRosenberg

答えて

0

私はセマンティック述語を移動することによって、これを達成することができました:

expression: 
: expression {ZSupport.isLeftAssociative()}? I expression 
| <assoc=right> expression I expression 
; 

私は、これがこの議論に基づいて動作するつもりではなかったという印象の下にあった: https://stackoverflow.com/a/23677069/7711235

...しかし、すべてのテストケースで正しく動作するように見えます...

関連する問題