为可以包含双引号的双引号标识符编写 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: "\"" (~["\""] | "\"\"")* "\"" >
我有一个针对 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: "\"" (~["\""] | "\"\"")* "\"" >