使YACC输出AST(令牌树)

Spr*_*tty 12 syntax parsing yacc gppg

是否有可能使YACC(或者我是我的MPPG)输出抽象语法树(AST).

我正在阅读的所有内容都表明YACC很容易做到这一点,但是我很难知道你是如何知道何时在树中建立节点的时候.

Ale*_*yMK 7

扩展了郝的观点,从手册中,你想要做如下的事情:

假设您的抽象语法树具有node在树中创建对象的函数:

expr : expr '+' expr
  {  
     $$ = node( '+', $1, $3 );  
  }
Run Code Online (Sandbox Code Playgroud)

此代码转换为"使用加号解析表达式时,使用左右后代$1/ $3并将它们用作节点的参数.将输出保存到$$表达式的(返回值).

$$(来自手册):

要返回一个值,该操作通常会将伪变量"$$"设置为某个值.


hao*_*hao 5

您是否查看了手册(搜索"解析树"以找到该位置)?它建议将节点创建放在一个动作中,左右后代为1美元和3美元,或者它们可能是什么.在这种情况下,yacc将代表您向上移动树而不是手动执行.