Я пытаюсь сопоставить мою грамматику со всей строкой, и выдает ошибку, если не может использовать весь ввод В основном это псевдо-регулярное выражение:
\whitespace* [a-zA-Z]+ [-]? [a-zA-Z]+ \whitespace* $
Согласно это , EOF должен работать. Итак, рассмотрим эту грамматику:
start : CHARS EOF
;
CHARS : ('a'..'z')+
;
Если я установлю значение ввода "hello"
в этом коде:
var ss = new Antlr.Runtime.ANTLRStringStream(input);
var lex = new autocompleteLexer(ss);
var tokens = new CommonTokenStream(lex);
var parser = new autocompleteParser(tokens);
return (BaseTree)(parser.start().Tree);
Я получаю AST с двумя детьми, HELLO
и EOF
, как и ожидалось. Но если я задаю для ввода "hello#"
, оно возвращает то же самое дерево и вообще не жалуется на хеш. Я не уверен, что я делаю неправильно.