1. 梳理第二章的内容,写一篇理解与总结。
在这章内容中,我们学习了程序的文法和语言,通过学习,我肯也能够理解到,机器程序语言和我们的自然语言,即英语中文一样,也是有着自己的文法和语法的,而且相比一般的自然语言有着更加严格的规范,自然语言一般来说,可以衍生许多的不规范的语法,而且还可以读的通顺,但是程序的文法有着严格的规范,因为可能一个语句的文法错误,就会导致整个程序无法运行甚至运行出错。
1.文法:这是成语语言的表达规则,规定了程序句子的结构,也是一种语言的描述,也称作文法。
2.字母表:这是元素的非空有穷合集,由于字母表中的元素也称为符号,因此也称作字符集。
3.符号串:是由字母表中的符号组成的任何有穷序列称为符号串。
4.字符串运算:1)头尾,例如z=xy,那么z为字符串的头,y为字符串的尾。2)符号串的连接:设x=ST,y=abc,则xy=STabc。4)符号串集合。
5.规则:也称为重写规则、产生式、生成式。
6.文法的类型:乔姆斯基把文法分成4种:0型,1型,2型,3型。
还有句型的推导工具:语法树,也称作推导树。以及句型的分析方法:1)自上而下的分析方法。2)自底而上的分析方法。
2. 尝试写出PL/0 语言的文法。(或者你认为比较好的语言规则)
整数n
标识符i
表达式e
条件语句
赋值语句
复合语句
函数
程序
...
解:
〈表达式〉::=[+|-]〈项〉{〈加法运算符〉〈项〉}
〈项〉::=〈因子〉{〈乘法运算符〉〈因子〉}
〈因子〉::=〈标识符〉|〈无符号整数〉|‘(’〈表达式〉‘)’
〈加法运算符〉::=+|-
〈乘法运算符〉::=*|/
〈关系运算符〉::==|#|<|<=|>|>=
〈条件语句〉::=IF〈条件〉THEN〈语句〉
〈过程调用语句〉::=CALL〈标识符〉
〈当型循环语句〉::=WHILE〈条件〉DO〈语句〉
〈读语句〉::=READ‘(’〈标识符〉{,〈标识符〉}‘)’
〈写语句〉::=WRITE‘(’〈表达式〉{,〈表达式〉}‘)’
〈字母〉::=a|b|…|X|Y|Z
〈数字〉::=0|1|…|8|9