JavaCC 中的多行注释
Multiline comments in JavaCC
我正在尝试使用 JavaCC 为 Javascript 制作一个扫描器。我有几个问题,其中之一是 C 风格的注释:/* … */
我需要 return 注释作为标记。
这是一次尝试:
TOKEN: {<MLCOMMENT: "/*" ( ~["*"] | ("*"(~["/"])?) )* "*/">}
TOKEN: {<MLCOMMENT_UNDELIM: ("/*"|"/*/") ( ~["/"] | (~["*"]"/") )* >}
MLCOMMENT 旨在匹配封闭式评论和 MLCOMMENT_UNDELIM 开放式评论。这不起作用,因为 /*a*/b*/
比 /*a*/
.
与 MLCOMMENT 的匹配时间更长
这是解决此问题的另一种尝试:
MORE:
{
"/*" : WithinMLComment
}
< WithinMLComment > TOKEN :
{
< MLCOMMENT: "*/" > : DEFAULT
}
< WithinMLComment > MORE :
{
< ~[] >
}
这也不起作用,因为开放式注释会在 WithinMLComment 状态中导致 EOF。这是非法的(抛出 TokenMgrError)。
更新:
我可能已经找到解决方案:
TOKEN: {<MLCOMMENT: ("/*"|"/*/") ( ~["/"] | (~["*"]"/") )* "*/">}
TOKEN: {<MLCOMMENT_UNDELIM: ("/*"|"/*/") ( ~["/"] | (~["*"]"/") )* >}
更新二:
这不是解决方案。 /**//
将匹配 MLCOMMENT_UNDELIM。
对于多行注释,您可以使用
"/*" (~["*"])* "*" (~["*","/"] (~["*"])* "*" | "*")* "/"
对于缺少最后一个“*/”的多行注释,您可以使用
"/*" ( ~["*"] | ("*")+ ~["*","/"] )* ("*")*
我正在尝试使用 JavaCC 为 Javascript 制作一个扫描器。我有几个问题,其中之一是 C 风格的注释:/* … */
我需要 return 注释作为标记。
这是一次尝试:
TOKEN: {<MLCOMMENT: "/*" ( ~["*"] | ("*"(~["/"])?) )* "*/">}
TOKEN: {<MLCOMMENT_UNDELIM: ("/*"|"/*/") ( ~["/"] | (~["*"]"/") )* >}
MLCOMMENT 旨在匹配封闭式评论和 MLCOMMENT_UNDELIM 开放式评论。这不起作用,因为 /*a*/b*/
比 /*a*/
.
这是解决此问题的另一种尝试:
MORE:
{
"/*" : WithinMLComment
}
< WithinMLComment > TOKEN :
{
< MLCOMMENT: "*/" > : DEFAULT
}
< WithinMLComment > MORE :
{
< ~[] >
}
这也不起作用,因为开放式注释会在 WithinMLComment 状态中导致 EOF。这是非法的(抛出 TokenMgrError)。
更新: 我可能已经找到解决方案:
TOKEN: {<MLCOMMENT: ("/*"|"/*/") ( ~["/"] | (~["*"]"/") )* "*/">}
TOKEN: {<MLCOMMENT_UNDELIM: ("/*"|"/*/") ( ~["/"] | (~["*"]"/") )* >}
更新二:
这不是解决方案。 /**//
将匹配 MLCOMMENT_UNDELIM。
对于多行注释,您可以使用
"/*" (~["*"])* "*" (~["*","/"] (~["*"])* "*" | "*")* "/"
对于缺少最后一个“*/”的多行注释,您可以使用
"/*" ( ~["*"] | ("*")+ ~["*","/"] )* ("*")*