我有一个较旧的项目,其中使用 JavaCC 语法生成类来解析自定义语言。
现在,几年后我不得不调整语法以添加功能(只是一个小改动)。 这可行,但在运行所有测试时,我发现我在解析 UTF-8 字符时遇到问题。 我真的不知道是什么原因造成的。 我恢复了对语法的更改并重新创建了类,但问题仍然存在。 一旦我用语法运行 javacc 并运行我的测试,带有 UTF-8 字符的测试就会失败。
这是我正在使用的电话:
java -cp javacc-7.0.10.jar javacc -GRAMMAR_ENCODING=UTF-8 functionsGrammar.jj
我尝试了从 4.x 到 7.0.10 的所有主要 javacc 版本,它们都有同样的问题。 我也尝试过使用不同的 Java 版本(6、7、8、11),但这也没有任何区别。
您可以在下面找到语法的相关部分:
options
{
JDK_VERSION = "1.6";
LOOKAHEAD= 2;
FORCE_LA_CHECK = true;
static = false;
}
TOKEN:
{
...
|< STRING : < QUOTES > (~["\"", "\\"])* ("\\"~[] (~["\"", "\\"])*)* < QUOTES > >
...}
TOKEN:
{
...
| < LIST :
< LCURLY_BRACE > < SPACES >
( < STRING > | < DATE > | < PARAMETER_FIELD_ID > | < PARAMETER_ELEMENT > | < NULL > )
( < COMMA > < SPACES >
( < STRING > | < DATE > | < PARAMETER_FIELD_ID > | < PARAMETER_ELEMENT > | < NULL > )
)*
...}
字符串失败:“美丽的树”,但例如更改为“slkdfj”时有效。
我想知道是否有任何我缺少的 JavaCC 选项?或者其他可能有效的 java / javacc 版本组合?