0

我为语法写了一个存根(到目前为止只匹配注释),它给了我错误:

语法错误:无效的字符文字:<INVALID>

此外,我已经追踪到以下命令中的错误:

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

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

4

2 回答 2

2

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

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

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

~('\r\n')

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

于 2009-12-10T02:33:49.683 回答
1

不知道为什么会出现该错误(目前我无法自己进行测试)。也许您否定单个字符(\r\n)或双字符(\r\n)的事实是一个问题?

如果您尝试:

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

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

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

?

于 2009-12-09T18:39:00.193 回答