次の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' を期待しています
両方のプログラム間のこの不一致の理由は何ですか?