2

次のANTLR文法があります。

grammar Tasks;

options {
  language = Java;
}

tokens {
  TODO   = 'TODO';
}

plan : block;

block:  '(' TODO ( TODO | block )* ')';

WS : ( ' ' | '\t' | '\r' | '\n' | '\v' ) { $channel = HIDDEN; } ;

I と次の文字列:

(TODO (TODO TODO (TODO) TODO))

これは、文法から ANTRL によって生成されたパーサーによって正常に解析されます。たとえば、次のデモを使用します。

   import org.antlr.runtime.ANTLRStringStream;
   import org.antlr.runtime.CommonTokenStream;

   public class ANTLRDemo {
     public static void main(String[] args) throws Exception {
       ANTLRStringStream in = new ANTLRStringStream("(TODO (TODO TODO (TODO) TODO))");
       TasksLexer lexer = new TasksLexer(in);
       CommonTokenStream tokens = new CommonTokenStream(lexer);
       TasksParser parser = new TasksParser(tokens);
       parser.block();
     }
   } 

ただし、Eclipse プラグインANTLR IDE ツール 2.1.1は、同じ文字列を解釈するときにエラーを返します。

MismatchedTokenException: 行 1:6 の入力が一致しませんでした '(' は '\u0007' を期待しています

両方のプログラム間のこの不一致の理由は何ですか?

4

1 に答える 1

1

両方のプログラム間のこの不一致の理由は何でしょうか?

通訳はバグがあります。文法に問題はありません。

于 2012-02-03T18:28:48.880 に答える