中国人目前有自行开发的一种c语言的编译器吗?大家进来讨论讨论!
我的答案是有的,我想中国人没那么笨的,如果没有的话,我来写一个,目前我打算用c语言先写一个pascal的编译器,技术就是编译原理上面的那些技术,也许不是很先进,请大家不要笑我,不要认为我是在开玩笑,说大话,尽管我知道我会遇上很多难题,但是一个编译器我是做的出的,我说完了,请大家发表发表自己的意见,好吗,禁止灌水!!! 问题点数:100、回复次数:34Top
1 楼zalyer(小照)回复于 2003-02-04 12:21:16 得分 10
支持你,有什么可以一起商量.Top
2 楼hddhddhdd(还刀的)回复于 2003-02-04 12:24:28 得分 1
你的汇编怎么样?
只用C写的编译器效率问题?
当然,绝对支持你!Top
3 楼ttoth(borlander)回复于 2003-02-04 12:31:00 得分 0
to:hddhddhdd(还刀的)
目前只能够用c来写,用汇编我还没有那个功底阿,用它些编译器,是绝对力不从心的,当然用c写编译器,生成的目标代码当然是与pascal等阶的c代码,然后在通过c编译器编译器,效率当然是慢的楼!!!不过感谢大家的支持!!Top
4 楼ttoth(borlander)回复于 2003-02-04 12:50:26 得分 0
怎么都没人来讨论啊,难道都是菜鸟吗Top
5 楼applebomb(袋装苹果)回复于 2003-02-04 12:51:43 得分 30
什么是EXE?不就是一段二进制可执行代码吗?
用C、C#或PASCAL或ASM进行文件操作的话,所创建的文件是没有区别的。区别只在于编译速度及内存要求等方面上,不同的编译器、不同的语言会存在一些差距。
“但是一个编译器我是做的出的”???
但是完整的编译器,包括DEBUG、语法分析、编译IDE界面等等这些方面不是一个人就可以完成的。需要有各方面的专家参与,才可以开发出一个优秀的完全国产编译器出来。
要么不做,做就要做更好,因为没有最好,只有更好。
BTW:
这款编译器应该考虑与“龙芯”CPU的特殊指令联系起来(每款CPU都应该有它的特殊指令集的),让国产的马儿拉上国产的车:),扯远了,就此打住,走也。Top
6 楼oustar(欧文)回复于 2003-02-04 13:01:57 得分 5
练手还是有实用目的?Top
7 楼ttoth(borlander)回复于 2003-02-04 13:17:54 得分 0
applebomb(applebomb) :我做的就是一个编译器,ide只是写图形界面的冬冬,没什么难度的,什么语法分析我是弄得出的,那种debug有可能要点时间,至于什么龙芯的指令系统我是不知道的,我不知道中科院的那些专家看不看得起我这个小弟,愿意把它的指令系统给我看看,我目前只是写一个c编译pascal的编译器,目标代码是与pascal等阶的c代码,然后用c编译器编译,就这样,效率当然是慢的楼!!Top
8 楼rtdb(东临碣石)回复于 2003-02-04 13:46:57 得分 5
也不是什么太难的事。
当年我们上编译原理时,就是讲如何写一个PASCAL编译器。
我还记得当时没讲完, 但还是有同学在假期完成了。
祝楼主成功!
Top
9 楼weizhiyong(勇哥)回复于 2003-02-04 13:52:05 得分 5
我觉得太难.Top
10 楼ttoth(borlander)回复于 2003-02-04 13:52:36 得分 0
谢谢rtdb(东临碣石) 支持,毕竟还是有共同语言的人的Top
11 楼applebomb(袋装苹果)回复于 2003-02-04 13:56:22 得分 0
你有了初略计划了吗?例如现在一般的高级语言编译器都是走的
高级语言->汇编语言->可执行代码
的编译方案,你打算采用什么作为汇编中间件呢?是不是用C写的一个PASCAL语言编译器,你的程序然后将它翻译为汇编代码,然后调用TASM或MASM来编译呢?还有,这样的二阶段的编译方式在汇编代码生成部分还有一个难度很高的汇编代码优化部分,你打算如何来完成呢?
写这一通我只想说说我认为实际设计时会遇到的困难,免得设计不周对实际编写时造成不必要的麻烦。如果时间够长的话,这样的编译器终究会做出来的,但是也是时间的问题,个人的开发速度就远远落后于国外MICROSOFT BORLAND这些大型企业了!
但是就个人练手的话倒是可以,不过做这样的东东练手的话花费的时间实在太……
如果你有比较纤细的计划,不妨说说让大家听来Top
12 楼ttoth(borlander)回复于 2003-02-04 14:06:17 得分 0
听好了,生成与pascal等阶的c代码,不是汇编代码,我还没有那个功底啊,用c语言写一个编译器,然后通过c语言的编译器把与pascal等阶的c代码翻译成机器代码,就这样,另外我优化的只是c的目标代码,用dag图的,就这样Top
13 楼applebomb(袋装苹果)回复于 2003-02-04 14:09:36 得分 0
在编译原理上讲的语法分析和词法分析只是做编译器用到的很小一部分。并不等同与做一个编译器。
理论与实际有时候是有很大差别的。
例如汇编代码优化就设计到速度优化、大小优化、特殊指令集优化(例如MMX优化)等等,你会考虑吗?如果做一个简陋的编译器,这些倒是不需要考虑的。还有在开发阶段使用者的参与测试也是很重要的工作。
先把需要的资料收集好、可能遇到的问题考虑好、完整计划设计好,再进行具体的编码吧,以免浪费时间了。
如果你真下决心去做的话,祝顺利!Top
14 楼ttoth(borlander)回复于 2003-02-04 14:11:40 得分 0
我的编译器生成方案是
pascal(高级语言)--->c(高级语言)--->汇编语言(低级语言)
Top
15 楼applebomb(袋装苹果)回复于 2003-02-04 14:14:12 得分 0
哦,你说的那种不叫编译器、只能叫,只能叫……我也不知道该叫什么,就算个编程语言代码转换工具吧。Top
16 楼Frank001(Frank)回复于 2003-02-04 14:21:10 得分 5
哦,目标代码是与pascal等阶的c代码。
同意楼上观点。
不过还是绝对支持楼主!Top
17 楼ttoth(borlander)回复于 2003-02-04 14:22:43 得分 0
难道只有用汇编写的编译器才能称得上是编译器吗,汇编代码也是经过汇编编程序生成机器指令码的啊,里面也有相应的分析程序的,但是汇编语言编译器使用什么语言写的啊,难道说就是芯片的指令集吗?有可能的,但是我不太清楚。我那种是编译器的,因为里面有词法分析,语法分析,目标代码生成,代码优化等一系列编译器的处理过程的,但是它的效率是慢的Top
18 楼applebomb(袋装苹果)回复于 2003-02-04 14:37:26 得分 0
如果要找一个比较简单的方案的话,就是前面所说的二阶编译方式了。如果你不想经过汇编这一阶段而直接生成可执行文件的话,近乎不可能。真正自己做个编译器,其核心部分例如句子、词法、语法及优化这些都应该由自己的代码完成。否则顶多算得上个编译的SHELL,不是编译器的。
“汇编语言编译器使用什么语言写的啊”这个嘛,如果你愿意,用EDIT或ULTRAEDIT也可以啊:),找本汇编->可执行代码参照手册,09 ff ff这样写下去就是了。Top
19 楼ttoth(borlander)回复于 2003-02-04 14:57:50 得分 0
你说,什么是编译器,我看你是对编译器的理解有问题阿,有空我们聊聊
qq:54570383Top
20 楼applebomb(袋装苹果)回复于 2003-02-04 15:06:45 得分 0
编译器与它编译出来的软件一样,也是一段可执行代码,所以有我说的上次的第二段话。
Top
21 楼ttoth(borlander)回复于 2003-02-04 15:10:23 得分 0
要生成可执行代码的话,要牵涉到底层的硬件机制阿,那个冬冬是很可怕的阿
,不过可以参考相应的硬件芯片参考手册,找到里面相应的指令以及与它相对应机器码,办法是有的,不过难Top
22 楼ttoth(borlander)回复于 2003-02-04 15:14:14 得分 0
记得,你说要优化什么汇编代码,我记得编译原理上面的优化算法好像只优化中间代码阿,相对应的就是我的c代码(与pascal等阶的),好像没有什么人能够优化汇编代码吧,^_^!!Top
23 楼applebomb(袋装苹果)回复于 2003-02-04 15:16:59 得分 0
怕什么?编译器主要是完成翻译,而不是去告诉人如何去写。你只需要知道如何翻译就是了。
Win32Dasm是一款WINDOWS反汇编工具,你用用它就知道了,它可以把汇编和相应的可执行代码全部列出来。而且你还可以发现,WINDOWS API调用的完成是通过JUM到一个固定的内存位置完成的。Top
24 楼ttoth(borlander)回复于 2003-02-04 15:19:12 得分 0
Win32Dasm哪里有的下阿Top
25 楼applebomb(袋装苹果)回复于 2003-02-04 15:21:07 得分 0
汇编代码优化怎么没有,字符串重叠、MMX指令优化、跳转优化。MMX指令优化在《云风工作室》里都有这样的翻译文章。通过调整指令顺序达到CPU指令流水线的高效率工作。Top
26 楼applebomb(袋装苹果)回复于 2003-02-04 15:22:42 得分 0
用搜索引擎找找吧,查"w32dasm"应该有很多的,有汉化版的。你到一些汉化站点里找找看。Top
27 楼applebomb(袋装苹果)回复于 2003-02-04 15:25:51 得分 0
"WINDOWS API调用的完成是通过JUM到一个固定的内存位置完成的"
应该是
"WINDOWS API调用的完成是通过JMP到一个固定的内存位置完成的"
前面敲错了Top
28 楼sjd163(sjd163)回复于 2003-02-04 15:28:11 得分 5
支持。
估计困难很多。
希望那里可以用中文作为变量名。
Top
29 楼ttoth(borlander)回复于 2003-02-04 15:43:53 得分 0
中文作为变量名,词法分析程序岂不是烦的吓死人拉,要识别汉子的码,那样又烦又慢,编译器运行速度一定很慢的阿,恐怕不行阿Top
30 楼Jinhao(辣子鸡丁·GAME就这样OVER了)回复于 2003-02-04 15:54:40 得分 19
支持+学习!Top
31 楼applebomb(袋装苹果)回复于 2003-02-04 16:27:42 得分 0
中文作为变量名应该还好判断些啦,只要读取的内码>127就行了。Top
32 楼zhaobong(赵bong)回复于 2003-02-04 16:35:49 得分 5
能够常常在这儿帖出你的进度吗?Top
33 楼dochang(佣兵)回复于 2003-02-04 17:28:31 得分 5
绝对支持!!也同意楼上的,希望楼主时常能把开发进度帖出来,也写一些开发心得什么的,我也想学一学Top
34 楼XueBoy163(菜刀之恋)回复于 2003-02-04 18:04:00 得分 5
大家忙了说链接器。Top




