1梳理第二章的内容,写一篇理解与总结。
编译程序——把一种语言程序(称为源语言程序)转换成另一种语言程序(目标语言程序),而后者与前者在逻辑上是等价的。
编译程序的工作过程一般可以划分为五个阶段:词法分析、语法分析、语义分析、中间代码的产生、优化、目标代码的生成。
1.词法分析
输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个单词。
2.语法分析
根据语言的语法规则,把单词符号串分解成各类语法单位。
3.语义分析
分析其含义,并进行初步翻译。
4.中间代码产生
进行静态语义检查,进行代码翻译。
5.优化
公共字表达式的提取、循环优化、删除无用代码。
6.目标代码的产生
把中间代码转化为最终的特定机器上的低级语言代码。
高级语言及其语法描述(重点讲-上下文无关文法)
程序语言的定义{词法规则、语法规则}
词法规则:单词符号的形成规则
语法规则:从单次符号到更大的结构(语法结构)
语法树的根结由开始符号所标记。随着推导的展开,当某个非终结符被他的某个候选式所替换时,这个非终结符的相应结就产生出下一代新结,候选式中自左至右的每个符号对应一个新结,并用这些符号标记其相应的新结。
不唯一性:一个句型并不是只对应一棵语法树。
如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是二义的。也就是说若一个文发中存在某个句子有两个不同的最左(最右)推导,则这个文法是二义的

文法:它描述语言语法结构的一组形式规则。
上下文无关文法:它定义的语法范畴(或语法单位)是完全独立于这种范畴可能出现的环境。例如,在程序设计语言中,当碰到一个算术表达式时,我们完全可以“就事论事”处理,而不必考虑它所处的上下文。然而,在自然语言中,随便一个词,甚至一个字的意思在不同的上下文中都有可能有不同的意思。幸运的是,当今的程序设计语言都是上下文无关的。
1型文法:又称为上下文有关文法
(1):式子左边可以有多个字符,但必须有一个终结符
(2):式子右边可以有多个字符,可以是终结符,也可以是非终结符,但必须是有限个字符
2型文法:又称为上下文无关文法
(1):式子左边只能有一个字符,而且必须是非终结符
(2):式子右边可以有多个字符,可以是终结符,也可以是非终结符,但必须是有限个字符
在第二章中我们学习完编译原理第二章的内容后,了解到第二章的大题内容是对知识要点的解释以及不同概念的介绍与分类,理论性的知识内容还是较多的,很多内容都很抽象,以至于有的知识还有些难以熟练的理解运用;同时也觉得老师要求我们通过博客来记录学习内容的方式也是不错的,能够有效督促我们复习知识,强化对知识点的记忆,并通过习题的练习来得到知识点的实践与巩固。
2. 尝试写出PL/0 语言的文法。(或者你认为比较好的语言规则)
整数n
标识符i
表达式e
条件语句
赋值语句
复合语句
函数
程序
...
整数n
<数字>::=0|1|2|3|…|8|9
标识符i
<字母>::=a|b|c|…|Y|Z
表达式e
<表达式>::=[+|-]<项>{<加减运算符><项>}
条件语句
<条件语句>:=IF<条件>THEN<语句> <过程调用语句>::=CALL<标识符>
赋值语句
<赋值语句>::=<id>:=<表达式>
复合语句
<复合语句>::=begin<语句>{;<语句>} end
函数
不会写
程序
<程序>::=<分程序>.
<分程序>::=[<常量说明部分>] [<变量说明部分>][<过程说明部分>]<语句>
浙公网安备 33010602011771号