如何在 ANTLR4 中实现这个规则?
How to implement this rule in ANTLR4?
如何在 ANTLR4 中实现此规则:
multiline-comment-text-item -> Any Unicode scalar value except /* or */
?
在 ANTLR 中,你不能说:"match this-or-that character, except these multiple (!) characters"。你只能说 "match this-or-that character, except these single (!) characters":
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
我在尝试使用 ANTLR4 解析 Swift 时遇到了这条规则。以下是我的实现:
MULTILINE_COMMENT
: '/*' ('/'*? MULTILINE_COMMENT | ('/'* | '*'*) ~[/*])*? '*'*? '*/'
;
没有必要像文档中那样将multiline-comment
拆分成那么多子规则。
如何在 ANTLR4 中实现此规则:
multiline-comment-text-item -> Any Unicode scalar value except /* or */
?
在 ANTLR 中,你不能说:"match this-or-that character, except these multiple (!) characters"。你只能说 "match this-or-that character, except these single (!) characters":
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
我在尝试使用 ANTLR4 解析 Swift 时遇到了这条规则。以下是我的实现:
MULTILINE_COMMENT
: '/*' ('/'*? MULTILINE_COMMENT | ('/'* | '*'*) ~[/*])*? '*'*? '*/'
;
没有必要像文档中那样将multiline-comment
拆分成那么多子规则。