Javacc:两个规则接受的一个输入

时间:2015-03-17 20:11:57

标签: compiler-construction javacc

我在javacc中有一个语法文件,如下所示:

    TOKEN : {
        <STRING_LITERAL : ( "\"" ~ ["\"","\\"] | "\\" (
         ["n","t","b","r","f","\\","\'","\""] | ["0"-"7"] (["0"-"7"])? | ["0"-"3"] ["0"-"7"]
         ["0"-"7"] | ( ["\n","\r"] | "\r\n")))* "\""> 
    }

和生成规则,用于检查string_litral的特定模式 即

    void rangearg():{}
    {
        <DQUOTE> rangearg1() <DQUOTE>
    }

    void rangearg1():{}
    {
        rangepart() ("|" rangepart())* 
    }
    void rangepart():{}
    {
        rangeboundary()[ ".." rangeboundary()]
    }
    void rangeboundary():{}
    {
       <MIN> | <MAX> |  <ZERO> |(<INTVALUE>)+(<INTVALUE1>)* | <MINUS> ((<INTVALUE>)+)(<INTVALUE1>)*
    }

现在我的问题是:每当遇到表单的字符串时,都会出错    遇到&#34; STRING_LITERAL&#34;在第XX行XX栏,预期&#34; \&#34;&#34; 有办法处理这个错误吗?

1 个答案:

答案 0 :(得分:1)

我建议您使用以下内容解析范围语句。

void rangeStatement() : }{
    Token tk ;
} {
    <RANGE>
    tk=<STRING_LITERAL>
    { reparse( tk.image ) ; }
    ...
}

即。接受任何字符串作为范围字符串,然后使用第二个解析器解析范围字符串的内容。