加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C/C++解析器如何工作?

发布时间:2020-12-16 10:54:45 所属栏目:百科 来源:网络整理
导读:我花了很多时间研究 PHP的解析器是如何工作的: 它将PHP代码转换为最终的c代码. 但是如何将c代码翻译成可执行文件? 顺便说一句,如何判断语言A是否可以从数学方面转换为语言B? 解决方法 这是一个非常伟大且非常深刻的问题,它涉及计算机科学的许多部分. 最终
我花了很多时间研究 PHP的解析器是如何工作的:

它将PHP代码转换为最终的c代码.

但是如何将c代码翻译成可执行文件?

顺便说一句,如何判断语言A是否可以从数学方面转换为语言B?

解决方法

这是一个非常伟大且非常深刻的问题,它涉及计算机科学的许多部分.

最终,计算机上的所有程序都通过在机器代码中向处理器发出指令来执行.没有一个“机器代码”,每个处理器都有自己的一组可以执行的指令.这些通常是低级操作,例如“将值加载到内存中”或“将两个值一起添加”.从理论上讲,每个程序都可以用机器代码编写,但这种情况很少见.机器代码本质上是一系列零和一系列由处理器以特定方式解码的,并且以这种方式直接构建任何复杂系统几乎是不可能的.

机器代码上方的一步是汇编语言,这是一种非常低级的宏语言语言,通常与机器代码具有一对一的映射.例如,您可能有“add”这样的命令,它们会添加,“sub”代表减法,或者“call”代表函数调用.最终,使用汇编程序将代码转换为机器代码,汇编程序是将程序集转换为机器代码的程序.在装配中构建大型复杂系统是可能的,但这很困难.

编译了许多编程语言,如C和C,这意味着一个称为编译器的特殊程序将源代码转换为汇编语言,然后可以直接转换为机器代码.通过这种方式,您可以编写高级工作的代码 – 它可以包含变量,函数,对象,模板,异常等 – 但可以直接在机器硬件上运行.其他编程语言被解释,这意味着一个称为解释器的特殊程序解析源代码,构建它的一些内存表示,然后间接地将它转换为汇编(通过使用程序来控制要执行的指令)或直接(通过根据需要生成装配).

已经广泛研究了如何从一种语言转换成另一种语言的理论.有很多挑战,从“您如何查看程序的源代码并了解您正在查看的内容?” “将这个程序转换成其他语言的最有效方法是什么?”前者涉及lexing,解析和语义分析;后者涉及优化和代码生成.

通常,任何语言的程序都可以转换为另一种语言的等效程序,但效率可能会有明显的下降.某些编程语言具有访问底层硬件的特殊功能,因此无法使用无法访问该硬件的语言编写,但这种情况很少发生.程序是否可以用另一种语言重写的一个典型度量是询问这两种语言是否是图灵完备的,这是一个数学术语,表示编程语言是否足够表达以编码特定类别的函数.

希望这可以帮助!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读