让我们假设我有生产:
Expression // These are my semantic actions
: Expression PLUS_TOKEN Expression ( create_node(Expression, Expression) )
| SimpleExpression ( SimpleExpression ) (* Returns a node of type expression *)
请注意,在我的顶级产品的语义操作中,我无法分辨哪个表达式是哪个。如何引用左右表达式?如果在同一个产品中出现三个或多个"Expression",该怎么办?
参考:http://www.smlnj.org/doc/ML-Yacc/mlyacc002.html
根据ML Yacc文件,我们用以下符号表示非终端:
{non-terminal}{n+1}
使得n是符号左边的非终端的出现次数。如果n等于1,那么我们可以使用非终端名称。
因此,上面的例子看起来是这样的:
Expression // These are my semantic actions
: Expression PLUS_TOKEN Expression ( create_node(Expression1, Expression2) )
| SimpleExpression ( SimpleExpression ) (* Returns a node of type expression *)