我知道如何让YACC生成一个AST,但是你怎么才能真正得到它呢?我的意思是,如何从YACC实际获取根节点的值?
发布于 2011-04-13 04:30:01
Yacc一次只返回一个节点,而且它总是您以前给yacc提供的东西,例如,您希望从减少的生产中返回的任何内容,或者您希望从终端符号返回的任何内容。(对不起,你说你知道,但有些人读了这篇文章可能不知道。)
因此,获取从根规则或顶层规则返回的任何内容,并以任何您喜欢的方式保存它(在附带的C缩减代码中)。
发布于 2011-04-13 04:36:15
Yacc提供的是一个解析树,这与AST不同。在遍历解析树的每个节点时,您需要自己构造AST (通过yacc)。
发布于 2013-08-20 23:35:47
它不像让解析器直接返回AST那样优雅,但我想出的最好的方法是有一个全局数据结构(例如向量或链表),如果需要线程安全,则使用threadsafe插入方法,并使用顶级yacc规则添加其结果(也称为。$$)添加到该数据结构。然后,您可以在其他函数中访问此结果。当然,如果您只打算输出单个AST,那么可能只需要有一个指向该AST的全局指针,而不是一个充满这些指针的数据结构。
https://stackoverflow.com/questions/5641199
复制相似问题