未关闭的注释块javacc引发错误

时间:2015-10-23 01:37:18

标签: comments lexer javacc

我在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。我尝试了几种不同的方法,但遇到了问题,所以任何帮助都会受到高度赞赏

1 个答案:

答案 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 + ".") ; } }

不幸的是,此解决方案无法让您访问评论的图像。