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