3.6 解析技术的力量

一般来说,一个T1解析技术要比一个T2解析技术更有力量(更强大),当T1能够处理T2所能处理的全部语法,而不是相反的情况。不形式的说法是如果占主动权的一方可以比另一个处理更多的语法时,那这个解析技术就比另一个要强。不过这当然是无稽之谈,由于所有的解析技术都能处理无限集合的语法,那么“更大”的概念就是难以定义的。此外,一个没有明确目的的用户语法几乎没有任何可能能符合现有的解析技术。从用户角度来看,对“平均”实用语法的修改已适用于方法T来处理的工作量才是有意义的,以及修复这种修改对解析树带来的差异。解析技术T的力量(作用)与这个工作量是成反比的。

一个强大的解析器总是更复杂的,相比于弱小的解析器需要花费更多的精力来编写它。但由于一个解析器或者解析器生成器(见17.2节)只需要费一次功夫编写好之后,就可以想怎么用就怎么用,所以长远来说一个强大的解析器更省时省力。

虽然一个“强大”的解析器的概念很直观明了,但当解析器和语法混在一起时就很容易出现混淆了。解析器越强大那么语法的限制就越小,而“弱小的”解析器就要限制语法了。通常会使用语法来命名解析器,而这也就是混乱开始的地方。一个“强大的LL(1)语法”比“LL(1)语法”有更严格的限定;也可以说是更强大的LL(1)。这样的语法的解析器很简单,相比于(完整)LL(1)语法,并且也是属于弱小的--可以承受的。所以实际上,一个强大的LL(1)(strong-LL (1))解析器比一个LL(1)解析器要弱小一些。我们一直都在强调“强大(strong)”和“LL(1)”之间的连字符号,以表明“强大”是用来形容“LL(1)”的,而不是语法,但并非所有的出版物都会遵循这个约定,所以读者一定要清楚这一点。“弱化优先分析器”出现时情况就反过来了,“弱化优先分析器”要比“优先分析器”更强大(尽管还有一些别的不同)。