Chinaunix

标题: 在看龙书,看得很吃力,小白问题,语法制导? [打印本页]

作者: xdshting    时间: 2008-11-24 01:04
标题: 在看龙书,看得很吃力,小白问题,语法制导?
在3.7节从正规表达式到NFA,提到:

“这个算法是语法制导算法,该算法使用正规表达式的语法结构来指导构造过程”

我看了下面的例子,还是没有体会出“语法制导”的意思

能不能用白话给解释一下,谢谢
作者: cjaizss    时间: 2008-11-24 01:43
说白了,就是告诉你regex是拿来干什么,有什么用,怎么使用的意思."语法制导",这个名词真难听
作者: prolj    时间: 2008-11-24 10:38
按照语法构造AST或者gen IR。

yacc语法匹配后面不是有个语义动作吗?一般用这个语义动作去build AST,这就是语法制导。

[ 本帖最后由 prolj 于 2008-11-24 12:10 编辑 ]
作者: xdshting    时间: 2008-11-24 21:13
谢谢楼上两位,虽然还是有点迷糊

我在理解一下
作者: nmap    时间: 2008-12-04 21:23
xdshting朋友,共同学习,我也在学习龙书。
和大家讨论交流,确实又学习到了许多知识。

刚才仔细读了龙书第3.7章节,书中说,

“The algorithm is syntax-directed in
that it uses the syntactice structure
of the regular expression to guide the
construction process."

后来我又查了一下directed的含义,金山词霸里
的解释有这么几个:
1、有指导的
2、有管理的
3、定向的
4、被控制的

从英语理解上,syntax-directed也是一个形容词,
所以我个人一些粗陋理解是,

”该算法是有语法指导的,使用正则表达式的语法结构
来指引构建过程。“

后来的图3.30,给出了一个正则表达式,(a|b)*abb的
语法结构图,然后通过 例3.16,结合图3.30一步步构
造这个正则表达式的NFA。

有什么理解错误的地方,请各位朋友批评指出。
作者: abutter    时间: 2008-12-06 11:12
原帖由 nmap 于 2008-12-4 21:23 发表
xdshting朋友,共同学习,我也在学习龙书。
和大家讨论交流,确实又学习到了许多知识。

刚才仔细读了龙书第3.7章节,书中说,

“The algorithm is syntax-directed in
that it uses the syntactice str ...


syntax-directed 是合成词,看 direct 的意思。

[ 本帖最后由 abutter 于 2008-12-6 11:16 编辑 ]
作者: NalaGinrut    时间: 2008-12-09 19:21
其实不是什么“语法制导”
是说这个算法是面向语法的,就是说用了正则表达式来建立语法规则
所谓面向语法,就是说这个算法的处理对象是语法结构

syntax-directed 在我的stardict上翻译为面向语法,词典为朗道英汉5.0
作者: prolj    时间: 2008-12-09 22:23
语法分析就是对token进行语法匹配,匹配的话,匹配的是一个具体的语句,如果匹配成功把这个匹配语句的IR构造出来,这就是语法制导。
不匹配就不构造IR了,给出错误信息就退出。
别那么迷信龙书,编译入门的书写的不错的多了去了,能让你明白的就是好书。
作者: cofish    时间: 2008-12-12 17:20
真是吐血
买了一本龙书 ,第二版,回来一看,是英文版的

估计要浪费了。
作者: jiazhigang    时间: 2008-12-13 18:16
你也太粗心了吧,不如转给我吧,我正想看这本书
作者: starfuck    时间: 2008-12-31 05:09
本帖最后由 starfuck 于 2019-11-26 23:53 编辑













作者: rawa9999    时间: 2008-12-31 18:32
语法制导就是以语法规则为中心,匹配语法规则,然后逐条分析语意。龙书的理论现在还在流行,不错的理论书籍,要想真正构建一个编译器只有看源码,看书是不管用的!
作者: prolj    时间: 2008-12-31 18:40
原帖由 rawa9999 于 2008-12-31 18:32 发表
语法制导就是以语法规则为中心,匹配语法规则,然后逐条分析语意。龙书的理论现在还在流行,不错的理论书籍,要想真正构建一个编译器只有看源码,看书是不管用的!

太对了!看龙书离现代编译器还差的远呢。
何况龙书只是稍微设计到了一点优化的基础知识,向量化和并行的内容更是可怜,“开发编译的大牛人手一本”纯属瞎说。
作者: cjaizss    时间: 2008-12-31 22:44
不过这也是实话,一般编译原理的教材对优化都说的太少
作者: prolj    时间: 2009-01-01 09:06
标题: 别较劲,不说我难受,只是我的个人看法,觉得不对就算了,没什么意义
我觉得龙书入门还可以,但是现代编译器的入门EAC更合适。龙书的地位怎么摆?作者在学术界的地位...你在学术界混敢不给人家面子?!时代在发展,科技在进步。龙书的“古老”使得它显得太“浅”,对,就是第二版。不信你看了龙书再拿GCC代码看看,根本不是一回事。
如果你连龙书都看不懂,就没有继续下去的必要了,因为后面优化的理论更多,算法更复杂。尤其是自动机就晕的,后面的理论你怎么理解呢?我这话不是打击,是说,如果想明白,就得一次一次的看,一本书是远远不够的,好的著作有很多,好的paper也有很多,离开了代码都是空中楼阁。为什么强调原理?如果你不明白三大定律的意思,给你三个数学式子,充满数字而不是有符号的那种,你知道那些公式是套用的三大定律的公式?就算别人给了你三大定律的公式,你知道是怎么回事?
最后说一句,把龙书摆在神的位置膜拜是看不懂它的。牛顿当年要是一直膜拜前人恐怕就“提取”不出来三个公式了。前人就是巨人,的肩膀。你总是站在甚至五体投地的爬在地上,怎么能站在巨人的肩膀上?巨人把你举上去?
别较劲,不说我难受,只是我的个人看法,觉得不对就算了,没什么意义。
纯属扯淡,愿意看就看看,不愿看就算了。觉得好就笑笑,不好就算了,我不想毁坏任何人的美好心情。
作者: cjaizss    时间: 2009-01-01 10:05
eac是指什么?
作者: prolj    时间: 2009-01-01 13:44
标题: 回复 #16 cjaizss 的帖子
Engineering a Compiler  编译器工程 Keith D.Cooper, Linda Torczon 冯速
Keith D.Cooper是《现代体系结构的优化编译器》作者的学生。参与了老师领导的Rice大学的项目(一直不明白是啥项目,我猜就是现在的Open64)
Linda Torczon 美女哦,网格计算什么的...
二人创作了N个艺术品般的compiler——某牛说的,原话不知道英语是啥
cookys?好像是这个网站,打不开了。ccrg上有很多GCC的会议paper,也非常好,比期刊强多了。其中的会议韩国的都有,日本的也有,大陆?不知道,港澳台的paper有,会议不知道有没有。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2