- 5
- 0
- 约6.22千字
- 约 44页
- 2017-05-29 发布于四川
- 举报
4.4.3 算符优先关系表的构造 首先对文法每个非终结符A定义两个集合: FIRSTVT(A)={b | A b…或A Bb…, b∈VT , B∈VN } ? + ? + LASTVT(A)={a | A …a 或A …aB, a∈VT, B∈VN } ? + ? + 4.4.3 算符优先关系表的构造 使用这两个集合,构造文法G的优先关系表的算法如下: 输入:算符优先文法G 输出:关于文法G的优先关系表 4.4.3 算符优先关系表的构造 方法: 1.为每个非终结符A计算FIRSTVT(A)和LASTVT(A) 2 .执行程序 for ( 每个产生式 A→x1x2…xn ) for ( i=1; i = n-1 ; i++ ) { if ( xi和xi+1均?VT) 置 xi xi+1 = . if ( i = n-2 且 xi和xi+2 都?VT , 而xi+1?VN ) 置xi xi+2 = . if ( xi∈VT , xi+1∈VN ) for ( FIRSTVT(xi+1)中的每个b)置xi b; . if ( xi∈VN , xi+1∈VT ) for ( LASTVT(xi)中的每个a )置a xi+1; . } 4.4.3 算符优先关系表的构造 3. 对 FIRSTVT(S)中的所有b,置$ b; 对 LASTVT(S)中的所有a,置a $; . 置$ $。 = . (S为文法开始符号) . 4.4.3 算符优先关系表的构造 例 设有表达式的文法G[E]: E → E + T | T T → T * F | F F → (E) | id 构造该文法的算符优先关系表。 4.4.3 算符优先关系表的构造 首先计算每个非终结符的FIRSTVT和LASTVT: FIRSTVT(A)={b | A b…或A Bb…, b∈VT , B∈VN } ? + ? + LASTVT(A)={a | A …a 或A …aB, a∈VT, B∈VN } ? + ? + 4.4.3 算符优先关系表的构造 FIRSTVT LASTVT E T F E→E + T | T T→T * F | F F→(E) | id { *, +, (, id } { *, +, ), id } { *, (, id } { *, ), id } { (, id } { ), id } 4.4.3 算符优先关系表的构造 + * id ( ) $ + * id ( ) $ 执行算法,逐条扫描文法规则,因有F→(E)的规则,则有 ( ) = . = . 4.4.3 算符优先关系表的构造 + T 寻找终结符在左边,非终结符在右边的符号对有 则+ FIRSTVT(T) . * F . 则* FIRSTVT(F) . 则( FIRSTVT(E) ( E { *, (, id } { (, id } { *, +, (, id } 4.4.3 算符优先关系表的构造 + * id ( ) $ + * id ( ) $ . . . . . . . . . = . 4.4.3 算符优先关系表的构造 寻找非终结符在左边,终结在右边的符号对有 E + 则LASTVT(E) + . . 则LASTVT(T) * T * . 则LASTVT(E) ) E ) 有$ $; = . $ FIRSTVT(E); LASTVT(E) $ . . { *, ), id } { *, +, ), id } + * id ( ) $ + * id ( ) $ . . . . . . . . . . . . . . . . . . . . . . . . = . . . . . = . 4.4.3 算符优先关系表的构造 构造出文法G[E]的算符优系表如下: + * id (
原创力文档

文档评论(0)