gcc编译原理图解
❶ gcc是开源的吧代码是用什么写的汇编么
gcc官方网站 http://gcc.gnu.org/
关于gcc的信息可以自己找到,源代码也可以下到(不过官方下载有点费劲)。gcc也是用c语言写的。
❷ 想读懂gcc源代码
学学编译原理, 然后在看吧, 你要是没编译原理的基础, 你就看代码, 你更本就不能理解它的算法, 你也没办法理解它的思想
❸ 编译原理的数据结构
编译原理一直是计算机学习的必修课.
当然,由编译器的阶段使用的算法与支持这些阶段的数据结构之间的交互是非常强大的。编译器的编写者尽可能有效实施这些方法且不引起复杂性。理想的情况是:与程序大小成线性比例的时间内编译器,换言之就是,在0 ( n )时间内,n是程序大小的度量(通常是字符数)。本节将讲述一些主要的数据结构,它们是其操作部分阶段所需要的,并用来在阶段中交流信息。 临时文件(temporary file):计算机过去一直未能在编译器时将整个程序保留在存储器中。这一问题已经通过使用临时文件来保存翻译时中间步骤的结果或通过“匆忙地”编译(也就是只保留源程序早期部分的足够信息用以处理翻译)解决了。存储器的限制现在也只是一个小问题了,现在可以将整个编译单元放在存储器之中,特别是在可以分别编译的语言中时。但是偶尔还是会发现需要在某些运行步骤中生成中间文件。其中典型的是代码生成时需要反填(backpatch)地址。例如,当翻译如下的条件语句时 if x = 0 then ... else ... 在知道else部分代码的位置之前必须由文本跳到else部分:
CMP X,0 JNE NEXT ;;
location of NEXT not yet known < code for then-part > NEXT : < code for else-part >
通常,必须为NEXT的值留出一个空格,一旦知道该值后就会将该空格填上,利用临时文件可以很容易地做到这一点。
如果想利用上面的编译原理开发一套属于自己的编程语言,或者想在一个产品中嵌入编程语言,可以参考zengl开源网开发的zengl编程语言,该编程语言为国人使用C语言开发,里面包含两个部分,一个是编译器,一个是解释执行中间代码的虚拟机。编译器包含了词法扫描,语法分析,中间代码输出等,虚拟机则类似JAVA一样解释执行中间代码。作者将所有的版本都公布出来,好让读者可以由浅入深的做研究,并且为了证明该编程语言的实用性,还结合SDL游戏开发库开发了一款图形界面和命令行界面的21点扑克小游戏 。
zengl编程语言目前适用平台为windows和linux (最开始在Linux下使用gcc开发,后来移植到windows平台)
❹ 请问linux下,gcc编译程序的过程(从读取源文件到制作可执行程序中间所有过程,越详细越好)
gcc -S *.c 预处理+反汇编
❺ 关于C语言的编译过程,GCC与windows下的c编译器(如VS2010)的编译过程是否存在区别
一般的编译步骤是如此, 但也有一步到位的编译器
❻ C语言编译原理是什么
编译共分为四个阶段:预处理阶段、编译阶段、汇编阶段、链接阶段。
1、预处理阶段:
主要工作是将头文件插入到所写的代码中,生成扩展名为“.i”的文件替换原来的扩展名为“.c”的文件,但是原来的文件仍然保留,只是执行过程中的实际文件发生了改变。(这里所说的替换并不是指原来的文件被删除)
2、汇编阶段:
插入汇编语言程序,将代码翻译成汇编语言。编译器首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,编译器把代码翻译成汇编语言,同时将扩展名为“.i”的文件翻译成扩展名为“.s”的文件。
3、编译阶段:
将汇编语言翻译成机器语言指令,并将指令打包封存成可重定位目标程序的格式,将扩展名为“.s”的文件翻译成扩展名为“.o”的二进制文件。
4、链接阶段:
在示例代码中,改代码文件调用了标准库中printf函数。而printf函数的实际存储位置是一个单独编译的目标文件(编译的结果也是扩展名为“.o”的文件),所以此时主函数调用的时候,需要将该文件(即printf函数所在的编译文件)与hello world文件整合到一起,此时链接器就可以大显神通了,将两个文件合并后生成一个可执行目标文件。
❼ gcc中C语言的词法分析是怎么做的
已知所有关键字,剩下的只是语句和括号堆栈匹配而已。
大体原理可以参考《编译原理》的“有限状态机”。
❽ GUN GCC 标准的编译器编译原理疑问
for(i=0,i<6,i++)括号里的三句话应该用分号分开,你的好像是误用了逗号,改过来就行了。
for(i=0;i<6;i++)
❾ 编译原理 中间代码生成 的程序求一个
在网上找了半天,抱歉只找到了GCC的源码。
源码查看(GCC):https://gcc.gnu.org/svn/gcc/trunk/
包括完整的词法分析、语法分析、语义分析、中间语言生成、优化、目标代码生成等过程。
另外,楼主是想写一个这样的程序吗?如果是的话可以看一下这个,虽然不是JAVA,但是可能会对你有帮助:http://m.blog.csdn.net/blog/USBdrivers/8554689
顺便推荐一个源码下载网站,如果楼主想要源码,不妨先在这上面搜搜:http://sourceforge.net/
我也是写程序的,祝你早日摸到门道,加油哦!
❿ 怎样阅读 gcc 源代码
1.先学会gcc对c语言的扩展
2.对照gcc internals(网上已有中文版本)查看源代码
3.最好下载“现代编译原理:C语言描述.pdf”,比如计算必经点公式、活跃分析、着色图的寄存器分配....不对照课本知识,你就是看不懂。