文法和语言总结与梳理
1. 梳理第二章的内容,写一篇理解与总结。
高级语言的定义
任何语言实现的基础是语言定义,程序语言主要由语法和语义两个方面定义。语法,即一组规则,一部分称为词法规则,另一部分称为语法规则。语义,即符合构成规范的句子,要考虑意义,是指一组规则,使用它可以定义一个程序的意义。
高级语言的一般特征
程序设计语言的一般特性:程序结构、数据类型与操作、语句、控制结构。
程序语言的语法描述
与文法定义有关的几个术语:字母表,符号,符号串,空字等。【注】用S*表示S上的所有符号穿的全体,空字也包括在其中。符号串的运算有连接,方幂,符号串集合的运算有和,连接积。此外,要注意,V+是V的正则闭包,V+=VV*,相当于无空字符串存在。
上下文无关文法
文法是描述语言的语法结构的形式规则。上下文无关文法所定义的语法范畴是完全独立于这种范畴可能出现的环境的。不宜于描述任何自然语言。对于一个句子,可以用直接推导或者图示化的方法来推导。上下文无关文法由四元组组成:一组终结符号(组成语言的基本符号,如基本字、标识符、常数、算符和界符等),一组非终结符号(代表语法范畴,如算术表达式),一个开始符号(特殊非终结符),以及一组产生式(定义语法范畴的书写规则,一个产生式的形式:A→a)。
语言的定义:
假定G是一个文法,S是它的开始符号。如果S (a (表示从S出发,经0步或若干步可推出a),则称a是一个句型。仅含终结符号的句型是一个句子。文法G所产生的句子的全体是一个语言,将它记为L(G).
L(G)={a|S a & a∈VT }
要掌握产生式和语言之间的转换,掌握最左(最右)推导。
语法分析树与二义性
语法分析树:简称语法树,用来表示推导过程。一个句型不只是对应一棵语法树
第二章的难点在于文法和语言的相互推倒转换,然后就是太多的定义需要去记住,刚开始接触时,学习内容并没有太高的难度,但是在往后的学习里接触到语法时对知识的运用并没有很熟练,导致在做题时产生过多的错误
2. 尝试写出PL/0 语言的文法。(或者你认为比较好的语言规则)
整数n <数字> => 0|1|2…7|8|9
标识符i <标识符> → <字母>{<字母>|<数字>}
表达式e <表达式> → [+|-]<项>{<加减运算符><项>}
条件语句 <条件语句> → if<条件>then<语句>
赋值语句 <赋值语句> → <标识符>:=<表达式>
复合语句 <复合语句> → begin<语句>{;<语句>}end
赋值语句 <赋值语句> → <标识符>:=<表达式>
程序 〈程序〉→〈分程序〉.
〈分程序〉→ [<常量说明部分>][<变量说明部分>][<过程说明部分>]〈语句〉