1. 梳理第二章的内容,写一篇理解与总结。
第二章主要学习了文法和语言,关于概念大部分可以参考:https://www.cnblogs.com/dahu-daqing/p/8884912.html,作者用例子来帮助我们理解文法、字符串、字母表等概念,通俗易懂。
讲讲实验的方面,这一章的实验主要是如何得到一个表达式的最左推导、最右推导以及语法树:
(1)最左、最右推导:方法比较简单,有点类似于离散数学的思维逻辑,最左即从左往右一步步带入推导,最右则相反。
(2)语法树:类似于数据结构的树形图,按照推导规则往下画出子树。如果该表达式没有二义性,最左推导出来的语法树和最右推导是一样的。
我们也可以从语法树中得到短语、直接短语和句柄:
① 短语:找出每个子树末端节点形成的字符串,便可以得到所以的短语
②直接短语:先找出没有包含其他更小子树的子树,它的叶结点就是直接短语
③句柄:最左边的直接短语就是句柄
关于这些实验的例子,请查看随笔3,可以巩固理解。
2. 尝试写出PL/0 语言的文法。
①整数n:n :: = 1 | 2 | ..... | 9 | 0
②标识符i: i :: = <字母> | {<字母> | <数字 >}
③表达式e :e ::= [+|-]<项>{<加减运算符><项>}
④条件语句:<条件语句> ::= if<条件>then<语句>
⑤赋值语句:<赋值语句> ::= <标识符>:=<表达式>
⑥复合语句:<复合语句> ::= begin<语句>{;<语句>}end
⑦函数:<函数> ::= <类型说明><函数名><复合语句>
⑧程序:<程序> ::= [<常量说明部分>] [<变量说明部分>] [<过程说明部分>] <语句>
参考文档:文法和语言,理解克林闭包 https://www.cnblogs.com/dahu-daqing/p/8884912.html