1
我有一個簡單的語法解析括號內包含的標識符文件和關鍵字(希望):簡單的語法不工作
grammar Keyword;
// PARSER RULES
//
entry_point : ('['ID']')*;
// LEXER RULES
//
KEYWORD : '[Keyword]';
ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*;
WS : (' ' | '\t' | '\r' | '\n' | '\r\n')
{
$channel = HIDDEN;
};
它適用於輸入:
[Hi]
[Hi]
它返回一個NoViableAltException錯誤輸入:
[Hi]
[Ki]
如果我評論KEYWORD,那麼它工作正常。此外,如果我將我的語法更改爲:
grammar Keyword;
// PARSER RULES
//
entry_point : ID*;
// LEXER RULES
//
KEYWORD : '[Keyword]';
ID : '[' ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* ']';
WS : (' ' | '\t' | '\r' | '\n' | '\r\n')
{
$channel = HIDDEN;
};
然後它工作。你能幫我弄清楚爲什麼嗎?
此致敬禮。
謝謝!是否有任何理論或建築原因,爲什麼詞法分析器在找到匹配之前不會「回來」? – Korchkidu 2012-02-13 20:17:36
@Korchkidu,不是我所知道的。我相信ANTLR(v4)的下一個版本,詞法分析器會變得「更聰明」,並能夠從#1回溯(不是100%肯定,儘管...) – 2012-02-13 20:28:16
非常感謝您的幫助! – Korchkidu 2012-02-13 20:29:48