我最近的任务是为一种虚构语言编写 ANTLR3 语法。其他一切似乎都很好,但我有几个小问题可以通过一些帮助来解决:
1) 注释在'/*'
和之间'*/'
,不能嵌套。我知道如何自己实现注释('/*' .* '*/'
),但是我将如何禁止它们的嵌套呢?
2) 字符串字面量定义为一对双引号之间的任何字符序列(双引号和换行符除外)。它们只能在输出语句中使用。我试图这样定义:
output : OUTPUT (STRINGLIT | IDENT) ;
STRINGLIT : '"' ~('\r' | '\n' | '"')* '"' ;
然而,由于某种原因,解析器接受
OUTPUT "Hello,
World!"
并将其标记为"Hello, \nWorld
. "
我不知道感叹号或结束在哪里。也许与空白有关?
WHITESPACE : ( '\t' | ' ' | '\n' | '\r' | '\f' )+ { $channel = HIDDEN; } ;
任何建议将不胜感激 - 感谢您的宝贵时间!:)