1. 梳理第二章的内容,写一篇理解与总结。
(1) 几个基本概念和定义
字母表是一个非空有穷集合,字母表中的元素称为符号,所以字母表又称为符号集
字母表中的符号组成的任何有穷序列称为符号串;存在空符号串,不包含任何符号,记为ε
还有一些关于符号串的运算:连接,方幂,集合…..
(2) 文法
文法,是指如何由一堆符号组成一个有含义的句子的规则和协议。
一个句子组成满足一个个规则(产生式)时,可用“→”表示“由...组成”或者“定义为”,来分解这个句子
一个上下文无关文法G包括四个部分:终结符号,非终结符号,开始符号,产生式。
(3) 文法和语言的推导
假设G是一个文法,S是开始符号,如果S经过零步或者若干步推出α,那么称α是一个句型。只包含终结符号的句型是一个句子。文法G产生的所有句子构成一门语言,记为L(G)。
推导的过程有最左推导和最右推导,最右推导又称为规范推导
(4) 语法分析树
用一种树形的图示来表示这个句型的推导过程,这棵树就被称为“语法分析树”,简称“语法树”。
对于一个文法,如果它的某些句子对应两棵不同的语法树,这个文法就属于“二义性文法”。
还可以通过对语法树的分析来得到一个句型推导过程的所有短语,直接短语以及句柄。
2. 尝试写出PL/0 语言的文法。
整数n
n->0|1|2|3|……|8|9
标识符i
i->a|b|c|……|y|z|A|B|C|……|Y|Z
表达式e
e->[+|-]<项>{<加减运算符><项>}
条件语句
<条件语句>->if<条件>then<语句>
赋值语句
<赋值语句>→ <标识符>:=<表达式>
复合语句
<复合语句>->begin <语句>{;<语句>} end
函数
<函数>→<主函数><其他函数>|<主函数>
程序
<程序>-><分程序>.
<分程序>->[<常量说明部分>] [<变量说明部分>][<过程说明部分>]<语句>
...