1、语法三个基本概念:
(1)字母表
(2)单词符号
(3)语法单位
2、语法、语义、文法区别:
语法:一组规则,用这组规则可以产生形式上正确的程序。
语义:语义是指这样的一组规则,使用它可以定义一个程序的意义。
文法:文法是描述语言的语法结构的形式规则(即语法规则)。
3、高级语言的分类
(1)按程序设计范型分为:
强制式语言(过程式语言。c)
应用式语言(函数式语言。lisp)
基于规则的语言(prolog,yacc)
面向对象的语言(java)
(2)按编译时是否需要类型检查分为:
静态类型语言(c,c++,java)
动态类型语言(Python, Ruby,PHP)
(3)按类型检查强弱分为:
弱类型语言(C,C++,VB)
强类型语言(JAVA, C#)
4、程序设计语言的一般特性:
(1)程序结构
(2)数据类型与操作
(3)语句
(4)控制结构
5、上下文无关文法组成部分:终结符号、非终结符号、开始符号、产生式。
用大写字母代表非终结符,小写字母代表终结符,用α、γ、β等代表由终结符和非终结符组成的符号串。
第六题
G6:
N→D|ND
D→0|1|2|3|4|5|6|7|8|9
则L(G6)是终结符产生的一个符号串,即数字0~9组成的符号串。
0127最左推导:N→ND→NDD→NDDD→DDDD→0DDD→01DD→012D→0127
0127最右推导:N→ND→NDD→NDDD→DDDD→DDD7→DD27→D127→0127
第七题
写一个文法,使其语言是奇数集,且每个奇数不以0开头。
G(7):
A→1|3|5|7|9
B→2|4|6|8|A
D→0|B
E→A|FA
F→B|BD
6、语法树的二义性:
E→E+E|E*E|(E)|i, 关于(i*i+i)的推导
推导一:E→(E) →(E*E) →(i*E) →(i*E+E)→(i*i+E) →(i*i+i)
推导二:E→(E)→(E+E)→(E*E+E)→(i*E+E)→(i*i+E)→(i*i+i)
学习总结:本章作为这门课的正式第一章,让我充分了解到了这门课程的困难程度,就算上课专心听讲也不一定能都理解。所以课前的预习是必要的。本章学习了高级语言的语法描述,重点是上下文无关文法,这一部分内容感觉比较陌生,就和刚接触计算机语言感觉差不多,不能完全理解它的作用和原理,希望后续的学习能慢慢深入。