我使用 javacc 5.0 生成带有语法文件的 json 解析器:https ://github.com/inqwell/json/blob/master/src/main/javacc/com/inqwell/json/JSON.jj
但是生成的java源代码有一些错误。
char escape = '\u005c\u005c';
和
switch(echar)
{
case 'n':
buf.append(System.getProperties().get("line.separator")); to++;
break;
case 'r': buf.append('\u005cr'); to++; break;
case 't': buf.append('\u005ct'); to++; break;
case 'b': buf.append('\u005cb'); to++; break;
case 'f': buf.append('\u005cf'); to++; break;
case '\u005c\u005c': buf.append('\u005c\u005c'); to++; break;
case '"': buf.append('"'); to++; break;
case '\u005c'': buf.append('\u005c''); to++; break;
case '\u005cr': to++; if (to < len && s.charAt(to) == '\u005cn') to++; break;
case '\u005cn': to++; break;
}
在语法文件中,它们是:
char escape = '\\';
和
switch(echar)
{
case 'n':
buf.append(System.getProperties().get("line.separator")); to++;
break;
case 'r': buf.append('\r'); to++; break;
case 't': buf.append('\t'); to++; break;
case 'b': buf.append('\b'); to++; break;
case 'f': buf.append('\f'); to++; break;
case '\\': buf.append('\\'); to++; break;
case '"': buf.append('"'); to++; break;
case '\'': buf.append('\''); to++; break;
case '\r': to++; if (to < len && s.charAt(to) == '\n') to++; break;
case '\n': to++; break;
}
这些大小写字符不应该被转义,但是怎么做呢?
更新
代码无法在我的IDEA中编译,请看我的截图: