活前缀和其他几种概念

 活前缀:右句型的前缀,而且其不含句柄之后的任何符号,之前的可以,所以找到句柄是关键。比如E+E*E归约成E+E,句柄是E*E,那么它的活前缀就是E、E+、E+E、E+E*、E+E*E。又比如id+id*id归约成E+id*id,句柄是最左边的id,那么它的活前缀是id,因为不能超过句柄。
右句型:最右推导可得到的句型。
最右推导:每步推导都替代最右非终结符的推导。
推导:我们说αBγ推导出αβγ,是说存在产生式B->β。
产生式:左边为非终结符,右边为终结符与非终结符组合成的串。
非终结符:是字符串的集合。
终结符:组成语言的词。如c语言中的2,a,int,if等。
句型:开始符经过若干步推导后得到的串。
前缀:如abc的前缀为a、ab、abc。
开始符:开始符是整个语言的集合。
句柄:非形式的,句柄是和某个产生式右部匹配的字符串,把句柄归约成产生式左部的非终结符,可以得到最右推导的逆过程的一步。形式的定义为:开始符s经过若干步最右推导得到αBγ,αBγ经过一步最右推导得到αβγ,若γ为终结符的集合,则β为句柄。举例:
E->E+E|E*E|-E|(E)|id,对于id+id*id,其中一个最右推导为E->E+E->E+E*E->E+E*id->E+id*id->id+id*id。在id+id*id归约成E+id*id的过程中,最左边的id是句柄。E+id*id归约成E+E*id时,最左边的id是句柄,把E+E*id归约成E+E*E时,id是句柄。把E+E*E归约成E+E时E*E是句柄。E+E归约成E时,E+E是句柄。
归约:可理解为把产生式右边的串用产生式左边的非终结符代替。
如果有帮助,麻烦点点赞喽。

你可能感兴趣的:(编译原理,编译原理)