javacc (ph-javacc-maven-plugin) 生成 java switch with case `\`
javacc (ph-javacc-maven-plugin) generates java switch with case `\`
我是 javacc 的新手。我试图解析现有的 javacc 语法(它是 JSR341, EL 3.0 Grammar)。它生成(几乎)正确的 java。但是,生成的代码包含非法的 switch 语句。我正在使用 ph-javacc-maven-plugin.
private int jjMoveStringLiteralDfa0_0(){
switch(curChar)
{
case '#':
return jjMoveStringLiteralDfa1_0(0x8L);
case '$':
return jjMoveStringLiteralDfa1_0(0x4L);
case '\': // should be '\'
return jjStartNfaWithStates_0(0, 4, 2);
default :
return jjMoveNfa_0(7, 0);
}
}
这是 JS341 中有问题的语法部分(虽然我不确定它的语法本身)导致了问题:
<DEFAULT> TOKEN :
{
< LITERAL_EXPRESSION:
((~["\", "$", "#"])
| ("\" ("\" | "$" | "#"))
| ("$" ~["{", "$"])
| ("#" ~["{", "#"])
)+
| "$"
| "#"
>
|
< START_DYNAMIC_EXPRESSION: "${" > {stack.push(DEFAULT);}:
IN_EXPRESSION
|
< START_DEFERRED_EXPRESSION: "#{" > {stack.push(DEFAULT);}:
IN_EXPRESSION
}
<DEFAULT> SKIP : { "\" }
我尝试了选项(JAVA_UNICODE_ESCAPE、UNICODE_INPUT)和语法。但是没有结果。
问题:如何让 javacc 生成有效的 Java switch 语句,即使用 '\'
而不是 '\'
?
观察到的行为是一个问题,将在 parser-generator-cc
1.1.0 中解决。
我是 javacc 的新手。我试图解析现有的 javacc 语法(它是 JSR341, EL 3.0 Grammar)。它生成(几乎)正确的 java。但是,生成的代码包含非法的 switch 语句。我正在使用 ph-javacc-maven-plugin.
private int jjMoveStringLiteralDfa0_0(){
switch(curChar)
{
case '#':
return jjMoveStringLiteralDfa1_0(0x8L);
case '$':
return jjMoveStringLiteralDfa1_0(0x4L);
case '\': // should be '\'
return jjStartNfaWithStates_0(0, 4, 2);
default :
return jjMoveNfa_0(7, 0);
}
}
这是 JS341 中有问题的语法部分(虽然我不确定它的语法本身)导致了问题:
<DEFAULT> TOKEN :
{
< LITERAL_EXPRESSION:
((~["\", "$", "#"])
| ("\" ("\" | "$" | "#"))
| ("$" ~["{", "$"])
| ("#" ~["{", "#"])
)+
| "$"
| "#"
>
|
< START_DYNAMIC_EXPRESSION: "${" > {stack.push(DEFAULT);}:
IN_EXPRESSION
|
< START_DEFERRED_EXPRESSION: "#{" > {stack.push(DEFAULT);}:
IN_EXPRESSION
}
<DEFAULT> SKIP : { "\" }
我尝试了选项(JAVA_UNICODE_ESCAPE、UNICODE_INPUT)和语法。但是没有结果。
问题:如何让 javacc 生成有效的 Java switch 语句,即使用 '\'
而不是 '\'
?
观察到的行为是一个问题,将在 parser-generator-cc
1.1.0 中解决。