首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以在MGrammar中解析多行c样式的注释?

是否可以在MGrammar中解析多行c样式的注释?
EN

Stack Overflow用户
提问于 2009-10-15 06:22:16
回答 1查看 192关注 0票数 1

不过,我似乎想不出如何正确处理多行C风格的注释。例如:/*comment*/

有一些案例让我摸不着头脑:

代码语言:javascript
复制
/***/

代码语言:javascript
复制
/**//**/

我可以让其中之一工作,但不能两个都做。语法是:

代码语言:javascript
复制
    module Test {
    language Comments {

        token Comment =
            MultiLineComment;

        token MultiLineComment =
            "/*" MultiLineCommentChar* "*/";

        token MultiLineCommentChar =
            ^ "*" |
            "*" PostAsteriskChar;

        token PostAsteriskChar =
            ^ "*" |
            "*" ^("*" | "/"); 

        /*    
        token PostAsteriskChar =
            ^ "*" |
            "*" PostAsteriskChar; 
        */

        syntax Main = Comment*;
    }
}

注释掉的标记是我想要做的,但是递归标记是不允许的。事实上,MGrammar本身有“损坏的”多行注释(它不能处理/***/),这让我相信这是不可能的。

有没有人知道不是这样?

EN

回答 1

Stack Overflow用户

发布于 2009-11-10 09:40:15

我这样做的方法如下(不是所有我自己的代码,但我找不到与原始作者的引用)。

代码语言:javascript
复制
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
);

这允许单行(//)注释和多行(/* */)注释。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1570599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档