前几天上了关于简单优先分析法的一节课,当时心情暴躁,什么也听不进去,听完就更暴躁了。刚刚又上了一遍课,觉得老师讲得通俗易懂,决定分享一下。
首先我们应该知道一些基本的表示方式
因为符号不易打出,我暂且用=,>,<符号代替他们的优先关系。虽然这三个符号和我们的算数符号类似,只是多了一个点,但是他们还是有写区别的。比如如果有a<b(这里是算术符号),那么b>a,但是如果a的优先性大于b,b的优先性不一定小于a。话不多说,切入正题吧。
判断符号的优先关系的三个标准如下:
如果有这么一条表达式A->...XY...,那么我们可以判断X的优先性等于Y。
如果有表达式A->...XB,B经过n(n>=1)次推导可以变成以字符Y开头的字符串,那么可以判断X的优先性小于Y。
如果有表达式A->...BD...,B经过n(n>=1)次推导可以变成以X结尾的字符串,D经过m(m>=0)次推导可以变成以Y开头的字符串,那么我们可以确定X的优先性大于Y。
知道了上面三个判断方法,我们来看一下下面这个简单的例子。
=关系:很显然,bA是连在一起的,按照上面的判断方法,我们可以知道b=A,往后判断还有,A=b,(=B,A=a,a=)。
<关系:按照上面第二条判断法则,找到形如A->...XB...的表达式,其中B需经过至少一次推导得到以Y开头的字符串,才能得出X<Y的结论。