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