西西河

主题:【原创】语言编译器等请教 -- 中国农民

共:💬62 🌺30
全看树展主题 · 分页首页 上页
/ 5
下页 末页
家园 这又让俺想起泰让兄给俺留的作业: 逆波兰算法

这又让俺想起泰让兄给俺留的作业: 逆波兰算法。

可惜这个算法趣味性不强,至今没有想写的冲动。

家园 逆波兰表达式

Reverse Polish notation,你不提,我都忘记了这个名字了

家园 那个中间语言在转换成汇编前还需要作语义处理么?还是

已经close enough,可以直接翻译过去了?

这是老兄一个人完成的?花了多少时间?

谢谢:作者意外获得【西西河通宝】一枚

鲜花已经成功送出。

此次送花为【有效送花赞扬,涨乐善、声望】

家园 不需要再做语义处理了

那个中间语言基本上可以一一对应的翻译成汇编了。

最费时间的是那个语义分析部分,原来准备搞得“学术”一点,算法要漂亮一点,为这花了不少时间。后来发现还是堆栈最简单实用,最后还是用堆栈,这点一定下来,写得就很快了。其他的,都是比较公式化的了。

家园 俺也整过这玩意

公司的任务是做一个c编译器,要跟keil的c完全兼容。做完这玩意后确实觉得计算机在俺面前没有任何神秘性可言了。

家园 俺当时就是学C语言、PASCAL语言。

后来感觉PASCAL语言没用到。但是C语言应用很广,我记得我们学C语言编程,就可以演示一个字母从键盘怎样输入一直到由显示器输出的整个过程是怎样的。牵扯到汇编语言的知识也比较多。做完了这个,就会明白显示器上显示的字符颜色大小等等是怎样来的了。

我们用C语言写的高级语言程序,一般由C语言编译程序,编译、连接最后成可执行文件。

编译过程都是点一下编译就完成了,还真没注意这编译程序是怎么一回事。

家园 十分感谢各位

非计算机出身的能学会用现成的编译器吗?

家园 这个不用学,每个高级语言程序都有相应的运行环境,就像我们

用普通应用软件一样,可以用这个软件随意运行调试您自己编写的高级语言程序。对于编译,您只要点菜单里的一个编译命令就可以完成编译过程。很多年前是这样的。

家园 是啊

学完了计算机体系结构,汇编,编译后,是没有什么神秘的东西了

家园 老农是想自己试着弄一个语言出来
家园 真有兴趣的话

可以从lex和yacc以及Flex之类的工具入手。

家园 这个要看你怎么“使用”了

如果对编译结果有严格要求,比如说要做特定的优化、多种编程语言混合、甚至是要做交叉编译,具备一定的计算机知识会有很大帮助。

另外,如果你的工作涉及到检查编译过程和结果,那你可能还得懂一些编程,起码要学会报告编译错误。现在的C++程序,如果编译出错了,编译器可能会给你弄出几十屏错误信息来。

家园 噢,原来这样啊。我想可能会很麻烦吧,你要搜集很多这方面的

知识。不同的高级语言程序编译也是不同的,要选哪种语言,再有人家已经有了完善的编译程序,你又要如何改进。

我在想,如果你想研究一下原理,不如选个语言程序,反汇编看一下程序中编译这段的源程序,可能会明白一些原理。

家园 这可不算个好主意

不如选个语言程序,反汇编看一下程序中编译这段的源程序,可能会明白一些原理。

现在的编译器,大部分的代码应该是在优化上。如果对那些能编译C/C++的编译器进行反汇编,出来的汇编代码我估计得超过上千兆。要从这里找出有关编译的部分,大海捞针。对于要学习编译原理,C和C++的语言定义也太复杂了。

其实,如果真要这么做,有现成的源代码:GCC。不过,据说GCC的源代码也不容易读懂。

家园 俺那时连C++都还没出现呢,嘿嘿,俺就估计这法子该被淘汰了

俺学的知识已经陈旧了。不过当时我们想了解一段程序的时候,我们会选择这样做的。

计算机科学技术的知识总是更新很快,让人疲于跟在后面不断学习。俺已经落伍了。

全看树展主题 · 分页首页 上页
/ 5
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河