ANTLRWorks错误编译语法:“语法错误:无效字符文字:无效”

问题描述:

我写了一个存根语法(只匹配评论到目前为止),和它给我的错误:ANTLRWorks错误编译语法:“语法错误:无效字符文字:无效”

syntax error: invalid char literal: <INVALID>

而且,我已经追查到错误,以在以下命令:

... ~LINE_ENDING* ... 
LINE_ENDING  : ('\n' | '\r' | '\r\n'); 

有人可以帮我解决这个问题吗?

~运算符只能应用于一个集合。在词法分析器中,集合的元素是输入流的字符。换句话说,你可以有这样的:

~( 'a'..'z' 
| 'C' 
| '\r' 
| '\n' 
) 

但你不能有这样的,因为它是一个序列(两个字符),而不是一个设置

~('\r\n') 

您遇到的问题是第二种情况的延伸。

+0

这很有道理,+1。 @RCIX:将此标记为公认的答案是公平的。 – 2009-12-10 08:51:42

+0

啊谢谢!这就说得通了... – RCIX 2009-12-10 10:07:36

不知道为什么你会得到这个错误(我目前没有办法自己测试它)。也许你否定单个字符(\r\n)或双字符(\r\n)是一个问题?

会发生什么事,如果你尝试:

SingleLineComment 
    : '//' (~LineBreakChar)* (NewLine | EOF) 
    ; 

LineBreakChar 
    : '\r' | '\n' 
    ; 

NewLine 
    : '\r'? '\n' | '\r' 
    ; 

+0

这很有趣:当使用'〜('\ r'|'\ n')*'时,我不会得到错误,所以它一定是出于这个原因。我将不得不添加评论,并可能会报告这个或其他内容,感谢您的帮助! – RCIX 2009-12-10 02:18:54