似乎所有脚本语言如PHP,Perl都没有构建任何语法树,而是直接解释它(没有单独的语法解析和代码生成):
https://svn.php.net/repository/php/php-src/trunk/Zend/zend_language_parser.y
是否有任何流行的解释语言在解析时首先生成语法树?
答案 0 :(得分:1)
您对Perl的信息不正确:
在编译时,解释器将Perl代码解析为语法树。在运行时,它通过遍历树来执行程序。
(来源:perl维基百科页面。)
您可以在Core modules文档中找到有关可用于显示该语法树的模块的信息。
答案 1 :(得分:0)
几乎所有人。从令牌流中解释 hard (并且甚至没有令牌化器的解释是更难),因为您无论如何都需要进行大量的解析工作(仅此时) ad hoc,没有解析器生成器的帮助,将解析器逻辑与解释器逻辑混合)。对于初学者来说,如果你在没有构建中间数据结构(AST)的情况下尝试它,那么获得运算符优先权似乎需要潜在的无限前瞻/后退。
一个例外可能是shell脚本语言,因为它们的死语言很简单(大多数只是外部程序的调用,无论如何都对字符串进行操作的变量赋值,以及简单的循环结构),尽管我不打赌它。编辑:不,bash有一个yacc grammar,zsh似乎也有一个完整的parser。
这些语言中的许多语言都不会停留在AST,而是继续将其编译为字节码(即使它们不保存以供以后默认运行 - 例如PHP)并解释 >