ホームページ >Java >&#&チュートリアル >ANTLR を使用して単純な数式を解析および評価するにはどうすればよいですか?
確かに、指定されたタイトルとコンテンツに対する答えは次のとおりです:
ANTLR: 例付きの簡単なステップバイステップ ガイド
ANTLR、または言語認識のための別のツールは、強力なパーサー生成ツールです。さまざまなプログラミング言語で文法を定義し、パーサーを生成できます。初心者の場合、ANTlr.org の例は少し圧倒されるかもしれません。このガイドでは、ANTLR の仕組みを理解するのに役立つ簡略化された例を提供します。
文法ファイルの作成
まず、テキスト ファイルで簡単な文法を定義します。 「Exp.g」。次の文法を使用すると、4 つの演算子 ( 、 - 、 * 、 /) と括弧を使用して基本的な数式を評価できます。
grammar Exp; eval : additionExp EOF ; additionExp : multiplyExp ( '+' multiplyExp | '-' multiplyExp )* ; multiplyExp : atomExp ( '*' atomExp | '/' atomExp )* ; atomExp : Number | '(' additionExp ')' ; Number : ('0'..'9')+ ('.' ('0'..'9')+)? ;
レクサーとパーサーの生成
仮定ANTLR jar をダウンロードしたら、次のコマンドを実行してレクサー (ExpLexer.java) とパーサーを生成します。 (ExpParser.java) クラス:
java -cp antlr-3.2.jar org.antlr.Tool Exp.g
テスト クラスの作成
次に、パーサーとを処理します式:
import org.antlr.runtime.*; public class ANTLRDemo { public static void main(String[] args) throws Exception { ANTLRStringStream in = new ANTLRStringStream("12*(5-6)"); ExpLexer lexer = new ExpLexer(in); CommonTokenStream tokens = new CommonTokenStream(lexer); ExpParser parser = new ExpParser(tokens); System.out.println(parser.eval()); } }
Java コードによる文法の拡張
計算を実行するには、文法規則内に Java コード ブロックを { } で囲んで追加します。変更された文法は次のとおりです:
grammar Exp; eval : exp=additionExp {$value = $exp.value;} ; additionExp : m1=multiplyExp {$value = $m1.value;} ( '+' m2=multiplyExp {$value += $m2.value;} | '-' m2=multiplyExp {$value -= $m2.value;} )* ; // ...
例の実行
生成されたすべてのクラスとテスト クラスをコンパイルし、ANTLRDemo クラスを実行します:
// *nix/MacOS java -cp antlr-3.2.jar org.antlr.Tool Exp.g // 1 javac -cp .:antlr-3.2.jar ANTLRDemo.java // 2 java -cp .:antlr-3.2.jar ANTLRDemo // 3 // Windows java -cp antlr-3.2.jar org.antlr.Tool Exp.g // 1 javac -cp .;antlr-3.2.jar ANTLRDemo.java // 2 java -cp .;antlr-3.2.jar ANTLRDemo // 3
これにより、「12*(5-6)」の結果が計算され、表示されます。 console.
この簡単な例は、ANTLR の基本を示しています。詳細については、ANTLR wiki、チュートリアル、ドキュメントを参照してください。
以上がANTLR を使用して単純な数式を解析および評価するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。