编译技术典型题目总结

第一章

1.术语定义

编译程序:将高级语言编译为汇编语言的程序

源程序:源语言编写的程序

目标程序:目标语言书写的程序

编译程序的前端:主要依赖于源语言,包括是词法分析,语法分析,语义分析,中间代码生成

后端:依赖目标机而不是源语言,包括目标代码生成

遍:对源程序或者中间语言从头到尾扫描并完成任务

2.编译程序的组成

词法分析,语法分析,语义分析,中间代码生成,中间代码优化,目标代码生成,表格管理和错误处理

3.翻译程序,编译程序,解释程序

翻译程序是将一种语言编写的程序转换为另一种语言编写的程序

编译程序将高级语言编写的程序转换为低级语言编写的程序

解释程序解释执行高级语言的程序

4.哪里出错

(1)语法        (2)语义        (3)语法        (4)词法

5.编译程序的技术

自编译,交叉编译,自展,移植

第二章

PL/0语言允许嵌套定义和递归调用,编译程序如何解决储存问题

栈式动态储存管理

第三章

1.写元素

 L(G[S])={abc}

2.G[N]语言是什么

允许以0开头的非负整数

3.构造文法

G[S]: S->S+D|S-D|D         D->0|1|2|3|4|5|6|7|8|9

4.写元素

5.写文法

6.写推导和语法树

7.证明文法二义性

8.判断文法二义性

9.生成语法树

10.找短语,句柄

11.最左推导,最右推导

12.写文法

13.写文法

18.概念

字母表:非空有穷结合

串:符号的有穷序列

字:字母表中的元素

语言:句子的集合

语法:构成语言句子的各个记号的组合

语义:各种表示方法表示各个记号

第四章

1.构造DFA

(1)

(2)

  (3)

(4)

2.构造DFA

2.最小DFA

3.最小DFA

4.写正规式

第五章

1.最左推导,消除回溯,LL(1)

2.构造LL(1)

3.消除左递归

第六章

1.算符归约

2.算符归约和规范归约

区别:算符优先文法在归约过程中只考虑终结符之间的优先关系从而确定可归约串,而与 非终结符无关,只需知道把当前可归约串归约为某一个非终结符,不必知道该非终结符的名 字是什么,因此去掉了单非终结符的归约。 规范归约的可归约串是句柄,并且必须准确写出可归约串归约为哪个非终结符。

3.判断是否是OPG(算符优先)

第七章

1.判断SLR(1)文法

2.构造SLR(1)分析表

第八章

1.逆波兰式(后缀表达式)

2.改变表达式

3.求语义值

4.建立语法制导定义

5.翻译四元式

6.翻译算数表达式

第十章

1.代码优化技术

2.进行代码优化

  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
条件编译技术是程序开发中常用的一种编译技术,可以根据条件选择是否编译某些代码段。本文将介绍条件编译技术的基本原理、使用方法和注意事项。 一、基本原理 条件编译技术是通过预处理指令来实现的。预处理器在编译代码之前会对代码进行扫描,遇到预处理指令就会根据指令中的条件选择是否编译相应的代码段。常用的预处理指令包括: 1. #ifdef:如果定义了宏,则编译后面的代码段。 2. #ifndef:如果未定义宏,则编译后面的代码段。 3. #if:根据指定的表达式判断是否编译后面的代码段。 4. #elif:在#if指令中添加一个新的判断条件。 5. #else:在#if和#elif指令的条件不成立时,编译后面的代码段。 6. #endif:结束#if指令。 二、使用方法 条件编译技术可以用于以下几种情况: 1. 根据不同操作系统选择编译代码:例如,可以使用#ifdef指令来判断当前操作系统是否为Windows,从而编写不同的代码。 ``` #ifdef _WIN32 // Windows平台下的代码 #else // 非Windows平台下的代码 #endif ``` 2. 根据不同编译器选择编译代码:例如,可以使用#ifdef指令来判断当前编译器是否为GCC,从而编写不同的代码。 ``` #ifdef __GNUC__ // GCC编译器下的代码 #else // 非GCC编译器下的代码 #endif ``` 3. 根据宏定义选择编译代码:例如,可以使用#ifdef或#ifndef指令来判断宏是否被定义过,从而编写不同的代码。 ``` #ifdef DEBUG // 调试模式下的代码 #else // 非调试模式下的代码 #endif ``` 4. 根据不同版本选择编译代码:例如,可以使用#if指令来判断当前版本是否支持某些特性,从而编写不同的代码。 ``` #if __cplusplus >= 201103L // 支持C++11特性的代码 #else // 不支持C++11特性的代码 #endif ``` 三、注意事项 在使用条件编译技术时,需要注意以下几点: 1. 不要滥用条件编译技术,否则会导致代码难以维护。 2. 不要在条件编译指令中使用复杂的表达式,否则会增加代码的复杂度。 3. 尽量避免使用#define指令定义宏,因为宏定义可能会覆盖其他代码的定义。 4. 在使用条件编译技术时,一定要保证代码的可移植性,避免因为平台差异或编译器差异导致代码不能正常工作。 总之,条件编译技术可以帮助我们编写更加灵活、可移植和优化的代码,但需要注意使用方法和注意事项,以确保代码的质量和可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值