我最近被授权为虚构语言编写ANTLR3语法。一切似乎都很好,但我遇到了一些小问题,我可以用一些帮助来做:ANTLR3字符串文字和禁止嵌套注释
1)注释在'/*'
和'*/'
之间,可能不是嵌套的。我知道如何自己实施评论('/*' .* '*/'
),但我会如何去禁止他们的嵌套?
2)字符串文字被定义为一对双引号之间的任何字符序列(双引号和新行除外)。它们只能用在输出语句中。我试图这样定义的:
output : OUTPUT (STRINGLIT | IDENT) ;
STRINGLIT : '"' ~('\r' | '\n' | '"')* '"' ;
出于某种原因,然而,解析器接受
OUTPUT "Hello,
World!"
和tokenises它作为"Hello, \nWorld
。感叹号或关闭"
去了,我不知道。可能与空白有关?
WHITESPACE : ('\t' | ' ' | '\n' | '\r' | '\f')+ { $channel = HIDDEN; } ;
任何意见将不胜感激 - 感谢您的时间! :)
非常感谢280Z28 - 你对非嵌套性质完全正确,我不相信我没有发现!你的编辑确实代表了输入 - 谢谢! 我需要澄清第2点:不应允许STRINGLIT跨多行分割,但使用我定义的语法,解释器允许我这样做,输出显示在上面。我不确定为什么会出现这种情况! – 2013-04-25 16:33:31
ANTLR 3 *解释器*经常产生不正确的结果。您是否尝试过运行实际的解析器? – 2013-04-25 16:43:06