我在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; 有办法处理这个错误吗?
答案 0 :(得分:1)
我建议您使用以下内容解析范围语句。
void rangeStatement() : }{
Token tk ;
} {
<RANGE>
tk=<STRING_LITERAL>
{ reparse( tk.image ) ; }
...
}
即。接受任何字符串作为范围字符串,然后使用第二个解析器解析范围字符串的内容。