2017-06-22 5 views
1

代替ラベルを持つパーサールールがあります。
私は、ラベルのいずれかがよく訪問されたときのための訪問者のメソッドを実装したいと思います:すべてのラベルの訪問者メソッド

someRule 
    : 'a' #aLabel 
    | 'b' #bLabel 
    | 'c' #cLabel 
    ; 

そして、私はこのようないくつかの方法が必要です。あなたは終了しますあなたのようなラベル付き

T visitSomeRule(SomeRuleContext ctx) 

答えて

1

を以下のようなものとまで:しかし

override VisitAlabel(aLabelRuleContext) {....} 
override VisitBlabel(bLabelRuleContext) {....} 
override VisitClabel(cLabelRuleContext) {....} 

、代替ラベルを追加すると、一般的なコンテキストクラスを生成しないようにANTLR4を引き起こし上記の例ではです。両方を混在させることはできません。どちらか一方。あなたはSomeRuleContextにアクセスしたいなら、あなたはラベルを削除し、SomeRuleContext.

マイソースのハンドラ内での代替状況を確認する必要があります:テレンス・パー、120ページ

+0

することにより、この経験と確定ANTLR4リファレンスおそらく、私は訪問方法を無効にして、議論のタイプをチェックできますか?しかし、それはハッキリのように見える。 – Midnightas

+0

はい、それは私の答えで言及していたものです。代替ラベルに関するTerence Parrの本を読んだ場合、この機能が、より焦点を絞ったサブクラス化によって「より正確な」コンテキストを提供するために追加されたことは明らかです。そして、私は自分の仕事の大部分でラベルの使用を好むことがわかった。しかし、より高いレベルのコンテキストが本当に必要な場合は、確かに子どもを繰り返して、そのタイプを調べ、個別に行動することができます。それは可能で、私はそれをやりました。私は別のラベルについて学ぶまで。 ;) – TomServo

関連する問題