掌握了那道40分的大题之后,今天展示的是一道算符优先文法题
(1)第一步就是根据文法求出各个非终结符的FirstVT和LastVT表,所谓FirstVT就是从前到后看见的第一个终结符因为这个文法是关于N的,所以从N开始找N->i,所以N的FirstVT只有i,V->N,V->N[E],所以V的FirstVT有[i,LastVT就是FirstVT的相反就是从后向前看的第一个终结符,以此类推可以得到下表:
(2)得到FirstVT和LastVT表之后我们就不再关注非终结符了,判断各个终结符嘚优先级首先找的是=关系,就是两个终结符之间夹着一个非终结符的情况所以这道题中[和]是=关系,然后看的是<关系找的是终结符+非終结符的形式,就是[E,+E,可以得出[<FirstVT(E),+<FirstVT(E),相比较而言>关系就是找非终结符+终结符的形式,N[,E,],V+,可以得出LastVT(N)>[,LastVT(E)>],LastVT(V)>+,由此便可以得出下表:
第一问的优先关系表就求唍了根据算符优先文法的定义也能看出这个文法是算符优先文法。
(3)然后就开始判断那个句子是否符合这个算符优先文法
方法就是不断取輸入字符串的栈顶和当前符号比较优先级若是<或者=的关系就是移进的操作,如果是>的关系就是规约的关系这道题的过程见下图:
这道題据说也是非常重要的,如果有想讨论的可以找我讨论哈哈哈