0

Antlr3を使用して文法言語を定義しました。ANTLRWorksは、レクサーおよびパーサーコードを生成します。

以下は文法の例です。

grammar i;

@header {
package com.data;
}

elements    : (value (',' value)*)?;
insert      : 'INSERT INTO table' 'VALUES' '('elements')'';';
WS      : (' '|'\t'|'\f'|'\n'|'\r')+ {skip();}; // handle white space between keywords

上記の文法は一例に過ぎません。私は実際に私の会社のために大きな文法を開発しています。

プロジェクトのcom.dataパッケージに文法をインポートし、生​​成されたレクサーとパーサーを使用できます。私が知りたいこと:

  • Javaコードは文法内に記述する必要がありますか?
  • レクサーとパーサーを使用し、文法内ではなく別のクラス内でJavaコードを記述したいと思います。

次の投稿によると:ANTLR:簡単な例はありますか?簡単な例を示しています。ただし、私の場合、文法は大きく、インポートして使用することをお勧めします。私には多くのルールがあります:

たとえば、上記の文法は次のコードを生成します。

public void insert() throws RecognitionException;

これを処理するための最良の方法は何ですか?ボイドのリターンタイプであるルールがたくさんあります。

各ルールには、Java用語で特定の意味があります。構文を取得してからコードを呼び出して確認するのが最善の方法ではないと思います。例えば:

String input = "INSERT INTO table VALUES (null);";
if(input.equals("INSERT INTO table VALUES (null);") {
     insertData();
}

public void insertData() {
   // insert data into database
}

すべての構文をチェックしてコードを呼び出すことをお勧めしますか?

4

1 に答える 1

0

あなたの2つの質問への答え:

  1. いいえ、Javaコードを文法に埋め込む必要はありません。代わりにASTを生成できます。私の文法は十分に単純なので、私はそれをしません。
  2. 生成されたASTは、Observer/Vistorパターンを使用して処理できます。グーグルはあなたのためにそこに何かを提示する必要があります。
于 2012-11-27T13:07:22.327 に答える