我是javacc的新手。我试图解析现有的javacc语法(它是JSR341,EL 3.0语法)。它生成(几乎)正确的java。但是,生成的代码包含一个非法的开关语句。我用的是ph-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生成有效的javacc语句,即使用'\\'而不是'\'
发布于 2018-10-25 17:23:22
观察到的行为是一个问题,将在parser-generator-cc 1.1.0中解决。
https://stackoverflow.com/questions/52914656
复制相似问题