Clojure 中的语法树生成

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

3
在Lisp/Clojure中,您直接使用Lisp数据结构编写抽象语法树的程序。此外,您可以对这些Lisp数据结构进行编程操作,从而生成宏。因此,总之,您已经拥有了您的AST。

我只是拿那个作为例子。我知道有人会这么说 :) 我的问题是如何推进词法分析器。 - Justin Thomas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接