Я новичок в 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, т. Е. С '\\'
вместо '\'
?