为可以包含双引号的双引号标识符编写 JavaCC 规则

Write a JavaCC rule for double quoted identifier that can contain double quote

我有一个针对 identifier_chain(完全限定名称)的 javaCC 规则:

private void identifier_chain() #Identifier : 
{}

{
   try {
      identifier_part() ( <Colon> identifier_part() )?  ( <Period> identifier_part() )*

   } catch (ParseException e1) {

    if (exception_skip(-1, e1)) {

         identifier_chain();
      }  

   } catch (TokenMgrError e2) {

      error_skip(-1, e2);
   }     
}

private void identifier_part() #IdentifierPart : 
{

   Token valueToken = null;

}
{
    
valueToken=<DOUBLE_QUOTED_STRING_LITERAL> { 

         jjtThis.jjtSetValue(valueToken.getValue());

     }
}

< DOUBLE_QUOTED_STRING_LITERAL: "\"" (~["\""])* "\"" > 

{ matchedToken.value = LiteralUtil.convertFromDoubleQuotedString(image.toString()); }

它成功适用于 identifier_chain(完全限定名称):

"logicalColumn":"Core"."Dim - AR Payment Terms"."Payment Terms ID"

请注意,每个部分都在一对双引号内。

现在我有一种情况,每个单独的部分都可以包含一个或多个双引号,如 :

"logicalColumn":"Core"."Dim - AR""Payment Terms"."Payment Terms ID"

其中一个双引号(在一部分中)被另一个双引号转义为 ("")

无法为此用例编写新规则。

怎么样:

< DOUBLE_QUOTED_STRING_LITERAL: "\"" (~["\""] | "\"\"")* "\"" >