本实验为软件学院编译原理课程的一部分,主要内容是通过编程实现对文法符号的First集与Follow集进行计算。学生将深入理解这些基本概念,并应用它们来辅助词法分析器及语法分析器的设计。此次实践操作旨在增强学生理论联系实际的能力和动手能力。
第三次上机作业要求编写First和Follow函数,并实现其求解过程。
1. First集合的计算方法:
- 如果X→a...(其中a是终结符),则将终结符a加入到FIRST(X)中。
- 如果X→ε,则将ε加入到FIRST(X)中。
- 若X→Y...,且Y是非终结符,则将FIRST(Y)\{ε}(即去除掉ε后的元素)加入到FIRST(X)中。
- 当X→Y1 Y2 ... YK,并且Y1, Y2,... Yi-1都是非终结符,同时它们的FIRST集合都包含ε时,应将所有在FIRST(Yj)\{ε}中的元素添加至FIRST(X),其中j=1, 2... i。特别地,如果Y1到YK都有产生式ε,则需把ε加入到FIRST(X)中。
2. Follow集合计算方法:
- 对于文法的开始符号S,将$(表示输入结束)放入FOLLOW(S)。
- 如果存在A→αBβ的形式,并且其中α可以为空字符串,则应将FIRST(β)\{ε}加入到FOLLOW(B)中。
- 若有A→α B 或 A → α B β 的形式,同时满足条件:β推导出空串(即ε属于FIRST(β)),则需把 FOLLOW(A)中的所有元素添加至FOLLOW(B)。
测试文法如下:
```
A -> BCDE
B -> aBA | ε
C -> F | ε
D -> b | c | ε
E -> e | ε
F -> d | ε
```