java - 词法分析时如何存储token

标签 java c compiler-construction token lexical-analysis

我正在尝试设计一个编译器,并且正在进行词法分析。 假设我使用一个简单的“Hello World!”作为字符串文件编程并从中提取标记。 存储这些 token 的最佳方式是什么?在单个数据结构中,还是在两个或更多数据结构中,具体取决于 token 的类型?

最佳答案

实际上,您并不想存储所有的 token 。

您要做的是生成标记,一次一个,然后将它们交给解析器。在解析器检查 token 后,不再需要 token 。解析器可以从 token 中复制数据并使用它在 AST 中构建节点。可以说您可以使用单个全局 token ,尽管这被认为不是好的做法,并且如果您的语言有一个对 token 流进行操作的预处理器,这将不起作用。

也许你想问的问题是,AST 节点是如何长期存储的?答案是它们可以从堆中动态分配,并且它们通过 AST 中的父/子链接绑定(bind)在一起。这足以可靠地跟踪它们。

您可能会考虑根据类型索引 AST 节点。对于大多数编译任务,这是不必要的。对于某些工具,这很有用,因为它允许工具在非常大的树中快速找到各种节点类型。 YMMV.

关于java - 词法分析时如何存储token,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21427806/

相关文章:

c++ - Linux 中是否有等同于 _set_pure call handler() 的函数?

c - 在 8 位 UART 上发送 16 位值

c - 在 C 代码中使用 _wfopen 而不编写 BOM

c++ - C++ 中的数据成员偏移量

java - 使用二维数组和 JfreeChart 制作散点图

java - 为地址创建 hashCode 和 equals

java - 为什么我已经安装了 eclipse 的 e(fx)clipse 却无法导入 javafx

c - 为什么即使我们不在 C 程序中包含 stdio.h 也不会出现编译时错误?

gwt - ant gwt 编译器任务失败

java - 从静态配置文件创建 SSL WS URL