antlrの「*+」を使用したAST書き換えルールでのdevidegroupテクニックを使用したAST書き換えルールに関する問題の後。
ANTLRでのASTの生成に問題があります:)これが私のantlrコードです:
start : noun1+=n (prep noun2+=n (COMMA noun3+=n)*)*
-> ^(NOUN $noun1) (^(PREP prep) ^(NOUN $noun2) ^(NOUN $noun3)*)*
;
n : 'noun1'|'noun2'|'noun3'|'noun4'|'noun5';
prep : 'and'|'in';
COMMA : ',';
さて、入力: "noun1 and noun2、noun3 in noun4、noun5"で、予期しないASTをたどりました:
ANLRworkの「解析ツリー」と比較してください。
「COMMAnoun3+=n」のすべての「n」のリストを保持している$noun3変数だと思います。したがって、ASTパーサー^(NOUN $ noun3)*は、どの「n」が実際に「prep」に属しているかを特定せずに、すべての「n」を描画します。
"(^(PREP prep)^(NOUN $ noun2)^(NOUN $ noun3))"で分離できる方法はありますか。私がやりたいのは、ASTがANTLRworkの「ParseTree」を使用して、トークンCOMMAなしで正確に描画する必要があることです。
手伝ってくれてありがとう !