第二章-高级语言及语法描述
一、内容
定义程序语言首先要确定其语法语义。
语法分为两部分,一部分是语法规则,一部分是词法规则。
字母表是对组成语言的基础字符集的规定,词法规则规定单词符号,而由单词符号组成的表达式则称为语法单位或语法范畴。
单词符号是语言中具有独立意义的最基础结构。
语法,即一组能生成形式上正确程序的规则。词法规则:有限状态自动机 正则表达式 。语法规则:上下文无关文法。
语义,定义一个程序意义的规则。语义规则:描述语法单位含义和功能。描述:属性文法和基于属性文法的语言制导翻译方法。
符号串的正闭包
A是符号串集合,则A+称为符号串集合A的正闭包
A+ = A+=A1∪A2∪A3 …∪An…
符号串集合的的星闭包(与高中数学中全集的概念近似)
A* =A0∪A1∪A2∪A3 …∪An…=A0∪A+ 根据是否需要在编译过程中确定类型来分:静态,动态。
动态类型语言
在运行时,确定类型的语言。即编译时与类型无关。
一般在变量使用之前不需要声明变量类型,而变量的类型通常是由被赋的值的类型决定。 如php、Python和Ruby。
静态类型语言
与动态类型语言正好相反,在编译时,便需要确定类型的语言。即写程序时需要明确声明变量类型。如C/C++、Java、C#等。
程序设计语言支持特定的数据类型与操作。
程序设计语言支持不同的语句与控制结构。
二、习题
6. (1)、L(G6)是数字构成的字符串。
(2)、N->ND->NdD->NDDD->DDDD->0DDD->01DD->012D->0127
N->ND->DD->3D->34
N->ND->NDD->DDD->5DD->56D->568
7.L(G7):
S->BO|O
O->1|3|5|7|9
D->2|4|6|8|O
B->BA|O
A->0|D
8.
9.
句子iiiei有两个语法树
S->iSeS->iiSeS->iiieS->iiiei
S->iS->iiSeS->iiieS->iiiei
10.S->TS|T
T->(S)|( )
11.(1)S->A|C
A->abA|ab
C->cC|c|∑
(2)S->A|C
A->bcA|bc
C->aC|a|∑
(3)S->A
A->ab|abA|∑
(4)S->A
A->10|10A|∑
三、感受
很明显这是极为抽象的一个内容,讲解了高级语言是如何被定义和生成的。语言定义分为语法语义,语法包含语法规则和词法规则。语法能规定生成一组形式上正确的语言。语义则是规定语法单位的含义功能,并使语言产生具体意义。
文法是描述语言的语法结构的形式规则。而上下文无关文法,所定义的语法范畴是完全独立于这种范畴可能出现的环境的。
上下文无关文法包括四部分:一组终结符号,一组非终结符号,一个开始符号,一组产生式。
语法树:有图的形式来表示一个句型的推导。语法树并不能反应产生后代的先后。也就说语法树后代产生顺序是任意的,但对应的文法是确定的。语法树->文法是多对一的关系。
通过本章习题学到的是:文法和语言的转换,出题思路不是文法转语言就是语言转文法。且二义性问题是无法判定的,语法的二义性是要通过语句的语法树数目来确定的。也可以通过一个语句能有两个不同的最左或最右推导来确定具有二义性。
本文介绍了高级语言的语法和语义定义,涵盖了语法规则、词法规则、上下文无关文法等内容。并探讨了静态类型语言与动态类型语言的区别,以及如何通过文法和语言进行相互转换。
1177

被折叠的 条评论
为什么被折叠?



