1、梳理第二章的内容,写一篇理解与总结。
第二章中:文法的形式定义 上下文无关文法、正规文法 推导、短语、分析树、二义性 有限自动机的形式定义 自动机、文法、表达式等价性 NFA的确定化和DFA的最小化。
文法的理解是:文法是对语言结构的定义与描述,即从形式上描述和规定语言结构,称之为语法
而语法也有它的规则:通过建立一组规则(产生式),来描述句子的语法结构。
在课堂上听老师讲课,较为熟悉的是文法四元组、推导、句型、短语之类。
在习题上,推导是比较熟悉的,给予一个特定的句型,通过推导来把这个句子弄出来,但是如果只是单单看书本上的概念和描述,就会非常抽象,因为定义的东西多,而且看得我乱七八糟,还是通过老师上课讲述和习题的练习才能理解。
不过到目前为止,上下文语法我是不太清晰。同时在推导中,还要特别注意的是最右推导也称之为规范推导,而最左推导只有一个定义也就是 最左推导。在做语法树、句型、短语、直接短语中,语法树就要求规范推导(最右推导),理解了什么是短语,什么是句柄跟直接短语后,就可以在语法树上直接看出答案来。
在文法二义性中,还是不太熟悉,不过在网上找到相关文法二义性的消除的习题讲解后,就理解这种习题该如何推导。
在语言构造文法中,对于文法的构造还是不熟练。
总的来说,第二章内容不算复杂,只要自己理解了,做起来就很容易,但容易部分知识的内容概括的太抽象,一堆的符号串跟字母串的描述看不太懂。
2、
尝试写出PL/0 语言的文法。
整数n
标识符i
表达式e
条件语句
赋值语句
复合语句
函数
程序
...
参考于 http://www.doc88.com/p-9713794071234.html
由于不会,就上网查询
<程序>-><分程序>
<分程序>->[<常量说明部分>][<变量说明部分>][<过程说明部分>] <语句>
<常量说明部分>->CONST<常量定义>{,<常量定义>};
<常量定义>-><标示符>=<无符号整数>
<无符号整数>-><数字>{<数字>}
<变量说明部分>->VAR<标示符>{,{标示符}};
<标示符>-><字母>{<字母>|<数字>}
<过程说明部分>-><过程首部><分程度>;{<过程说明部分>}
<过程首部>->procedure<标示符>;
<语句>-><赋值语句>|<条件语句>|<当型循环语句>|<过程调用语句>|<读语句>|<写语句>|<复合语句>|<空>
<赋值语句>-><标示符>:=<表达式>
<复合语句>->begin<语句>{:<语句>}<end>
<条件>-><表达式><关系运算符><表达式>|ood<表达式>
<表达式>->[+|-]<项>{<加减运算符><项>}
<项>-><因子>{<乘除运算符><因子>}
<因子>-><标识符>|<无符号整数>|(<表达式>)
<加减运符>->+|-
<乘除运算符>->*|/
<关系运算符>->=|#|<|<=|>|>=
<条件语句>->if<条件>then<语句>
<过程调用语句>->call<标识符>
<当型循环语句>->while<条件>do<语句>
<读语句>->read(<标识符>{,<标识符>})
<写语句>->write(<标识符>{,<标识符>})
<字母>->a|b|c....x|y|z
<数字>->0|1|2....7|8|9