二直观算符优先分析法 1定义: 任二个相继出现的终结符a与b(可能中问有V),可能有以 下优先关系: a<b a的优先性低于b a=b a的优先性等于b a>b a的优先性高于b 2例6.3 文法G: E->E+EE*EEtE(E)i 的终结符的优先关系见下表
二 直观算符优先分析法 1 定义: 任二个相继出现的终结符a与b(可能中间有VN),可能有以 下优先关系: a b a的优先性低于b a b a的优先性等于b a b a的优先性高于b 2 例6.3 文法G: E —> E + E | E * E | E↑E | ( E ) | i 的终结符的优先关系见下表
E一>E+E|E*E|E↑EI(E)Ii 优光表 # + > < < < > > > > < ≤ < > > > > # < < <
+ * ↑ i ( ) # + * ↑ i ( ) # E—> E+E | E*E | E↑E |( E )| i 优 先 表
3使用如上分析表,构造分析算法(直观算待 优先分析法) 记号使用说明: #:语句括号(栈底w后》 日:现行栈顶符 a:刚读入字符 OPTR:运算符栈 OPND:操作符栈
3 使用如上分析表,构造分析算法(直观算符 优先分析法) 记号使用说明: #:语句括号(栈底 w后) θ:现行栈顶符 a:刚读入字符 OPTR:运算符栈 OPND:操作符栈
分析算法步骠: ①下一个输入符号读至a中; ②若a为i,则a一>OPND,转第一步; ③若日>,则调用关于0的处理程序(语义程序),处理子 表达式: E(1)0E(2);然后重新进入第3步;(其中,E)、E(2)分 别为OPND栈的次栈顶和栈顶) a E3) 8 E (2) (1) # OPTR OPND
分析算法步骤: ①下一个输入符号读至a中; ②若a为i,则a—>OPND,转第一步; ③若θ a,则调用关于θ的处理程序(语义程序),处理子 表达式 : E(1)θE(2) ;然后重新进入第3步;(其中,E(1) 、E(2)分 别为OPND栈的次栈顶和栈顶) a OPTR OPND # θ …… … E (1) E (2) => E(3)
☑若0三a,则 ·若0=‘(,a=)',则逐出OPTR栈顶的‘(?,放弃a中的‘)', 转第 1步; ·若0=a=‘#,分析成功结束; ⑤若0≤a,a一>OPTR栈,转第1步; ⑥0与不存在优先关条,则输入串错误,调出错处理 成功9 a (2) E(1) # OPTR OPND
④若θ a,则 •若θ=‘(’,a=‘)’ ,则逐出OPTR栈顶的‘(’ ,放弃a中的‘)’ , 转第 1步; •若θ=a=‘#’ ,分析成功结束; ⑤若θ a,a—>OPTR栈,转第1步; ⑥θ与a不存在优先关系,则输入串错误,调出错处理 ) OPTR OPND # ( …… … E (1) E (2) a θ # 成功!