1. 梳理第二章的内容,写一篇理解与总结。
答:第二章节主要讲述了文法和语言,文法是有一定的规则的,而这些有规则的文法又按照一定的规则编译组合成语言,文法描述的语言是该文法一切句子的集合;
根据文法和语言的形式定义,将文法G定义为四元组( Vn, Vt, P, S);
Vn为非终结符(或语法实体,或变量)集,Vt为终结符集,P为规则的集合,且至少包含一个非终结符,S是识别符或开始符,它是一个非终结符;
Vn,Vt,P是非空有穷集,Vn和Vt不包含公共的元素;
文法有0型文法(短语文法)、1型文法(上下文有关文法)、2型文法(上下文无关文法)、3型文法(正规文法)这四种类型;
本章还学习了语法树相关的知识,对于文法中的某些句子可以用两颗不同的语法树来表示的句子,我们称之为“二义性文法”;
语法树中有几个重要的概念:句柄、简单短语、短语、句子、句型、语言;
在推导的过程中若从左到右进行推导则称之为“最左推导”,若从右到左推导则称之为“最右推导”,又叫做“规范推导”;
以上就是第二章节的大概内容,详细的定义建议翻查书籍或者百度都可以查找到,在此处就不啰嗦了;
2. 尝试写出PL/0 语言的文法。
整数n n - > 0 | 1 | 2 | 3 | ... | 8 | 9
标识符i i - > a | b | c | ... | x | y | z | A | B | C | ... | X | Y | Z
表达式e :: = [ + | - ] < 项 > { < 加减运算符 > < 项 > }
条件语句 :: = if < 条件 > then < 语句 >
赋值语句 :: = < id > : = < 表达式 >
复合语句 :: = begin < 语句 > { ; < 语句 > } end
函数 < 函数 > - > < 主函数 > < 其他函数 > | < 主函数 >
程序 :: = < 分程序 > :: = [ < 常量说明部分 > ] [ < 变量说明部分 > ] [ < 过程说明部分 > ] < 语句 >
...