首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从YACC获取AST?

如何从YACC获取AST?
EN

Stack Overflow用户
提问于 2011-04-13 04:23:29
回答 4查看 4K关注 0票数 9

我知道如何让YACC生成一个AST,但是你怎么才能真正得到它呢?我的意思是,如何从YACC实际获取根节点的值?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-04-13 04:30:01

Yacc一次只返回一个节点,而且它总是您以前给yacc提供的东西,例如,您希望从减少的生产中返回的任何内容,或者您希望从终端符号返回的任何内容。(对不起,你说你知道,但有些人读了这篇文章可能不知道。)

因此,获取从根规则或顶层规则返回的任何内容,并以任何您喜欢的方式保存它(在附带的C缩减代码中)。

票数 8
EN

Stack Overflow用户

发布于 2011-04-13 04:36:15

Yacc提供的是一个解析树,这与AST不同。在遍历解析树的每个节点时,您需要自己构造AST (通过yacc)。

票数 2
EN

Stack Overflow用户

发布于 2013-08-20 23:35:47

它不像让解析器直接返回AST那样优雅,但我想出的最好的方法是有一个全局数据结构(例如向量或链表),如果需要线程安全,则使用threadsafe插入方法,并使用顶级yacc规则添加其结果(也称为。$$)添加到该数据结构。然后,您可以在其他函数中访问此结果。当然,如果您只打算输出单个AST,那么可能只需要有一个指向该AST的全局指针,而不是一个充满这些指针的数据结构。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5641199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档