编译学习QQ群:756893189

 

编译课程->http://staff.ustc.edu.cn/~qlzheng/compiler/

 

编译原理与技术  

2019-2020学年.秋季.第一学期              


 

课程名称
学时
上课时间
教室

编译原理和技术011163

100/100

周一下午6-7

西区3B102

周三上午3-4

 

教材:

《编译原理》陈意云、张昱 高教出版社(第3版)

 

参考书:

(1)《Compilers: Principles, Techniques, and Tools》 ,A.Aho,et al, 第二版中译本,机械工业出版社,2007.

(2)《编译器构造-C语言描述》,郑启龙, 姚震,机械工业出版社,2005


 

课程讲义
阅读内容
第一讲 编译器概述  
第二讲 词法分析(1)
第三讲 词法分析(2) ANSI C 词法
第四讲 文法和语言 ANSI C 语法
第五讲 自顶向下分析 ANSI C 2011规范
第六讲 自底向上分析 LR(0)分析的正确性
第七讲 语法制导翻译  
第八讲 运行时环境  
第九讲 中间代码生成(1)  
第十讲 中间代码生成(2)  

 


TA:

 

蔡恒雨,chy520@mail.ustc.edu.cn

侯 璇,hx970922@mail.ustc.edu.cn

宁成明,ncmustc@mail.ustc.edu.cn

丁上义,dingsyyo@mail.ustc.edu.cn

姜 靖,2519633619@qq.com

 

 


 

Home Works(每周一交):

 

Homework 2(2019年9月18日交)

(1)习题2.3的(d)和(e),并针对(e)给出识别相同正规集的极小化DFA;

(2)习题2.12的(b);

(3)习题2.14,并针对所得到DFA M,给出相应的正规式R,使得L(R) = L(M)。

 

Homework 1(2019年9月9日交)

(1)观察讲义lec1中P4和P11上的函数fact的C代码及其汇编代码,初步了解编译器的作用。你可以:

  (a)简要注释每条汇编代码;

  (b)尝试指出C程序与汇编代码间的联系,

    比如,C程序中的参数n在汇编中是如何表示的;if语句对应哪几条汇编代码......

(2)针对以下C程序,给出标号L处变量 j 可能的值集合

int main()
{int i,j = 0;
for(i=0;i<10;i++)
{ switch(i)
 {
     case 0:case 2: break;
     case 3:case 5: continue;
     default:    j = i;  
 }
 L: j += i * 2;
}

}

(3)针对以下C/C++程序:

 (3.1)补全相关代码

 (3.2)用文字简要描述变量b和p的类型信息。

 如变量a的类型信息描述如下:变量a是一个含10个元素的数组,每个元素是指向一个整型变量的指针。

int main()
{
    int  i;
    int* q;
    int* a[10];
    int* (*b[10])[10];
    int* (*(*p)[10])[10];
      
    i = 100; q = &i; a[1] = q; b[1] = &a; p = &b;

    cout <<        p[0]      << endl; //输出100,待补全

    cout <<        *p        << endl; //输出100,待补全

}

 

 

 


课堂演示

词法、语法分析的课堂演示


课程实践

 

2019年编译课程实践(TBA)

 

2018年编译课程实践 1

2018年编译课程实践 2

供参考的PL/0实验(2017版)

逻辑算符“表达式值”方式的实现

 


 

课程考核 
100%
期末考试
40%
课程实践
25%
平时作业
15%
平时测验
20%

 

 


与我联络

我的信箱  QLZheng@ustc.edu.cn

办公地点: 国家高性能计算中心(合肥),

      东区新科研楼五楼(网络中心): 502实验室,507办公室             

办公电话: 63602441