β且βε则∈FOLLOWA。也可定义为:FOLLOWAaS…Aa…a∈VT若有S…A,则规定∈FOLLOWA这里我们用作为输入串的结束符,或称为句子括号,如:输入串。定义3给定上下文无关文法的产生式A→αA∈VNα∈V若αε则SELECTA→αFIRSTα如果αε,则SELECTA→αFIRSTαε∪FOLLOWA。FIRSTαε表示FIRSTα的非ε元素。更进一步可以看出能够使用自顶向下分析技术必须使文法满足如下条件,我们称满足条件的文法为LL1文法,其定义为:定义4一个上下文无关文法是LL1文法的充分必要条件是:对每个非终结符A的两个不同产生式,A→αA→β满足SELECTA→α∩SELECTA→β空其中α,β不同时能ε定义5LL(1)文法也可定义为一个文法G是LL(1)的,当且仅当对于G的每一个非终结符A的任何两个不同产生式A→αβ,下面的条件成立:①FIRST(α)∩FIRSTβ空也就是α和β推导不出以某个相同的终结符a为首的符号串;它们不应该都能推出空字ε.②假若βε那么,FIRST(α∩FOLLOW(A)=空也就是,若βε则α所能推出的串的首符号不应在FOLLOWA中。
二、算法
该程序可分为如下几步:(1)读入文法(2)判断正误(3)若无误,判断是否为LL1文法(4)若是,构造分析表;(5)由总控算法判断输入符号串是否为该文法的句型。
是LL1文法?
判断句型
报错
根据下面LL1文法,对输入串wiiiiii进行LL1分析要求如下:1、先手工建立LL1分析表;结束2、分析输入串,判断是否是语法上正确的句子,并输出整个分析过程。LL1文法G为:
fE→TE’E’→TE’εT→FT’T’→FT’εF→Eid分析算法:输入:串w和文法G的分析表M。输出:如果W属于L(G),则输出W的最左推导,否则报告错误。方法:开始时,S在分析栈中,其中S是文法的开始符号,在栈顶;令指针ip指向W的第一个符号;repeat让X等于栈顶符号,a为ip所指向的符号;ifX是终结符号或the
IfXathe
把X从栈顶弹出并使ip指向下一个输入符号elseerrorelseX是非终结符号ifMxaXày1y2…ykthe
begi
从栈中弹出X;把ykyk1…y1压入栈,y1在栈顶;输出产生式Xày1y2…yk;e
delseerroru
tilX栈空
f语法分析的流程算法
三、设计目的:设计目的:
(1)理解和掌握LL1语法分析方法的基本原理;根据给出的LL1文法,掌握LL1分析表的构造及分析过程的实现。(2)掌握预测分析程序如何使用分析表和栈联合控制实现LL1分析。
四、实现环境和要求
选择实习环境为486以上CPU4M内r