编译原理 LR之规范活前缀

来源:互联网 发布:js 验证上传文件格式 编辑:程序博客网 时间:2024/06/05 10:11

在LR分析中对规范活前缀两种不同的表述与解释

 第一种:

         规范句型:用最右推导导出的句型。

         规范前缀:若有规范句型AB,且B是终极符串或空串,则称A为规范前缀。

         规范活前缀:若规范前缀A不含句柄或含一个句柄并且句柄在A的最右端,则具有形式A=aN(N为句柄),则称规范   前缀A 为规范活前缀(简称活前缀)。

         规约规范活前缀:若活前缀A是含有句柄的活前缀,并且句柄在A的最右端,即具有形式A=aN(N为句柄),则称活 前缀A为规约规范活前缀(简称规约活前缀或者可归活前缀)。

         以上对于LR分析中几种前缀的描述,在我看来很是让人费解,主要是对于初学者来说,以上对这三种前缀的陈述过于形式化,以至于在实际的例子分析中,难以从字面与解释结果。

  比如:文法G[S]:

            S----aAbB

            A----c | Ac

            B----d | dB

句子accbdd的规范推导是S===aAbB===aAbdB===aAbdd===accbdd

规范规约为:accbdd===aAcbdd===aAbdd===aAbdB===aAbB===S

规范句型accbdd的规范前缀是: a,ac;(答案)

                              规范活前缀是:ac;

但是根据上述描述这个答案很难让人理解。因此有查了其他书上对于LR分析中关于规约前缀这块的解释,找了种比较容易理解的陈述,下面陈述第二种


第二种:

       该种描述不像上面那样分的很细,只定义了一个活前缀,然后将活前缀分为非归态活前缀和归态活前缀。同样可以找出LR分析中所用到的规约活前缀。

活前缀:规范句型的一个前缀,这种前缀不含句柄之后的任何符号。

        归态活前缀: 活前缀的尾部正好是句柄之尾,这时可以进行规约,规约之后又成为另一句型的活前缀。

        非归态活前缀:句柄尚未形成,需继续移入若干符号之后才能形成句柄。

第二种描述对于上述问题就能很好的直观解释了。

以上两种表述是我摘自不同的教材,(很明显第一种是我用的) 很明显一种侧重形式化,一种侧重直观化,不能说哪种好哪种不好,只是提醒自己以后写博文时侧重点,同时学习新东西时要学会放宽视野。

(2013.11.14)

原创粉丝点击