0

私はANTLRを初めて使用し、ANTLRを使用して入力を検証することについての基本的な理解を持っていますが、要件を満たしていない方法もあります。私の要件は基本的に、完全な文字列の一部を検証することです。私の入力は、ヘッダー、学生データ、学校データ、フッターの 4 つのセクションに分割されます。サンプルデータは次のようになります

HEADER,MYDATA STUDENT,NAME,ROLLNO SCHOOL,NAME,ADDRESS STUDENT,NAME,ROLLNO SCHOOL,NAME,ADDRESS FOOTER

HEADER、SCHOOL、STUDENTは異なるトークンになります

文法ファイルが一般的です。各セクションは異なるプロセスを介して提供されます。たとえば、ANTLR文法に基づいたヘッダーの詳細のみ、および学生、学校、フッターの詳細のみを検証するにはどうすればよいですか???

ANTLRStringStream を介して入力として部分的なデータ (ヘッダー データの例) のみを渡すと、NoViableException で失敗します。

4

1 に答える 1

1

文法の場合、次のように、各セクションを個別に検証するための個別のルールがあります。

completeData: header studentData schoolData footer;

/* Rule for matching header part */
header: something something;
/* and so on for other sections */

完全なデータのルールを呼び出す代わりに、これらのルールを呼び出すことができます。また、適切な部分入力 (ヘッダー部分など) を提供する必要があります。

コードは次のようになります。

try {
    MyLexer lexer = new MyLexer (new ANTLRStringStream (myInputString));
    CommonTokenStream tokens = new CommonTokenStream (lexer);
    MyParser parser = new MyParser (tokens);

    parser.header ();
} catch (Exception ex) {
    ex.printStackTrace ();
}
于 2013-08-07T18:25:59.070 に答える