我在javacc中创建了一个词法分析器,它跳过以/ *开头并以* /结尾的块注释。我让它正常工作以获得有效的块注释,但我试图找出一种方法来在块注释未公开时抛出错误...
示例:
/* this is not a valid block comment
/* this is a valid block comment*/
以下是我必须跳过有效的块注释:
MORE: { <"/*"> : BLC_CMNT_ST}
<BLC_CMNT_ST> SKIP: { <"*/">: DEFAULT >
<BLC_CMNT_ST> MORE: { <~[]>}
目前,当我运行词法分析器时,如果有未闭合的块注释,则会抛出TokenMgrError。我想捕获此错误和/或抛出我自己的错误,显示matchedToken.image。我尝试了几种不同的方法,但遇到了问题,所以任何帮助都会受到高度赞赏
答案 0 :(得分:1)
怎么样
SKIP: { <"/*"> : BLC_CMNT_ST}
<BLC_CMNT_ST> SKIP: { "*/" : DEFAULT }
<BLC_CMNT_ST> SKIP: { < ~[] > }
<*> TOKEN : { <EOF>
{ System.out.println("Lexical state is " + curLexState ) ;
if(curLexState==BLC_CMNT_ST) throw new Error("Unmatched comment at end of file.") ; } }
由于我不完全理解的原因,我不得不使用SKIP而不是MORE。
如果您想在块注释中禁止使用“/ *”,则可以添加此产品
<BLC_CMNT_ST> TOKEN: { < "/*" >
{ if(true) throw new Error("Unmatched comment at line "
+ matchedToken.beginLine
+ ", column "
+ matchedToken.beginColumn + ".") ; } }
不幸的是,此解决方案无法让您访问评论的图像。