1. 优先级去除文法的二义性 优先级在于确定无二义的文法时有重大作用,它可以确定在具有多个可选右侧的产生式中,到底选择哪个的顺序。显然这个顺序在产生式本身是无法定义的,所以需要通过多级的产生式来强行确立一个顺序:必须先完成这个表达式的匹配,才能进行下一级匹配。 由于个人的逻辑水平实在有限,发现可以作为一个规律记忆的是,最先匹配的产生式右侧,在运算时的优先级是最低的(出现多个优先级相同的运算符的话,就需要规定推导方式了,比如最左?)。也就是说,需要最先计算的表达式,是需要最后匹配的。至于为什么是这样。。暂时不知道

  2. 不连续的模式句型 比如1n0m1m0n,两侧的1和0出现次数一致,中间的次数也一致。这个时候中间部分照常处理,用0A1替换即可,外侧的不连续0和1则可以视作附在A两侧的对称句型,与A不同的是对称中心不为空而是A。也就是说,外侧句型B中间不是10而是1A0,这样就解决了中间夹了一个A的问题,即B ::= 1B0 | A。实际上A就是B中对称中心为空的特殊情况。之前被老师坑了,以为产生式右侧不能放ε,所以就对右侧有了奇怪的理解,比如A ::= 0A1 | 01。。。

标签: none

添加新评论