1

最初のエラーでANTLR3.2を終了させる方法を教えてください。これは役に立ちます。

ただし、文法がおかしくなることなく、これらの「@」ルールを追加することはできないようです。私の文法ファイルは単純です:

 grammar Exp;
 options {
 output=AST;

 }

 program 
  : includes decls (procedure)*  main  -> ^(SMALLCPROGRAM includes decls (procedure)*    main) //AST - PROGRAM root
  ;

   //Lexer and Parser rules continue below as normal..tested thoroughly and works

しかし、これらの@ルールのいずれかを追加しようとすると、次のようなエラーが発生します。

grammar file Exp.g has no rules

と:

 Exp.g:0:1: syntax error: assign.types: org.antlr.runtime.EarlyExitException

 org\antlr\grammar\v3\DefineGrammarItemsWalker.g: node from line 202:4 required (...)+ loop did not match anything at input ';'

誰もが問題が何であるかについての考えを持っていますか?文法を変更して、別のメインクラスから実行すると(ANTLRStringStreamなどを使用して入力を渡す)、構文上の問題がある場合に、次のようなことを言うのではなく、実際にメインクラスでエラーがスローされるようにします。

line 1:57 missing RPAREN at '{'       

残りの入力を正常に解析し続ける前に。最終的に、私のメインクラスは、文法で定義されている構文上の不正な入力の解析を拒否し、エラーをユーザーに報告する必要があります。

4

1 に答える 1

2

セクション/ブロックの順序が間違っている可能性があります。次のようになっていることを確認してください。

grammar Exp;

options {
  ...
}

tokens {
  ...
}

@parser::header {
  ...
}

@lexer::header {
  ...
}

@parser::members {

  ...
}

@lexer::members {
  ...
}

ブロックの前に@memberor@headerセクションを配置したと思います。の直後に来る必要があります。tokens { ... }tokens { ... } options { ... }

また、特定の 3.x バージョンでは、空のセクションに問題があったことも覚えています。すべてのセクションに少なくとも何かがあることを確認してください。そうでない場合は、空のセクションを省略してください。

于 2013-02-13T21:06:15.297 に答える