找回密码
 FreeOZ用户注册
12
返回列表 发新帖回复
楼主: kingsking
打印 上一主题 下一主题

[其他] 关于计算机编译原理。。。:)-

[复制链接]
31#
 楼主| 发表于 4-3-2014 22:54:54 | 只看该作者
顶,测试一下
回复  

使用道具 举报

32#
发表于 5-3-2014 09:20:51 | 只看该作者
很多人都推荐龙书,但是我觉得龙书真的是有点晦涩难懂,我推荐一个小众书,我之前看了觉得不错,至少是一步步带着你写一个简单的解释程序,龙书太抽象。《编程语言实现模式》,网上有pdf下载。
回复  

使用道具 举报

33#
发表于 5-3-2014 09:42:31 | 只看该作者
用c#写了个c#的人飘过~~~
回复  

使用道具 举报

34#
发表于 4-4-2014 16:53:32 | 只看该作者

1、所有的语法和词法都支持吗?
——你需要了解一下《形式语言与自动机》这门课程,人们说话的语言是0型文法,上下文有关文法是1型文法,上下文无关文法是2型文法。编译器能识别2型以上文法。

2、如何转成机器码?要硬件厂商的帮助吗?
——先转换成汇编语言(C、Pascal等)或中间语言(Java),到此90%的工作已经完成(这些工作与具体硬件无关,所谓的跨平台),剩下就是汇编器的事情了(把汇编语言或中间语言转换为不同的机器码),汇编器也不需要硬件厂商的特别支持,Intel每发布一款CPU都会向相关软件厂商提供每条指令(机器码)的具体格式。

3、现在经典的成熟的架构和模式是什么样的??
——编译器涉及操作系统和硬件2个抽象层次,市场上所有编译器的实现原理都是自动机理论,也就是说无论Java、Visual C++还是Delphi其本质上都是一样的。你看到不同编译器自带的类库千差万别,那是厂商把应用层的算法和数据结构捆绑销售给你,这些是应用层次的差别(你需要了解一下软件的抽象层次),跟编译原理没有任何关系。

评分

参与人数 1威望 +50 收起 理由
kingsking + 50 谢谢分享!

查看全部评分

回复  

使用道具 举报

35#
发表于 4-4-2014 17:39:02 | 只看该作者
不同种类的CPU有不同的指令集,通俗一点说,你可以理解成硬件指令,所谓的机器码就是用来直接执行这些指令的。如同楼上所说,从汇编语言到机器码是最后一步,其实没什么花头,就像是照着硬件厂商的说明书重新描述一遍而已。

至于前半部分,怎么从高级语言通过文法分析转换成汇编格式,这个就有点理论了,事实上,这玩意几十年来也都没有什么突破,因为硬件都被少数几家厂商垄断着,操作系统内核也都没有什么太大变化,所以编译技术也很难有太大发展。近年来在虚拟机和解释型语言上倒是有一些发展,不过虚拟机和解释器还是摆脱不了前面那些东西。

lz如果真的喜欢研究一些理论,建议先从计算机组成原理和操作系统看起,然后再看编译原理,因为没有操作系统的理论基础,看编译原理基本等同于看天书。

评分

参与人数 1威望 +50 收起 理由
kingsking + 50 谢谢分享!

查看全部评分

回复  

使用道具 举报

36#
发表于 27-5-2014 20:09:25 | 只看该作者
本人教过几届的编译原理,数据结构,离散数学。没想到这里还有这么多人感兴趣。编译原理,数据结构,离散数学,操作系统,体系结构,是CS的重要课程。通过自己多年的嵌入式系统工作经验,证实了它们的重要性。

评分

参与人数 2威望 +70 收起 理由
kingsking + 50 谢谢分享!
cais + 20 我很赞同!

查看全部评分

回复  

使用道具 举报

您需要登录后才可以回帖 登录 | FreeOZ用户注册

本版积分规则

小黑屋|手机版|Archiver|FreeOZ论坛

GMT+11, 23-12-2024 00:29 , Processed in 0.035068 second(s), 24 queries , Gzip On, Redis On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表