一.内容总结
1. 语法的三个基本概念:
字母表:一个有限的字符集。(空字指的是不包含任何符号的序列,注意区别其与空集的不同)。
单词符号:是语言中具有独立意义的最基本结构。
语法单位:由单词符号构成的更大的结构(一般包括:表达式,语句,分程序(语句块),函数(有返回值),程序)。
2.
|
语法:一组规则,用这组规则可以产生形式上正确的程序。
3.程序高级语言的分类:
3.1程序设计范型:强制式语言(过程式语言。c)
应用式语言(函数式语言。lisp)
基于规则的语言(prolog,yacc)
面向对象的语言(java):封装继承多态
多态性:操作符或子程序名能够根据参数和结果的数据类型,引用某些函数定义中的任意一个。
3.2编译时是否需要类型检查:静态类型语言(c,c++,java)
动态类型语言(Python,Ruby,PHP)
3.3类型检查强弱:弱类型语言(C,C++,VB)
强类型语言(JAVA, C#)
4.程序设计语言的一般特性:程序结构
数据类型与操作
语句
控制结构
5.文法(重点)
5.1与文法有关的概念:
字母表,符号串,前缀后缀,空字,符号串的连接,方幂,符号串集合的和,符号串集合的连接,闭包等,详见课本25-26页。
5.2.上下文无关文法:
特点:独立性
缺点:不能用来描述自然语言
形式上定义一个上下文无关文法G是一个四元式(VT,VN,S,P)
VT是一个非空有限集,它的每一个元素称为终结符号;
VN是一个非空有限集,它的每一个元素称为非终结符号,VT∩VN=f;
S是一个非终结符号,称为开始符号;
P是一个产生式(有限)集合,每个产生式形式是A→a ,其中,P∈VN,a(V∪VN)*
开始符号S至少必须在某一产生式的左部出现一次。
5.3推导(具体推导的应用会在课后习题中给出)
最左(最右)推导:在推导的任何一步αÞβ,其中α、β是句型,都是对α中的最左(右)非终结符进行替换
构造文法的的过程(课后例题)
5.4语法分析树与二义性
语法分析树:简称语法树。用来表示推导过程。
文法的二义性:如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是二义的。(不等于语义的二义性)
二.知识运用(课后习题)
6.
8
9
三.学习感悟
这门课最大的特点就是结构性和逻辑性。编译原理解释的是高级程序语言的形成原理和构造过程,与大一大二所学习的语言对比:高级语言教我们学习如何编程,编译原理则是叫我们构造,解释一门语言。前两周的学习分析了高级语言的组成,介绍了语句定义和分析方法。语法语义是语言规则,字母表单词符号属于语法范畴,语法单位属于语义范畴。语法描述讲语法的形式描述问题,这一单元的最重要方法的是语法分析树和上下文无关文法。
上下文无关文法,语法是描述语言的语法结构的形式规则。针对语法进行分析使用语法分析树,要注意语法分析树后代产生顺序并不影响其表达。因此对同一个语句,都可以通过文法使用最左或是最右推导得到。
希望在门课最后的阶段,能够写出一个简单的编译器。