我已经阅读了有关YACC的内容,我看过一些简单玩具程序的例子。但我从未见过一个实际的例子来演示如何构建一个令牌树等等,也没有一个很容易找到一个使用谷歌搜索的例子。有人可以提供一个如何使用YACC生成树的示例吗? C或C ++很好。
答案 0 :(得分:4)
简单的答案是,您只需在语义操作中构建树,使用以下规则:
expr: expr '+' expr { $0 = make_op_node(OP_ADD, $1, $3); }
这将由以下实现函数支持:
Node* make_op_node(enum OP opcode, Node* left, Node* right) {
Node* rv = malloc(sizeof *rv);
rv->opcode = opcode;
rv->left = left;
rv->right = right;
return rv;
}
Node
结构最有可能是有区别的union
,因为可能的操作码必须包含常量和标识符引用等内容。