ホームページ > Java > &#&チュートリアル > ANTLR を使用して単純な算術式パーサーを作成するにはどうすればよいですか?

ANTLR を使用して単純な算術式パーサーを作成するにはどうすればよいですか?

DDD
リリース: 2024-12-06 13:51:16
オリジナル
826 人が閲覧しました

How Can I Create a Simple Arithmetic Expression Parser Using ANTLR?

ANTLR: 簡単な例

ANTLR はテキスト データを解析するための強力なツールですが、使い始めるのは難しいかもしれません。 ANTLR の基礎を理解するための簡単な例を探している人のために、ここに包括的なデモンストレーションがあります。

文法の作成

最初に、というファイルで簡単な文法を定義しましょう。 Exp.g:

grammar Exp;

eval
    :   additionExp EOF
    ;

additionExp
    :   multiplyExp
        ( '+' multiplyExp
        | '-' multiplyExp
        )*
    ;

multiplyExp
    :   atomExp
        ( '*' atomExp
        | '/' atomExp
        )*
    ;

atomExp
    :   Number
    |   '(' additionExp ')'
    ;

Number
    :   ('0'..'9')+ ('.' ('0'..'9')+)?
    ;
ログイン後にコピー

パーサーの生成とLexer

文法が作成されたら、ANTLR jar をダウンロードし、次のコマンドを実行してパーサーとレクサーを生成します。

java -cp antlr-3.2.jar org.antlr.Tool Exp.g
ログイン後にコピー

これにより、ExpLexer.java、ExpParser が作成されます。 .java、および Exp.tokens ファイル。

テスト クラス

ANTLRDemo.java というテスト クラスを作成しましょう。

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());
    }
}
ログイン後にコピー
ログイン後にコピー

パーサーの実行を理解する

ANTLRDemo をコンパイルして実行します。 .java。式が正しく評価された場合、出力は表示されません。それ以外の場合は、エラー メッセージが表示されます。

文法への Java コードの追加

パーサーをより機能的にするには、{.. 内の文法に Java コードを追加します。 .} ブロック:

eval
    :   additionExp {
            /* plain code block! */
            System.out.println("value equals: " + $value);
        }
    ;
ログイン後にコピー

この例では、 expression.

ルールから Double 値を返す

Add は、文法内の各ルールに [double value] を返し、double を返すことを示します:

eval returns [double value]
    :   additionExp {
            /* plain code block! */
            System.out.println("value equals: " + $value);
        }
    ;
ログイン後にコピー

ANTLRDemo の変更class

ANTLRDemo.java クラスを更新して戻り値を取得します。

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());
    }
}
ログイン後にコピー
ログイン後にコピー

ANTLRDemo.java を再度実行して、コンソールに出力される結果を確認します。

以上がANTLR を使用して単純な算術式パーサーを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート