我正在编写一个编译器,主要是为了教育目的。我已经从输入中生成了标记,并希望生成AST。我有一个函数,它接受标记列表并递归生成ast。在大多数解析器中,您会有指向词法分析器的指针,因此每次在树中处理令牌时都会推进词法分析器。但是,当您遇到需要在树中生成更深节点的部分时,我不知道如何推进词法分析器,因为不能修改词法分析器列表的结构。
以Clojure程序为例,像这样
以Clojure程序为例,像这样
(+ 1 2 (+ 1 1))
。它会前进到+,然后递归并正确生成节点,但词法分析器在从生成节点返回后重新处理+ 1 1,因此最终得到的树是这样的:Root
---> +
---> 1
---> 2
-----> +
-----> 1
-----> 1
---> +
---> 1
---> 1