不过,我似乎想不出如何正确处理多行C风格的注释。例如:/*comment*/
有一些案例让我摸不着头脑:
/***/或
/**//**/我可以让其中之一工作,但不能两个都做。语法是:
module Test {
language Comments {
token Comment =
MultiLineComment;
token MultiLineComment =
"/*" MultiLineCommentChar* "*/";
token MultiLineCommentChar =
^ "*" |
"*" PostAsteriskChar;
token PostAsteriskChar =
^ "*" |
"*" ^("*" | "/");
/*
token PostAsteriskChar =
^ "*" |
"*" PostAsteriskChar;
*/
syntax Main = Comment*;
}
}注释掉的标记是我想要做的,但是递归标记是不允许的。事实上,MGrammar本身有“损坏的”多行注释(它不能处理/***/),这让我相信这是不可能的。
有没有人知道不是这样?
发布于 2009-11-10 09:40:15
我这样做的方法如下(不是所有我自己的代码,但我找不到与原始作者的引用)。
interleave Skippable = Whitespace | Comment;
interleave Comment = CommentToken;
@{Classification["Comment"]}
token CommentToken = CommentDelimited
| CommentLine;
token CommentDelimited = "/*" CommentDelimitedContent* "*/";
token CommentDelimitedContent
= ^('*')
| '*' ^('/');
token CommentLine = "//" CommentLineContent*;
token CommentLineContent
= ^(
'\u000A' // New Line
| '\u000D' // Carriage Return
| '\u0085' // Next Line
| '\u2028' // Line Separator
| '\u2029' // Paragraph Separator
);这允许单行(//)注释和多行(/* */)注释。
https://stackoverflow.com/questions/1570599
复制相似问题