我有一个用于解析 C 中的表达式的 YACC 语法。这些是其中的一些片段:
Expr: Expr COMMA Expr
| Assignment
Assignment: IDENTIFIER
| Assignment COMMA Assignment
Function Call: IDENTIFIER PARENOPEN Expr PARENOPEN
我基本上希望能够解析 a(p,q,r) 形式的函数调用,并检查传递的参数的数量和类型是否与函数定义中指定的匹配,以便它们减少Expr
到标识符本身的级别。
最终发生的事情是p,q,r
减少到Assignment
而不是Expr COMMA Expr
. 这是有问题的,因为我需要运行一些只能使用Expr COMMA Expr
. 同样不可能删除该规则Assignment COMMA Assignment
,因为它对于某些减少至关重要。有什么方法可以将在这种情况下需要做的事情硬编码到 YACC 中吗?