自定义NetBeans插件中的JavaCC多行注释

时间:2014-01-31 16:19:25

标签: netbeans javacc

我在NetBeans中创建自定义文件时遇到问题。我有两种类型的多行注释类型:

  1. /*开头,结束*/
  2. <!--开头,结束-->
  3. MORE : { "/*": XSCRIPT_COMMENT | "<!--": XML_COMMENT }

    <XSCRIPT_COMMENT> TOKEN : { <X_SCRIPT_COMMENT_END: "*/" > : DEFAULT }

    <XML_COMMENT> TOKEN : { <XML_COMMENT_END: "-->" > : DEFAULT }

    <XSCRIPT_COMMENT,XML_COMMENT> MORE : { < ~[] > }

    问题是,当我编写评论的初始部分(TokenMgrError/*)时,两行多行注释都会抛出<!--。仅当没有结束部分且词法分析器到达文件末尾时才会发生错误。

    我的目标是创建多行注释,其作用类似于其他注释类型(当只写入初始部分时,文档的其余部分是注释类型文本)。

    请原谅我的英语,而不是我的母语。

3 个答案:

答案 0 :(得分:4)

对我来说,MartinZ的aswer也解决了JavaCC词汇问题。

 { <COMMENT: "/*" (~["*"])* |  
             "/*" (~["*"])* "*" (~["/"])* |
             "/*" (~["*"])* "*" (~["/"])* "/" > }

答案 1 :(得分:0)

一种方法是使用单个正则表达式来匹配注释。例如a / * .. * /

可以匹配多行评论
"/*" (("*")* ~["*"])* ("*" ("*")* "/"?)?

这里我做了最后的“* /”可选。 (根据我的经验,提出这种正则表达式的最佳方法是将NDFA转换为RE,如果你知道如何做到这一点。)

另一种方法是允许空字符串结束注释。添加这两个规则。

<XML_COMMENT> TOKEN : { <XML_COMMENT_END: "" > : DEFAULT }
<XSCRIPT_COMMENT> TOKEN : { <X_SCRIPT_COMMENT_END: "" > : DEFAULT }

答案 2 :(得分:0)

通过不同的正则表达式解决。首先,我用笔和纸创建了确定性自动机,但图形视图总是最好的。

<XSCRIPT_COMMENT:  
 "/*" (~["*"])* 
|
 "/*" (~["*"])* "*" (~["/"])*
| 
 "/*" (~["*"])* "*" (~["/"])* "/"
>

<XML_COMMENT:
 "<!--" (~["-"])*
|
 "<!--" (~["-"])* "-" (~["-"])*
|
 "<!--" (~["-"])* "-" (~["-"])* "-" (~[">"])*
|
 "<!--" (~["-"])* "-" (~["-"])* "-" (~[">"])* ">"
>

我意识到这两个表达式都不是来自最小化的DFA,但是像这样,它更容易理解。