javacc (ph-javacc-maven-plugin) генерирует переключение java с регистром `\` - PullRequest
0 голосов
/ 21 октября 2018

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

1 Ответ

0 голосов
/ 25 октября 2018

Наблюдаемое поведение является проблемой и будет решено в parser-generator-cc 1.1.0.

...