编译原理 文法First集Follow集求解算法动态演示
时间: 2023-11-10 13:30:33 浏览: 85
编译原理JAVA求First集Follow集
5星 · 资源好评率100%
文法的First集和Follow集是编译原理中的重要概念,它们可以用来帮助分析和处理文法,对于学习编译原理的同学来说是非常重要的。下面是一个简单的算法来求解文法的First集和Follow集:
1. First集求解算法动态演示
输入:文法G
输出:文法G的所有非终结符和对应的First集
步骤:
1. 初始化每个非终结符的First集为空集
2. 对于文法G中的每个终结符a,将a加入到对应的非终结符的First集中
3. 对于文法G中的每个产生式A -> B1B2...Bn,按照以下规则求出A的First集:
a. 如果B1是终结符或者空串,则将B1加入到A的First集中
b. 如果B1是非终结符,则将B1的First集中除空串之外的所有元素加入到A的First集中
c. 如果B1可以推出空串,则将B2的First集中除空串之外的所有元素加入到A的First集中
d. 重复上述过程,直到Bn的First集被处理完毕
4. 返回所有非终结符的First集
2. Follow集求解算法动态演示
输入:文法G和开始符号S
输出:文法G的所有非终结符和对应的Follow集
步骤:
1. 初始化每个非终结符的Follow集为空集
2. 将S的Follow集中加入$符号
3. 对于文法G中的每个产生式A -> B1B2...Bn,按照以下规则求出B1、B2、...Bn的Follow集:
a. 如果B1是非终结符,则将A的Follow集中除空串之外的所有元素加入到B1的Follow集中
b. 如果B1可以推出空串,则将A的Follow集中的所有元素加入到B2的Follow集中,重复此过程直到Bn的Follow集被处理完毕
c. 如果B1是终结符,则无需处理
4. 对于文法G中的每个产生式A -> B1B2...Bn,按照以下规则求出B2、B3、...Bn的Follow集:
a. 如果Bi是非终结符,则将Bi+1的First集中除空串之外的所有元素加入到Bi的Follow集中
b. 如果Bi可以推出空串,则将A的Follow集中的所有元素加入到Bi的Follow集中,重复此过程直到Bn的Follow集被处理完毕
c. 如果Bi是终结符,则无需处理
5. 返回所有非终结符的Follow集
阅读全文