如何从Grammar-Kit中的表达式中排除逗号运算符?

Dan*_*lme 5 comma intellij-plugin grammar-kit

我正在为包含逗号运算符的C派生语言编写IntelliJ语言插件.我正在使用Grammar-Kit生成解析器.在形式语法有很多嵌套表达式产生的地方,我用Grammar-Kit的基于优先级的表达式解析重写了它们,所以我的表达式生成如下所示:

expression ::= comma_expression
 | assignment_expression
 | conditional_expression
 | eor_expression
 | xor_expression
 | and_expression
 | equality_expression
 | relation_expression
 | add_expression
 | mul_expression
 | prefix_expression
 | postfix_group
 | primary_expression

comma_expression ::= expression ',' expression {pin=2}
// etc.
Run Code Online (Sandbox Code Playgroud)

这本身工作正常,但也有语法地方,我需要解析的表达式不能是一个逗号表达式.函数调用就是一个例子:

function_call_expression ::= identifier '(' ('void'|<<comma_list expression>>)? ')'
private meta comma_list ::= <<p>> (',' <<p>>)*
Run Code Online (Sandbox Code Playgroud)

函数参数不能是逗号表达式,因为使用逗号分隔下一个参数时这将是不明确的.(在我现在的语法中,它总是作为单个逗号表达式解析.)形式语法通过指定每个函数参数必须是赋值表达式来处理它,因为它们的赋值表达式包括所有具有更严格优先级的表达式.这对于基于Grammar-Kit优先级的语法不起作用,因为赋值表达式确实必须包含赋值.

这同样适用于初始化程序,其中允许逗号表达式会导致在类似情况下进行模糊解析int x=1, y;.

我该如何处理这种情况?我想继续使用基于优先级的解析来保持浅的PSI树,但也避免手动重写PSI树以进行函数调用以将a CommaExpression转换为参数列表.