我正在尝试使用JavaCC为Javascript制作扫描程序。我有几个问题,其中一个是C风格的评论:/* … */
我需要将评论作为标记返回。
这是一次尝试:
TOKEN: {<MLCOMMENT: "/*" ( ~["*"] | ("*"(~["/"])?) )* "*/">}
TOKEN: {<MLCOMMENT_UNDELIM: ("/*"|"/*/") ( ~["/"] | (~["*"]"/") )* >}
MLCOMMENT旨在匹配已结束的评论和MLCOMMENT_UNDELIM开放式评论。这不起作用,因为/*a*/b*/
与MLCOMMENT的匹配时间比/*a*/
更长。
以下是解决此问题的另一种尝试:
MORE:
{
"/*" : WithinMLComment
}
< WithinMLComment > TOKEN :
{
< MLCOMMENT: "*/" > : DEFAULT
}
< WithinMLComment > MORE :
{
< ~[] >
}
这不起作用,因为开放式注释会导致INMLComment状态中的EOF。这是非法的(抛出TokenMgrError)。
更新 我可能找到了解决方案:
TOKEN: {<MLCOMMENT: ("/*"|"/*/") ( ~["/"] | (~["*"]"/") )* "*/">}
TOKEN: {<MLCOMMENT_UNDELIM: ("/*"|"/*/") ( ~["/"] | (~["*"]"/") )* >}
更新2:
这不是解决方案。 /**//
将与MLCOMMENT_UNDELIM匹配。
答案 0 :(得分:3)
对于多行注释,您可以使用
"/*" ( ~["*"] | ("*")+ ~["*","/"] )* ("*")*
对于缺少最终“* /”的多行注释,您可以使用
$a = 0;
foreach ($array01 as $word) {
echo '<a href="'.$array_url[$a].'"><li>'.$word.'</li></a>';
$a++;
}