作业4 文法和语文总结与梳理
1. 梳理第二章的内容,写一篇理解与总结。
(1)文法涉及的基本概念,以及自己不太熟悉的概念
L={A,B, … ,Z,a,b, … ,z}
D={0,1, … ,9}
LUD:全部字母和数字的集合
LD:由一个字母后跟一个数字组成的所有符号串的集合
L4:由4个字母组成的所有符号串在集合
L*:由字母组成的所有符号串(包括ε)的集合
D+:由一个或若干个数字组成的所有符号串的集合
L(LUD)*:以字母开头,后跟字母、数字组成的所有符号串的集合
文法是描述语言的语法结构的形式规则(即语法规则)。就是指怎么由一堆符号组成一个有含义的句子的规则和协议。并且是一种上下文无关的文法。
文法例子:
上面定义英文句子的规则就可以说是一个上下文无关文法。其中,<句子>被称为开始符号,<主语><谓语><代词>之类的被称为非终结符号,He、gave之类的被称为终结符号。
归纳起来,一个上下文无关文法G包括四个部分:终结符号,非终结符号,开始符号,产生式。
更精确的定义:
(2)语法分析树与二义性
- 最右推导,每个推导过程都是从最右边的非终结符号的替换开始
- 最左推导,每个推导过程都是从最左边的非终结符号的替换开始
一个文法可以唯一确定一个语言,但是一个语言不一定唯一对应一个文法
用一种树形的图示来表示这个句型的推导过程,这棵树就被称为”语法分析树“,简称”语法树“。
列如:
对于一个文法,如果它的某些句子对应两棵不同的语法树,这个文法就属于“二义性文法”。
2. 尝试写出PL/0 语言的文法。
整数n <数字> ::= 0 | 1 | 2 | … | 8 | 9
标识符i <标识符>::=<字母>{<字母>|<数字>}
表达式e <表达式>::=[+ | -] <项> { <加法运算符><项>}
条件语句 <条件语句> ::= IF <条件> THEN <语句>
赋值语句 <赋值语句> -> <标识符> := <表达式>
复合语句 <复合语句> ::= BEGIN <语句> {;<语句>} END
函数 <函数定义> := <类型说明><函数名><复合语句>
程序 <程序> ::= <分程序>
...