编译原理

23 views
Skip to first unread message

STL-BOOST

unread,
Jul 1, 2008, 1:41:12 AM7/1/08
to TopLanguage
最近在编译原理,就是传说中的龙书。发现好难哪,感觉云里雾里的。那些状态转换、LR什么的,搞不明白。有没有一些入门的教材呀?

pongba

unread,
Jul 1, 2008, 1:47:10 AM7/1/08
to pon...@googlegroups.com


2008/7/1 STL-BOOST <wart...@gmail.com>:

 最近在编译原理,就是传说中的龙书。发现好难哪,感觉云里雾里的。那些状态转换、LR什么的,搞不明白。有没有一些入门的教材呀?
 
1.  编译原理本就不是好啃的东东。所以感到难很自然。
2. 感到难是必然的,这就意味着需要更加深入的啃,如果发现问题就要细细琢磨,琢磨问题是什么分析需要什么东西才能解决你的问题。譬如一段话看不懂,最大的可能性是里面的某个概念不理解,那么怎样才能理解这个概念,是不是理解它还需要其他铺垫的概念,反省目前你所理解了的部分,看看到底卡在什么地方,此为分析。反复阅读和揣摩又是一个办法,书读百遍其义自现这话是有道理的,因为在阅读一两遍的时候你的大脑其实只做了一个表浅的加工处理。另一个办法就是上网查找资料,做功课。按照我以往的经验,根本用不着这后一条,多读几遍,慢慢咀嚼揣摩,总会弄懂的。

一句话,啃不动,是因为你不够使劲。

--
刘未鹏(pongba)|C++的罗浮宫
http://blog.csdn.net/pongba
TopLanguage
http://groups.google.com/group/pongba

Sili

unread,
Jul 1, 2008, 2:35:08 AM7/1/08
to TopLanguage
我也是自学的编译原理,看的这本http://www.douban.com/subject/1088057/
推荐E文版.有些概念的确是要反复理解.

On Jul 1, 1:47 pm, pongba <pon...@gmail.com> wrote:
> 2008/7/1 STL-BOOST <wartal...@gmail.com>:
>
> > 最近在编译原理,就是传说中的龙书。发现好难哪,感觉云里雾里的。那些状态转换、LR什么的,搞不明白。有没有一些入门的教材呀?
>
> 1. 编译原理本就不是好啃的东东。所以感到难很自然。
> 2. 感到难是必然的,这就意味着需要更加深入的啃,如果发现问题就要细细琢磨,琢磨*问题是什么*,*分析需要什么东西才能解决你的问题*

SpitFire

unread,
Jul 1, 2008, 2:57:12 AM7/1/08
to pon...@googlegroups.com
就如pongba所说,这东西学起来就是费力,特别是一些理论如形式语言与自动机,如果不关心理论,弄本compile by c挺好的

2008/7/1 Sili <uni...@gmail.com>:

--
SpitFire

lbaby

unread,
Jul 1, 2008, 3:13:54 AM7/1/08
to TopLanguage
呵呵,可以先看看自动机的书

fxc...@gmail.com

unread,
Jul 1, 2008, 3:14:09 AM7/1/08
to TopLanguage
什么是compile by c?

On Jul 1, 2:57 pm, SpitFire <spitfi...@gmail.com> wrote:
> 就如pongba所说,这东西学起来就是费力,特别是一些理论如形式语言与自动机,如果不关心理论,弄本compile by c挺好的
>
> 2008/7/1 Sili <unix...@gmail.com>:
>
>
>
>
>
> > 我也是自学的编译原理,看的这本http://www.douban.com/subject/1088057/
> > 推荐E文版.有些概念的确是要反复理解.
>
> > On Jul 1, 1:47 pm, pongba <pon...@gmail.com> wrote:
> >> 2008/7/1 STL-BOOST <wartal...@gmail.com>:
>
> >> > 最近在编译原理,就是传说中的龙书。发现好难哪,感觉云里雾里的。那些状态转换、LR什么的,搞不明白。有没有一些入门的教材呀?
>
> >> 1. 编译原理本就不是好啃的东东。所以感到难很自然。
> >> 2. 感到难是必然的,这就意味着需要更加深入的啃,如果发现问题就要细细琢磨,琢磨*问题是什么*,*分析需要什么东西才能解决你的问题*
> >> 。譬如一段话看不懂,最大的可能性是里面的某个概念不理解,那么怎样才能理解这个概念,是不是理解它还需要其他铺垫的概念,反省目前你所理解了的部分,看看到底-卡在什么地方,此为分析。反复阅读和揣摩又是一个办法,书读百遍其义自现这话是有道理的,因为在阅读一两遍的时候你的大脑其实只做了一个表浅的加工处理。另一个-办法就是上网查找资料,做功课。按照我以往的经验,根本用不着这后一条,多读几遍,慢慢咀嚼揣摩,总会弄懂的。
>
> >> 一句话,啃不动,是因为你不够使劲。
>
> >> --
> >> 刘未鹏(pongba)|C++的罗浮宫http://blog.csdn.net/pongba
> >> TopLanguagehttp://groups.google.com/group/pongba
>
> --
> SpitFire- Hide quoted text -
>
> - Show quoted text -

SpitFire

unread,
Jul 1, 2008, 3:28:55 AM7/1/08
to pon...@googlegroups.com
2008/7/1 fxc...@gmail.com <fxc...@gmail.com>:
> 什么是compile by c?

编译器构造:C语言描述
CRAFTING A COMPILER WITH C

http://www.china-pub.com/26101

比较实用点
--
SpitFire

钙瓷

unread,
Jul 1, 2008, 4:52:08 AM7/1/08
to pon...@googlegroups.com
同意pongba的说法,多读几遍,读累了,就休息一下,然后再看,是可以看懂的~~~

gorillaz

unread,
Jul 1, 2008, 4:56:48 AM7/1/08
to TopLanguage
龙书的确太学术了,谁染权威,但是不做这方面的研究的方面的话就不用看了,就像TAOCP虽然牛逼,但是你只是一般用的话算法导论就够全了,
上面说的编译器构造:c语言描述,的确不错(虽然我没看完。。。。),和龙书并称为虎书,这书还有JAVA版和ML版,你要是对C没兴趣的话可以看
JAVA版的,ML是什么我也不清楚,人邮有出影印版和翻译版的。
http://www.cs.princeton.edu/~appel/modern/ 这是这本书的网页


http://www.myoops.org/cocw/mit/Electrical-Engineering-and-Computer-Science/6-035Fall-2005/CourseHome/index.htm
这是mit 计算机语言工程(相当于国内编译原理这门课)的主页,上面有很多资料
On 7月1日, 下午1时41分, STL-BOOST <wartal...@gmail.com> wrote:

莫华枫

unread,
Jul 1, 2008, 5:01:18 AM7/1/08
to pon...@googlegroups.com
过去,编译原理让我一头雾水。前一段工作需要,做一个公式的分析和解析模块。为了满足C#,找来了Gold Parser。写了一通bnf,也构造了parse tree和ast。渐渐地,开始理解了其中一些奥妙。
或许亲手实践一下,无论多么简单,也能够提升理解,获得一些感性的认识,有助于理论的学习。
另外,龙书还是比较实践的书,有具体的案例。相对容易理解些。

2008/7/1 钙瓷 <kid...@gmail.com>:

同意pongba的说法,多读几遍,读累了,就休息一下,然后再看,是可以看懂的~~~






--
反者道之动,弱者道之用
m...@seaskysh.com
longsh...@gmail.com
http://blog.csdn.net/longshanks/

gorillaz

unread,
Jul 1, 2008, 5:08:21 AM7/1/08
to TopLanguage
龙书实在是吃不消啊,不搞这方面研究或者是做编译器的,看就不必了,买本当工具书还可以。

On 7月1日, 下午5时01分, "莫华枫" <longshank...@gmail.com> wrote:
> 过去,编译原理让我一头雾水。前一段工作需要,做一个公式的分析和解析模块。为了满足C#,找来了Gold Parser。写了一通bnf,也构造了parse
> tree和ast。渐渐地,开始理解了其中一些奥妙。
> 或许亲手实践一下,无论多么简单,也能够提升理解,获得一些感性的认识,有助于理论的学习。
> 另外,龙书还是比较实践的书,有具体的案例。相对容易理解些。
>
> 2008/7/1 钙瓷 <kid....@gmail.com>:
>
> > 同意pongba的说法,多读几遍,读累了,就休息一下,然后再看,是可以看懂的~~~
>
> --
> 反者道之动,弱者道之用
> m...@seaskysh.com
> longshank...@gmail.comhttp://blog.csdn.net/longshanks/

red...@gmail.com

unread,
Jul 1, 2008, 5:41:04 AM7/1/08
to pon...@googlegroups.com
想当年, 大二我们学习形式语言和自动机, 这课比较抽象, 偏用英文教材, 这英文
教材似乎是老中的教材风格, 不是让人易于学懂, 而是堆概念的(老中写的? 忘了)
---- 这还不只 --- 教材还不齐全, 我们找往届生收购之后, 才达到平均两人一本.

这门课才学得我们头大呢. (不要和说互联网互联网上面找资料, 那年头, novell
网都还没有到校园, 大一到书店买 C 的书, 只有两本, 还是介绍 unix 顺便介绍
C 的).

痛苦地啃完这门课(真是啃啊, 一行字读二十遍也不出奇), 再到大三学编译原理,
觉得真是很简单. 编译的课程实习, 做一个 pascal 解释器, 用递归下降, 觉得纯
粹就是垒代码了, piece of cake.

钙瓷 写道:

liuxinyu

unread,
Jul 1, 2008, 6:24:11 AM7/1/08
to TopLanguage
如果不是做后端的一些优化,前端基本上已经是很成熟的理论了。
不过没有形式语言和自动机的东西,上来就啃dragon book对初学者来说是不大容易。
建议可以看些容易的.
1. sicp的元语言求值器写得很浅显
2. <<程序设计语言,实践之路>>可以看看。顺便比较各种语言

总体上说,用lisp实现语言太方便了。甚至成了lisp中解决问题的惯用手法:分析问题,定义DSL,解决之。

SpitFire

unread,
Jul 1, 2008, 8:08:10 AM7/1/08
to pon...@googlegroups.com
我还是那建议,不是非得弄通理论,会点BNF一般的工作就可以干了

2008/7/1 liuxinyu <liuxi...@gmail.com>:

--
SpitFire

mingli yuan

unread,
Jul 1, 2008, 8:23:51 AM7/1/08
to pon...@googlegroups.com
没有那么简单吧。

写BNF的过程中还会遇到不少问题,比如消除左递归、提取左公因子。理论还是要学习的。

我在学习尝试的过程中,发现ANTLR还是一个不错的工具,有IDE工具,工具支持语法图显示和调试,用起来很舒心。
但手工写Parser,我还是觉得用类似Haskell的Parsec等的组合子库写出来的代码比较漂亮。

2008/7/1 SpitFire <spit...@gmail.com>:

图灵刘江

unread,
Jul 3, 2008, 11:34:15 AM7/3/08
to TopLanguage
呵呵,多谢帮我们做广告,虎书的C版是图灵出的。

MIT的课程名应该译为计算机语言构造或者构建之类的,不能一看engineering就
译为工程,其实很多时候是指开发出来、做出来的意思。

图灵刘江

unread,
Jul 3, 2008, 11:36:42 AM7/3/08
to TopLanguage
编译是公认比较难而且学的时候比较枯燥的课程,大家具体谈谈自己的学习经验
和体验吧,争取给后来者留下些有用的东西。

我先抛砖。我个人觉得学这种东西,首先学习动力也就是培养兴趣,是最重要的。
所以,第一个问题是:学编译有什么用?

SpitFire

unread,
Jul 3, 2008, 12:17:18 PM7/3/08
to pon...@googlegroups.com
用处
1.实用价值,现实中你很可能要实现一个小的语言,而不懂编译原理,你不可能写出来,也不可能使用这些工具如yacc,还有就是更好的使用正则表达式如boost.regex
2.增加对问题的理解的深度,对语言有更清晰认识,对运行时环境的认识
3.理解图灵机

2008/7/3 图灵刘江 <liuj....@gmail.com>:

--
SpitFire

蒙面骑士

unread,
Jul 3, 2008, 12:30:27 PM7/3/08
to pon...@googlegroups.com
有趣,漂亮。有做东西的成就感。
ps:正在学,看的虎书
我要表达一种舌头抽筋的情绪,就是满嘴胡言

2008/7/3 图灵刘江 <liuj....@gmail.com>:

yaya...@gmail.com

unread,
Jul 3, 2008, 10:55:15 PM7/3/08
to TopLanguage
呵呵,最近俺也在自学这个东东。不是计科系的正牌毕业生,看这个有点慢。过段时间楼主交换下心得哈。

On 7月4日, 上午12时30分, "蒙面骑士" <qing...@gmail.com> wrote:
> 有趣,漂亮。有做东西的成就感。
> ps:正在学,看的虎书
> 我要表达一种舌头抽筋的情绪,就是满嘴胡言
>
> 2008/7/3 图灵刘江 <liuj.tur...@gmail.com>:
>
>
>
> > 编译是公认比较难而且学的时候比较枯燥的课程,大家具体谈谈自己的学习经验
> > 和体验吧,争取给后来者留下些有用的东西。
>
> > 我先抛砖。我个人觉得学这种东西,首先学习动力也就是培养兴趣,是最重要的。
> > 所以,第一个问题是:学编译有什么用?- 隐藏被引用文字 -
>
> - 显示引用的文字 -

Gohan

unread,
Jul 4, 2008, 5:42:06 AM7/4/08
to TopLanguage
图灵的虎书很早买了,目前只看了词法和语法部分,觉得实践很重要。
讨论组里的vczh对编译方面的实践很多,看看能不能听听他的心得。

HanliInter

unread,
Jul 5, 2008, 2:36:12 AM7/5/08
to pon...@googlegroups.com
我和我们同学的观点就是:应该让编译原理成为一门连上2年的课程,这样算法,数据结构,优化,程序设计..都可以连起来讲了

Lee MaRS

unread,
Jul 5, 2008, 6:01:26 AM7/5/08
to pon...@googlegroups.com
算法、数据结构这一块和编译原理还真是相差得有点远……

2008/7/5 HanliInter <hanli...@gmail.com>:

Wang Xin

unread,
Jul 5, 2008, 8:57:34 AM7/5/08
to pon...@googlegroups.com
学编译,对大部分人来说,就是学习一个状态机(自动机),这个对于编程很有帮助(程序的运行就是从一个状态到另外一个状态,直至结束状态)

至于其他的,就是用来在外人面前炫耀的了,90%的人工作中不会用到那些知识(不排除在这混的人大部分都是那10%中的一员这种可能)

2008/7/5 Lee MaRS <lee...@gmail.com>:



--
Everything is possible and available if we trust ourselves!

蒙面骑士

unread,
Jul 5, 2008, 10:53:18 AM7/5/08
to pon...@googlegroups.com
我觉得大部分知识就是有趣,乐子吧。有用这个要求太粗暴了。
我要表达一种舌头抽筋的情绪,就是满嘴胡言

2008/7/5 Wang Xin <cber.w...@gmail.com>:

Cliff Peng

unread,
Jul 5, 2008, 9:25:46 PM7/5/08
to pon...@googlegroups.com


2008/7/1 pongba <pon...@gmail.com>:



2008/7/1 STL-BOOST <wart...@gmail.com>:

 最近在编译原理,就是传说中的龙书。发现好难哪,感觉云里雾里的。那些状态转换、LR什么的,搞不明白。有没有一些入门的教材呀?
 
1.  编译原理本就不是好啃的东东。所以感到难很自然。
2. 感到难是必然的,这就意味着需要更加深入的啃,如果发现问题就要细细琢磨,琢磨问题是什么分析需要什么东西才能解决你的问题。譬如一段话看不懂,最大的可能性是里面的某个概念不理解,那么怎样才能理解这个概念,是不是理解它还需要其他铺垫的概念,反省目前你所理解了的部分,看看到底卡在什么地方,此为分析。反复阅读和揣摩又是一个办法,书读百遍其义自现这话是有道理的,因为在阅读一两遍的时候你的大脑其实只做了一个表浅的加工处理。另一个办法就是上网查找资料,做功课。按照我以往的经验,根本用不着这后一条,多读几遍,慢慢咀嚼揣摩,总会弄懂的。

一句话,啃不动,是因为你不够使劲。
还有可能是牙不好

Reply all
Reply to author
Forward
0 new messages