编译原理:考虑文法G[S]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编译原理:考虑文法G[S]相关的知识,希望对你有一定的参考价值。
考虑文法G[S]:
S ® xSNy| Nx
N ® zN|ε
1、 求出该文法的每个非终结符的FIRST集和FOLLOW集;
2、构造该文法的LL(1)分析表。
考虑文法G[S]:
S -> xSNy| Nx
N -> zN|ε
1、 求出该文法的每个非终结符的FIRST集和FOLLOW集;
2、构造该文法的LL(1)分析表
(1)消去左递归后:
S→a|∧|(T)
T→ST’
T’ →,ST’|ε
(2)计算每个非终结符的FIRST集合和FOLLOW集合:
FIRST(S)=a,∧,(
FIRST(T)= a,∧,(
FIRST(T’)=,ε
FOLLOW(S)=,#
FOLLOW(T)= )
FOLLOW(T’)= )
预测分析表如下:
\\x09a\\x09∧\\x09(\\x09)\\x09,\\x09#
S\\x09S→a\\x09S→∧\\x09S→(T)\\x09\\x09\\x09
T\\x09T→ST’\\x09T→ST’\\x09T→ST’\\x09\\x09\\x09
T’\\x09\\x09\\x09\\x09T’ →ε\\x09T’ →,ST’\\x09
构造的预测分析表中没有多重入口,所以改造后的文法是LL(1)文法. 参考技术A 楼主啊,您这个文法根本就不是LL(1)文法嘛。是不是题目出错了啊?本回答被提问者采纳
编译原理 #05# Nonrecursive Predictive Parsing
// 实验存档
问题描述
有如下LL(1)文法
(1)E->TG
(2)G->+TG|-TG
(3)G->ε
(4)T->FS
(5)S->*FS|/FS
(6)S->ε
(7)F->(E)
(8)F->i
E为开始符号,实现一个非递归的预测分析器。
解决思路
1、根据以上文法,可知:
非终结符有E,G,T,S,F(共5个)
终结符有+,-,*,/,(,),i(加上$共8个)
用$表示输入终止。
2、构造一个预测分析表M:
+ | - | * | / | ( | ) | i | $ | |
E | ||||||||
G | ||||||||
T | ||||||||
S | ||||||||
F |
3、对每个产生式求FIRST,并填入预测分析表M的相应位置。
例如,对于G->+TG|-TG,应该将其拆分为G->+TG和G->-TG,
因为FIRST(+TG)={+},故将G->+TG填入M[G, +],同理将G->-TG填入M[G, -],
而对于G->ε,因为FOLLOW(G)={$},故将其填入M[G, $]。
若对于同一个产生式,求出FOLLOW集合,或者FIRST集合含有多个元素,则将同一个产生式填入表M的多处,
例如,对于E->TG,FIRST(TG)={(, i},则将该产生式填入M[E, (]和M[E, i]。
4、填完后是这个样子的:
+ | - | * | / | ( | ) | i | $ | |
E | E->TG | E->TG | ||||||
G | G->+TG | G->-TG | G->ε | |||||
T | T->FS | T->FS | ||||||
S | S->*FS | S->/FS | S->ε | |||||
F | F->(E) | F->i |
以上是关于编译原理:考虑文法G[S]的主要内容,如果未能解决你的问题,请参考以下文章