我正在为自己的语言做一个翻译,作为一个爱好项目。目前我的解释器只是在它看到它时执行代码。我听说你应该让解析器从源代码中生成一个AST。所以我想知道,如果解析器看到它,AST实际上如何让事情比仅仅线性执行代码更快?
答案 0 :(得分:3)
因为那时你必须一直进行解析。例如,如果你有一个循环,你必须一遍又一遍地解析循环体中的命令。
另外,我认为它更清晰,因为你在两个不同的任务中解决问题:处理语法,然后处理语义。
答案 1 :(得分:2)
不是特别是“AST”使它更快。
它正在使用任何数据结构(AST,符号表,控制流图,三元组,p代码,机器代码)来缓存源代码的分析以提取其预期含义,以及尽可能多地预先计算答案( “优化”),尽可能。实际上,任何部分编译代码的程序都应该生成比纯文本解释器运行得更快的程序。
有趣的权衡:如果在执行停止之前执行的程序数量不是很大,那么执行文本实际上可能比执行任何编译器式分析更便宜。
鉴于目前机器的速度,人们可以在100毫秒内编写一个相当大的程序,这与人类可以做出的反应一样快。早在80年代和90年代,各种版本的TurboPascal都因此而闻名。