ANTLRWorks错误编译语法:“语法错误:无效字符文字:无效”
问题描述:
我写了一个存根语法(只匹配评论到目前为止),和它给我的错误:ANTLRWorks错误编译语法:“语法错误:无效字符文字:无效”
syntax error: invalid char literal: <INVALID>
而且,我已经追查到错误,以在以下命令:
... ~LINE_ENDING* ...
LINE_ENDING : ('\n' | '\r' | '\r\n');
有人可以帮我解决这个问题吗?
答
~
运算符只能应用于一个集合。在词法分析器中,集合的元素是输入流的字符。换句话说,你可以有这样的:
~( 'a'..'z'
| 'C'
| '\r'
| '\n'
)
但你不能有这样的,因为它是一个序列(两个字符),而不是一个设置。
~('\r\n')
您遇到的问题是第二种情况的延伸。
答
不知道为什么你会得到这个错误(我目前没有办法自己测试它)。也许你否定单个字符(\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
这很有道理,+1。 @RCIX:将此标记为公认的答案是公平的。 – 2009-12-10 08:51:42
啊谢谢!这就说得通了... – RCIX 2009-12-10 10:07:36