如何编写构建令牌等的YACC语法?

时间:2016-02-07 04:45:01

标签: c grammar bison yacc

我已经阅读了有关YACC的内容,我看过一些简单玩具程序的例子。但我从未见过一个实际的例子来演示如何构建一个令牌树等等,也没有一个很容易找到一个使用谷歌搜索的例子。有人可以提供一个如何使用YACC生成树的示例吗? C或C ++很好。

1 个答案:

答案 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,因为可能的操作码必须包含常量和标识符引用等内容。