私は ANTLR を使用した言語の作成に取り組んでおり、expr.g の例を使用してベース言語を開始しました。私はANTLR 3を使用しています。intよりも多くのデータ型に取り組む準備ができています.
彼の例では、return float という式がありますが、これは int を返さないことを意味します。返品ルールで複数の返品タイプを許可する方法について混乱していますか? int と float を組み合わせた "number" 型を作成してそれを返すことができると考えていましたが、もちろん、Java 内で特に int または float を返さなければならないという問題に遭遇しました。データ型ごとに 1 つずつ、2 つのバージョンの式コードが必要ですか? これは必要ないと思いますが、困惑しています...式にオプションのルールを使用することは想像できます(つまり、この式ではfloatまたはintのいずれかが有効です)が、戻り値の型自体には特定の型が必要です。繰り返して申し訳ありませんが、私が混乱していることを明確にしていただければ幸いです。
そして式文法セクション:
expr returns [int value]
: e=mexpr {$value = $e.value;}
( PLUS e=mexpr {$value += $e.value;}
| MINUS e=mexpr {$value -= $e.value;}
)*
;
バートのものと比較してください:
additionExp returns [double value]
: m1=multiplyExp {$value = $m1.value;}
( '+' m2=multiplyExp {$value += $m2.value;}
| '-' m2=multiplyExp {$value -= $m2.value;}
)*
;
そしてもちろん、私たちのルールは適切なデータ型を使用しています (私にとっては int、彼にとっては float)...