我为语法写了一个存根(目前只匹配评论),它给了我错误:
语法错误:char literal无效:< INVALID>
此外,我已将错误跟踪到以下命令:
... ~LINE_ENDING* ...
LINE_ENDING : ( '\n' | '\r' | '\r\n');
有人可以帮我解决这个问题吗?
答案 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'
;