我正在解析一种类似SQL的语言,在解析注释时遇到了问题。我们的想法是忽略它们。
我有以下规则:
NEWLINE: 'r'? 'n' -> skip
WS : [ t]+ -> skip
如何忽略:
- "--"或"#"与下一个"\n"之间的所有内容
- "/'和"/"之间的所有内容(斜线+星号直到星号+斜线-星号不知怎么消失了)
我在WS和NEWLINW:之前尝试过这样的东西
COMMENT1 : ('--'|'#') ~'n'* -> skip;
不起作用-我得到了:
line 1:115 missing ';' at '<EOF>'
可能是因为它不符合我的主要规则:parse:(statments(';')+)*EOF;
有人能帮我吗?
尊敬的idob
当有疑问时,看看别人做了什么;)
有一些现成的语法适用于不同的语言,或多或少起作用。
所以我查看Java的语法,发现:
COMMENT
: '/*' .*? '*/' -> skip
;
LINE_COMMENT
: '//' ~[rn]* -> skip
;
所以你的总体想法似乎是正确的。我猜问题出在别的地方。你能提供你测试的样本输入和语法(相关部分)吗?