编译原理随堂作业四—文法和语言知识梳理

1.梳理第二章的内容,写一篇理解与总结。

第二章,我们学习了文法和语言

1)首先,我们得先了解一下文法的概念。类似于平常说的汉语,也都是有语法的。简单一句“我是大学生”,就包含了主语、谓语、和宾语,用EBNF来表示的话就是如下这样

  <句子>::=<主语>|<谓语>

  <主语>::=<代词>|<名词>

  <代词>::=我|你|他|它

  <名词>::=教师|大学生|.....

  <谓语>::=<动词>|<直接宾语>

  <动词>::=是|学习.....

  <直接宾语>::=<代词>|<名词>

一个句子的成分有很多,符合上述规则的句子才能成为结构合法的句子。这种规则和对语言的描述我们称之为文法

扫描二维码关注公众号,回复: 7378342 查看本文章

2)规则

规则也称重写规则、产生式或生成式。举个栗子,比如有一个规则A-->a,则称它是一条关于A的产生式。在这块便要提到文法四元组

先定义一个文法G为文法四元组(VN,VT,P,S),其中

VN为非终结符集;VT为终结符集;P为规则或产生式的集合;S称作识别符或开始符。VN,VT,P是非空有穷集!

举个例子

给定一个文法G=(VN,VT,P,S),VN={S},VT={0,1},P={S-->0S1,S-->01},S为开始符号

S可以接下去产生0S1,0S1可以接着产生00S11,可以接着生成下去的S就是非终结的、

而当S-->01的时候式子就终结了,因此0,1称作终结符,以上生成的式子就是生成式,S开始符的意思就不用多作解释了,字面意思

3)推导

对一个文法(如上)不断展开就能得到所相应的语言,如上面的文法描述的就是一个0n1n的语言,这个过程,也叫推导

还是上面的例子G(S):S-->01 | 0S1

0S1-->0011一步到位,换掉左边一个非终结符变成右边终极符形式,叫做直接推导,也称作一步推导

最左推导:如果在推导过程中每次都优先换掉最左边的非终结符,就是最左推导啦

最右推导:就是最左反过来,每次都先换最右边的非终结符。

举个例子,有文法:    找 i+i

       G(E):

  E=> E + T | T

  T=>T * F | F

  F=>(E)| i

最左:E --> E+T--->T+T--->F+T--->i+T -->i+F -->i+i

最右:E -->E+T -->E+F -->E+i -->T+i -->F+i -->i+i

4)分析树

分析树,又称推导树,是推导过程的图示化方法,是一棵有序有向树,因此具有树的性质。

还是上面的例子,找 i*i+i

最左推导:E=>E+T=>E+F=>E+i=>T+i=>T*F+i=>T*i+i=>F*i+i=>i*i+i

最右推导:E=>E+T=>T+T=>T*F+T=>F*F+T=>i*F+T=>i*i+T=>i*i+F=>i*i+i

推导树:

             

如上,每个叶节点按顺序排列,便能构成句型。其中,每个子节点往下都构成一个短语,而类似F-->i这种成为直接短语,最左边的直接短语称为句柄

而且从上面这个例子中能看出,最左推导和最右推导得出的推导树是一样的!

5)文法的类型

2. 尝试写出PL/0 语言的文法。(或者你认为比较好的语言规则)

整数n      n-->0|1|2|3|……|8|9

标识符i     i->a|b|c|……|y|z|A|B|C|……|Y|Z (<字母>{<字母>|<数字>} )

表达式e     ::= [+|-] <项> {<加减运算符><项>}

条件语句    ::= if <条件> then <语句>

赋值语句    ::= <id> :=<表达式>

复合语句    :: = begin<语句>{;<语句>} end

函数        ::= =<主函数>

程序       ::=<分程序>::=[<常量说明部分>][<变量说明部分>][<过程说明部分>]<语句>

猜你喜欢

转载自www.cnblogs.com/xiaoAP/p/11597703.html