我在做这道题的时候,
考虑着用->来做过程推导,但是老师纠正是说要用=>,所以我对于->和=>有什么区别产生了疑问。查找资料后,总结如下:
-
单线箭头 -> 用在规则(产生式)中,称作“定义为”
->:是为了来组成一条文法中的规则的。
那么->左右的可以是什么样的符号呢?
我们要先了解下文法的四元组的表达方式,G(VN,VT,P,S),其中P代表的是规则,形如:α->β。
其中α,β属于(VN∪VT)✱ (✱代表是VN∪VT集合的闭包)
(在VN和VT分别代表的是该文法中非终结符的集合,终结符的集合)
(在编译原理的集合的闭包概念:表示字母表Σ上所有有穷长串的集合)
所以就是说,->前后是
非终结符和终结符相连接的符号串(当然也可以是仅有非终结符或仅由终结符组成的字符串) -
而双线箭头(=>) 用在推导中,称作“推导”
=>:是为了来“定义文法所产生的语言”
那么=>左右的又可以是什么样的符号呢?
根据《编译原理》(清华大学王生元第三版)书中,第22页倒数第四行的定义:
“还需要引入推导的概念,及定义V✱中符号之间的关系”
这里的V✱指的其实就是(VN∪VT)✱
所以说明推导(=>)两边的符号串跟定义为(->)两边的符号串是相同的;
总结:
- 定义为(->)和推导(=>)这两种符号不同在于:使用场合不同,具体如下:
定义为(->):文法中规则(产生式)的定义上。
推导(=>):定义文法所产生的语言。 - 但是他们两边的符号串是相同种类的。
最后把上面的题目解答过程附上:
其中L(G)代表的是文法(G)所产生的语言
解答思路:
从开始符S开始推导,推导出文法所代表的语言。
首先我们要先明白语言是什么?
根据编译原理中语言的定义:文法所描述的语言是该文法一切句子的集合。(大白话就是说语言是文法中句子的全集)
既然语言是集合,所以最后推导的解惑
解答过程:
S=>aSBE
=>a(n-1)S(BE)(n-1) 根据(1)推导
=>an(BE)n 根据(2)推导
=>anBnEn
=>anbnEn
=>anbnen