① 第一个C语言编译器是怎样编写的
任何一个功能
任何一个语言 都能实现
所以 关键的不在于语言 而在于 算法
C语言被人设计出来
设计了它的语法和规则
然后 根据这个规则,用B语言(Ken Thompson发明的B语言,而 B语言则源自BCPL语言。) 加汇编 编写了第一个C的编译器
没用多久
因为C语言更好用
于是 后续的C语言编译器 都是C语言自己写的了。
② 本科独立用C语言完成没有优化的C语言编译器属于什么水平
我觉得水平还是很高的,但意义恐怕不大。编译器技术是非常成熟的领域,而且由于应用场景的限
制实时,复杂的算法已经自动出局了,你可选的东西是有限的。编译器可能有很多实现的形
式,虚拟机/解释器/静态编译器 等,也有成熟的开源实现。作为本科生,而非专门研究该分支的学生,应该合理分配自己学习的时间,如果做这个编译器就干
掉了大半年,那计网和OS这些课程该咋办?
我知道很多人会认为没有做编译器优化特指中段优化,不考虑机器码上的优化比较划水。但编
译器优化是一个很复杂的东西:首先它和你用的IR表示有关而且是强烈耦合,SSA IR基本还
好,有开源代码和文献记载,你想要的都能在网上挖到但这怎么体现你的水平是吧。你
要考虑编译器的性能,尽管编译器的后端优化基本上可以纳入到某种PEabstract interpretation的
范畴中。
要不然你可以通过编写插件的方式白嫖例如visual studio code这类软
件的强大编辑功能,如果你写的不是c compiler,你也可以尽量把语法设计得很像c,这样你又能进一步
白嫖其强大的intellisense code,当然仍然有不少人或者应该说团队达到了这一步,到这里,应该卷死
了99.99%的同行应该毫无问题。
③ 如何用c写一个编译器
先学编译原理。
然后根据步骤,
1 处理预编译
2 词法分析
3 语法分析
4 语义分析
5 中间代码转换
6 二进制代码生成。
简单起见,不需要考虑优化。 初期可以不需要支持太多语法。
④ 第一个 C 语言编译器是怎样编写的
第一个C语言编译器
是先制定了简单的C语法后,用B语言写的
这个是C语言的前身。
当时B语言已经比较成熟 只不过 没有C强大
于是 发明了C语言
之所以叫C,其实也是因为在B基础上加一。
后续的C编译器 就都是用C写的了。
⑤ 用C++或C写个C的编译器(不求代码、说下过程)
有一门相关课程,叫“编译原理”,大部分的编译器主体思想都会讲到,你可以找相关书籍看看。牵涉的知识不是很多但对掌握程度要求较高,因为编译器的设计是一个很困难的工作,一个现代编译器的主要工作流程:源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 汇编程序 (assembler) → 目标代码 (object code) → 链接器 (Linker) → 可执行程序 (executables)其中每一步都有相关内容需要研究,中间的几步也是前后相关联,互助合作来工作的。
⑥ 如何用c++做一个编译器
1、编译器有很多种,每一种的使用方式不尽相同。常用编译器:
Visual C++
GNU C++
Inter C++
Sun C++
clang
2、一般编译过程:源文件→预处理→编译→汇编→链接→可执行文件
下面以GCC示例:
预处理(Pre-Processing):根据预处理命令(#开头)修改源文件
# gcc -o hello.i -E hello.c or # cpp -o hello.i hello.c
编译(Compiling):语法检查,并将源文件翻译成汇编文件
# gcc -o hello.s -S hello.i or # cc1 -o hello.s hello.i
汇编(Assembling):将汇编文件转换为目标文件(二进制)
# gcc -o hello.o -c hello.s or # as -o hello.o hello.s
链接(Linking):编址和符号链接,生成可执行文件
# gcc -o hello hello.o or # ld -o hello hello.o
⑦ 我想做一个C语言编译器……
没什么可不可取的,弄出来的话你的编程水平会有很大的提升,没弄出来也会,除非你一开始就放弃.
首先不建议你搞x86架构的,当然想挑战自己也行,因为x86架构的指令格式十分的操蛋.
建议写arm架构的编译器,因为指令结构简单,而且你学了之后做嵌入式方向很有用
工作量相当的大,给你说一下你要点的技能点吧
*数据结构(编程必修)
*编译原理(理论知识,没有他你没法下手)
*了解一种架构的汇编语言(不会的话你不知道怎么该让cpu去处理c的语句)
*了解你学的那种架构的汇编语言的指令格式(不翻译成机器指令cpu咋跑)
*了解一种可执行文件的格式(windows就搜PE文件的格式,linux就搜elf文件的格式,不把编译出来的东西组织成os能识别的格式咋运行)
*还有需要一定的英文阅读能力(因为有的资料没有中文)
还有一定要丢掉老掉牙的vc 6.0和tc,这俩家伙用来应付考试还行,用他来实际开发你就找虐吧.