我正试图设计一个编译器,并从事词法分析。说我拿一个简单的“你好世界!”作为字符串文件进行编程,并从中提取令牌。储存这些代币的最好方法是什么?在单个数据结构中,还是两个或多个数据结构(取决于令牌的类型)?
发布于 2014-01-29 11:52:07
您需要构造一个解析树,而不仅仅是一个标记列表。我建议你在开始编码之前继续阅读这个主题,
发布于 2014-01-29 11:55:47
实际上,你不想储存所有的代币,句号。
您要做的是一次生成一个令牌,并将它们交给解析器。解析器检查令牌之后,就不再需要令牌了。解析器可以从令牌复制数据,并使用它在AST中构建节点。您可以通过一个全局令牌来完成任务,尽管这并不是一个好的实践,而且如果您的语言有一个对令牌流进行操作的预处理器,那么它将无法工作。
也许您想问的问题是,AST节点是如何长期存储的?答案是可以从堆中动态地分配它们,并且它们通过AST中的父/子链接绑定在一起。这就足够可靠地追踪他们了。
您可以考虑根据类型对AST节点进行索引。对于大多数编译任务,这是不必要的。对于某些工具来说,这是很有用的,因为它允许工具在非常大的树中快速找到各种节点类型。YMMV
https://stackoverflow.com/questions/21427806
复制相似问题