如何在ANTLR4中实现此规则:
multiline-comment-text-item - >除/ *或* /
之外的任何Unicode标量值
?
答案 0 :(得分:0)
在ANTLR中,你不能说:“匹配这个或那个字符,除了这些多个(!)字符”。你只能说“匹配这个或那个字符,除了这些单个(!)字符”:
ANY_EXCEPT_STAR : ~[*];
ANY_EXCEPT_FSLASH : ~[/];
但FOO : ~[/*];
匹配除/
和*
之外的任何单个字符。
我不会在自己的词法分析器规则中匹配multiline-comment-text-item
,而是在multiline-comment-text
里面(最有可能)使用它:
MultilineCommentText
: '/*' .*? '*/'
;
请务必在其中加入?
,使其不合适。
请注意,这些令牌经常被隐藏或丢弃,因此它们不会最终出现在解析器规则中。那样做:
MultilineCommentText
: '/*' .*? '*/' -> skip
;
或
MultilineCommentText
: '/*' .*? '*/' -> channel(HIDDEN)
;
请参阅:https://github.com/antlr/antlr4/blob/master/doc/lexer-rules.md
答案 1 :(得分:0)
我试图用ANTLR4解析Swift时遇到了这个规则。以下是我的实施:
MULTILINE_COMMENT
: '/*' ('/'*? MULTILINE_COMMENT | ('/'* | '*'*) ~[/*])*? '*'*? '*/'
;
没有必要像在文档中那样将multiline-comment
分成许多子规则。