我正在为自己的语言做一名翻译,这是我的业余爱好。目前,我的解释器只执行它看到的代码。我听说您应该让解析器从源代码中生成AST。所以我想知道,AST实际上是如何使事情比解析器看到的仅仅线性地执行代码更快的呢?
发布于 2014-08-16 21:03:49
因为那样的话,您就必须一直在进行解析。例如,如果有一个循环,就必须一次又一次地解析循环体中的命令。
此外,我认为它更干净,因为您将问题分解为两个不同的任务:处理语法,然后处理语义。
发布于 2014-08-19 07:13:18
并不是特别的"AST“让它更快。
它使用任何数据结构(AST、符号表、控制流图、三元组、p码、机器代码)来缓存源代码的分析以提取其预期的含义,并尽可能多地预先计算答案(“优化”)。实际上,任何部分编译代码的程序都应该比纯文本的解释器运行得更快。
有趣的权衡是:如果在执行停止之前执行的程序数量不是很大,那么执行文本实际上可能比执行任何编译器样式的分析要便宜。
考虑到当今机器的速度,一个人可以在100毫秒内草率地编译一个相当大的程序,这相当于人类的反应速度。早在80年代和90年代,各种版本的TurboPascal都因此而闻名。
https://stackoverflow.com/questions/25343945
复制相似问题