lexと同じコンパイラー・コンパイラーです。言語のインタプリタ他の言語への変換ツールを容易に作成することができます。使ったことにより、その価値が見直されているのではないかと思います。再利用できる点が優れています。†ANTWorksは、ANTLRの文法を作成、チェックするためのワークベンチです。ルールの編集インタプリタの提供(テストデータがどのように解析されるか構文ツリーで表示)デバッガの提供(どのルールでどのように構文解析されたかを確認できる)ルールからパーザーの生成ができます。†ANTLRWorksは、以下のURLからマシン環境に合ったファイルをダウンローしてください。Xをダウンロードしました。画面の表示例を以下に示します。yaccではLALR(1)を使って構文解析を行うのに対し、ANTLRはLL(*)を使って構文解析を行います。字句解析と構文解析を1つのツールで処理する構文解析の結果生成される構文木(AST)を入力して次の段階の構文解析を行うことができるANTLRWorksというGUI開発環境を提供し、構文のチェック、入力データの構文解析結果の表示、デバッグができる様々なプラットフォーム、言語に対応しているが挙げられます。noassocが使えないため、文法で明示的に優先順位を指定する必要があるの違いがあります。')'をどのようにANTLRで記述するかを紹介します。左再帰(left-recursive)を避けるために、文法を以下のように変更します。factor)*;ここで*は、カッコで括った部分が0回以上繰り返されることを意味します。productで8個の警告が出力されます。factor)*;に変更します。Diagramを見てみましょう。これは、productが1個あり、その後に+または-に続きproductが繰り返されることを表現しています。expressionのシンタックス・グラフとは形は異なりますが、同じ処理をすることが読み取れます。演算の優先順位は、明示的に文法に記述する必要があります。和(+)、差(-)積(*)、商(/)カッコ、識別子、定数のように下に行くほど優先順位が高くなります。これをそれぞれpxpressionproductfactorと明示的に定義します。Interpreterで優先順位が正しく処理されているか見てみましょう。累乗(power)のように右結合演算子(right-associative)の処理は、次のように記述します。')';ここで、powerは、右再帰となっています。5)の計算順序を正しく処理しているのが分かります。†ANTLRでも、yaccのように文法の中にアクションを記述することができます。先の、例題にアクションを追加すると次のようになります。文法はタブ1個の後、アクションはタブ2個の後に記述することにします。;改行で計算をするようにprogを追加しました。value]を追加することで、戻り値の型と値を保持する変数を定義します。ラベルで代用することができます。$e.value);累乗の計算をしています。†ANTLRWorksでは、テストプログラムを作成しなくても、文法を実行し、デバッグすることができます。Text」ダイアログが表示します。forwardボタンを押すと、入力テキストが文法のどの部分にマッチしていくかが分かりますOutputボタンを選択すると計算結果や途中のSystem.out.printlnの値を見ることができます。4皆様のご意見、ご希望をお待ちしております。yaccは、LR(1)ではなく、LALR(1)でした。訂正し、お詫びします。