2
我試圖將我的語法匹配到整個字符串,並且如果它不能消耗整個輸入,就會出錯。基本上,這個僞正則表達式:ANTLR匹配到輸入結束
\whitespace* [a-zA-Z]+ [-]? [a-zA-Z]+ \whitespace* $
根據this,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#"
,它將返回相同的樹,並且根本不抱怨哈希。我不確定我做錯了什麼。