Got*_*ses 4 c java compiler-construction token lexical-analysis
我正在尝试设计一个编译器,并且正在进行词汇分析.说我带一个简单的"Hello World!" 程序作为字符串文件并从中提取标记.存储这些令牌的最佳方法是什么?在单个数据结构中,还是两个或多个数据结构,具体取决于令牌的类型?
实际上,您不希望存储所有令牌,期间.
你想要做的是一次生成一个令牌,并将它们交给解析器.解析器检查令牌后,不再需要令牌.解析器可以从令牌复制数据并使用它在AST中构建节点.你可以说只用一个全局令牌,虽然这不是一个好的做法,如果你的语言有一个在令牌流上运行的预处理器,这将无法工作.
也许您打算问的问题是,AST节点如何长期存储?答案是它们可以从堆中动态分配,并且它们通过AST中的父/子链接连接在一起.这足以可靠地跟踪它们.
您可以考虑根据类型索引AST节点.对于大多数编译任务,这是不必要的.对于某些工具,这很有用,因为它允许工具快速查找非常大的树中的各种节点类型.因人而异.