首页 > 解决方案 > 当运算符和操作数不在同一个生产中时,如何创建抽象语法树节点?

问题描述

因此,在所有 AST 示例的情况下,都有以下类型的产生式:

    expr -> expr "+" expr;
    expr -> expr "-" expr;

And in this case it's easy to create a new node like this:

    expr: expr "+" expr {newNode("+",$1,$3);}
    ;

现在我的语法有以下实现:

    assignment:IDENTIFIER '=' expression ';' 
    ;
    expression:term expression_1
    ;
    expression_1: '+' term expression_1 |
    '-' term expression_1 |
    ;
    term: factor term_1 
    ;
    term_1: '*' factor term_1 |
    '/' factor term_1 |
    ;
    factor: IDENTIFIER |
    '(' expression ')' | 
    NUM | FNUM | STRING
    ;

在这里,在创建一个新节点时,我如何获取第一个操作数(在以前的生产中),并将其提供给一个 newNode 函数,该函数将具有运算符和第二个操作数(这两个都在不同的生产中)?

标签: ccompiler-constructionabstract-syntax-tree

解决方案


推荐阅读