ANTLRWorks错误编译语法:“语法错误:无效的char literal:INVALID”

时间:2009-12-09 09:48:44

标签: unicode antlr grammar lexical-analysis

我为语法写了一个存根(目前只匹配评论),它给了我错误:

  

语法错误:char literal无效:< INVALID>

此外,我已将错误跟踪到以下命令:

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

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

2 个答案:

答案 0 :(得分:2)

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

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

但是你不能拥有它,因为它是序列(两个字符)而不是 set

~('\r\n')

您遇到的问题是第二种情况的扩展。

答案 1 :(得分:1)

不确定为什么会收到该错误(我目前无法自行测试)。也许你要否定一个字符(\r\n)或双字母(\r\n)是一个问题?

如果你尝试会发生什么:

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

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

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