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 サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











一部のアプリケーションが適切に機能しないようにする会社のセキュリティソフトウェアのトラブルシューティングとソリューション。多くの企業は、内部ネットワークセキュリティを確保するためにセキュリティソフトウェアを展開します。 ...

システムドッキングでのフィールドマッピング処理は、システムドッキングを実行する際に難しい問題に遭遇することがよくあります。システムのインターフェイスフィールドを効果的にマッピングする方法A ...

データベース操作にMyBatis-Plusまたはその他のORMフレームワークを使用する場合、エンティティクラスの属性名に基づいてクエリ条件を構築する必要があることがよくあります。あなたが毎回手動で...

多くのアプリケーションシナリオでソートを実装するために名前を数値に変換するソリューションでは、ユーザーはグループ、特に1つでソートする必要がある場合があります...

intellijideaultimatiateバージョンを使用してスプリングを開始します...

Javaオブジェクトと配列の変換:リスクの詳細な議論と鋳造タイプ変換の正しい方法多くのJava初心者は、オブジェクトのアレイへの変換に遭遇します...

eコマースプラットフォーム上のSKUおよびSPUテーブルの設計の詳細な説明この記事では、eコマースプラットフォームでのSKUとSPUのデータベース設計の問題、特にユーザー定義の販売を扱う方法について説明します。

データベースクエリにTKMYBATISを使用する場合、クエリ条件を構築するためにエンティティクラスの変数名を優雅に取得する方法は一般的な問題です。この記事はピン留めします...
