2012-02-13 149 views
0

我有以下语言,我希望使用antlr 1.2.2解析。Antrl词法分析器/解析器异常了解

TEST <name> 
{ 
    <param_name> = <param value>; 
} 

而 < ...> - 意味着用户值,而不是语言关键字的一部分

例如

TEST myTest 
{ 
    my_param = 1.0; 
} 

的值可以是整数,实数或一个quated字符串 my_param = 1.0;,my_param = 1;my_param = "myStringValue";都是有效的输入。

这里是这个解析的语法。

parse_test : TESTKEYWORD TEST_NAME '{' param_value_def '}'; 
param_value_def : ID EQUALS param_value ';'; 
param_value : REAL|INTEGER|QUOTED_STRING; 


TESTKEYWORD : 'TEST'; 

QUOTED_STRING : '"' ~('"')* '"'; 

INTEGER  : MINUS? DIGIT DIGIT* 

REAL  : INTEGER '.' DIGIT DIGIT*; 

EQUALS  : '='; 

fragment 
MINUS  : '-'; 

fragment 
DIGIT  : '0'..'9'; 

当我喂输入ANTLR解释样品,我得到有关param_value规则'MismatchedTokenException异常”。

你能帮我解密错误信息吗?我做错了什么?

感谢

+0

这是不可能的,告诉了什么,因为你贴失误规则的语法错了,你没有考虑空格(和换行符),并有一个分号'INTEGER'后失踪规则。 – 2012-02-13 14:51:03

回答

1

虽然ANTLRWorks是不是写得很好的工具,你可以使用它的调试器,看看哪些令牌输入导致这个异常,然后就可以看到哪些规则需要修改,(因为你没有没有发布完整的语法)。

http://www.antlr.org/works/index.html

+0

即使你的答案没有提供直接的答案,而且我已经是新的东西了。我感谢您的帮助。 – NirMH 2012-02-13 10:00:55

+0

我用你的语法的一部分来测试,但不能重现异常。所以下次你可以发布更多的信息(至少应该帮助他人重现这个问题)。 – 2012-02-14 02:29:06