编译原理中单线箭头->和双线箭头=>有什么区别

我在做这道题的时候,
编译原理中单线箭头->和双线箭头=>有什么区别_第1张图片
考虑着用->来做过程推导,但是老师纠正是说要用=>,所以我对于->和=>有什么区别产生了疑问。查找资料后,总结如下:

  1. 单线箭头 -> 用在规则(产生式)中,称作“定义为
    ->:是为了来组成一条文法中的规则的。
    那么->左右的可以是什么样的符号呢?
    我们要先了解下文法的四元组的表达方式,G(VN,VT,P,S),其中P代表的是规则,形如:α->β。
    其中α,β属于(VN∪VT) (✱代表是VN∪VT集合的闭包)
    (在VN和VT分别代表的是该文法中非终结符的集合,终结符的集合)
    (在编译原理的集合的闭包概念:表示字母表Σ上所有有穷长串的集合)
    所以就是说,->前后是
    非终结符和终结符相连接的符号串(当然也可以是仅有非终结符或仅由终结符组成的字符串)

  2. 而双线箭头(=>) 用在推导中,称作“推导”
    =>:是为了来“定义文法所产生的语言”
    那么=>左右的又可以是什么样的符号呢?
    根据《编译原理》(清华大学王生元第三版)书中,第22页倒数第四行的定义:
    “还需要引入推导的概念,及定义V中符号之间的关系”
    这里的V指的其实就是(VN∪VT)
    所以说明推导(=>)两边的符号串跟定义为(->)两边的符号串是相同的;

总结:

  1. 定义为(->)和推导(=>)这两种符号不同在于:使用场合不同,具体如下:
    定义为(->):文法中规则(产生式)的定义上。
    推导(=>):定义文法所产生的语言。
  2. 但是他们两边的符号串是相同种类的。

最后把上面的题目解答过程附上:
其中L(G)代表的是文法(G)所产生的语言

编译原理中单线箭头->和双线箭头=>有什么区别_第2张图片
解答思路:
开始符S开始推导,推导出文法所代表的语言。
首先我们要先明白语言是什么?
根据编译原理中语言的定义:文法所描述的语言是该文法一切句子的集合。(大白话就是说语言是文法中句子的全集)
既然语言是集合,所以最后推导的解惑

解答过程:
S=>aSBE
=>a(n-1)S(BE)(n-1)    根据(1)推导
=>an(BE)n       根据(2)推导
=>anBnEn
=>anbnEn
=>anbnen

你可能感兴趣的:(编译原理(课程笔记))