作者candog (怕热的肥宅)
看板NTHU_Course
标题Fw: [心得] 编译器设计 锺叶青
时间Wed Feb 15 12:17:23 2017
※ [本文转录自 candog 信箱]
作者:
[email protected] ("FireBolt")
标题: [心得] 编译器设计 锺叶青
时间: Wed Feb 15 01:32:46 2017
作者: koviankevin (Stolton) 站内: nthu.course
标题: [心得] 编译器设计 锺叶青
时间: 2011/07/06 Wed 16:10:17
课名:编译器设计 Compiler Design
科号:09920CS 340400
老师:锺叶青
课本:Crafting a Compiler with C', C. Fisher an R. Leblanc, 1991.
课别:资工系选修
学分:3
凉度:★★
甜度:★★★★☆
建议先修课程:程式设计
课程内容\简介:
- Introduction (ch1)
简单介绍compiler在干嘛
- A Simple Compiler (ch2)
介绍一个简单的compiler,然後作业要写出来
- Scanning - Theory and Practive (ch3)
介绍scanner的作法
- Grammar and Parsing (ch4, First_Follow_Set)
介绍grammar的一些名词还有first set、follow set的求法
- Top-Down Parsing (ch5)
介绍LL parser
- Bottom-Up Parsing (ch6-1, ch6-2, ch6-3)
介绍LR、SLR、LALR parser
- Syntax-Directed Translation (ch7)
简介一些code generation的技巧
- Symbol Table and Declaration Processing (ch8)
介绍symbol table的实作方式
第八章只教一点点
上课方式:
每一章节都会发投影片讲义
很多很复杂的步骤都会讲得很清楚(课本可能就几行带过)
像是regular expression的ODFA得到的过程
LL、LR等等transition table得到的过程
在投影片都是每一步都列出来(所以页数很多)
上课速度本学期好像跟以前比有加快一些
因为老师想要多教点code generation的部分
不过最後还是没多教多少
老师都会在他要出国的时候考试
不然就是请助教讲lex and yacc
这两个工具只在最後一个作业时才用到
给分:
原本:
1. Programs: 40% (4次,各10分)
2. Mid-term Exam.: 20%
3. Final Exam: 30%
4. Quiz & Participation: 10%
最後:
1. Programs: 50% (最後一次20分,其他10分)
2. Exam.: 50% (考三次取两次,高的占30%,低的占20%)
3. Quiz & Participation: 10% (上课全到至少拿8分,quiz可看讲义)
而且无条件进位,逢九进十...有参与整学期课程的大概就过了
考试作业型态:
考试:考题其实都很简单
只要上课的例子都有弄懂大概就没有问题
但是写起来的过程非常烦
一点错可能就会让後面的也错
不只考上课内容也考细心
第三次考试有90%跟前两次一样
虽然助教似乎有改的比较严一点
但是有认真看应该都可以考不错
作业:
Assignment 1: Micro Language Compiler
依照课本上的code大概就可以完成70%的作业
只要弄懂其中的关系把缺的部分补齐就可以了
Assignment 2: Lexcial parser for C
写一个Mini C的Scanner,反正就是很删减版的C
要判断一些符号或者是保留字
正常的作法是要依课本上建立finite state machine在化简
不过把state table写死也是可以的(容易很多)
Assignment 3: LL(1) parser for C Grammar
给一个grammar要做出他的parsing tree
这个应该是四个作业里面最麻烦的
因为输入grammar之後要自动建立first set、follow set、predict set
然後才能得到parsing table
课本上都有写出上述程式的pseudo code
要实作出来虽然有些难度不过也没有到非常难的地步
其中最要小心的大概就是一个set做错大概後面就会有错
Assignment 4: Code generator for C Codes
这是唯一可以用lex和yacc来做的
lex可以取代第二个作业做的事情
yacc则是取代第三个作业
这两个真的是很厉害的工具
只要会使用整个作业就简单很多
而code generation的部分
本学期是产生MIPS组合语言
如果是本系生大概计算机结构都学过
翻翻之前的课本应该不是难事
而且助教已经事先公布所使用的测资
只有简单的加减乘除和IF-ELSE而已
比较困难的是要在grammar中加入适当指令来传递资料
这个就...看个人造化了XD
老师的喜好、个性:
蛮随和的,而且是少数在上课前五分钟就会进教室的教授
给加签吗?
没满
成绩分布: 99(有人比我高,但是逢九进十为什麽没有进位我也不知道XD)
↓每组人数
A+ 19.0% (11)
A 6.9% ( 4)
A- 12.1% ( 7)
B+ 0.0% ( 0)
B 6,9% ( 4)
B- 19.0% (11)
C+ 6,9% ( 4)
C 12.1% ( 7)
C- 5.2% ( 3)
D以下 12.1% ( 7) (3个F,4个X)
58 人
--
┌─│┌┌─┌─╮─┬┌─╮│ ┌─ telnet://imaple.tw 枫
├─││├─├┬╯ │├─││ ├─ IAS_EverTale 桥
┌└─└╯└─│╰ ││ ╯└─└─故 事 接 龙 板┐驿NAYURI
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 站
◆ From: koviankevin从114.43.185.89
─ wowslr:
推荐这堂课 07/06 17:11olfq
─ christian:
老师的会早到教室给同学问问题 也很爱叫大家举手 07/06 22:40aQnF
─ fasthall:
就算是大师也不太推 我觉得他教学没有认真准备 01/01 22:36aQMN
※ 发信站: 批踢踢实业坊(ptt.cc)
※ 转录者: candog (140.114.32.68), 02/15/2017 12:17:24