编译原理:求first集算法
求first集算法
编译原理中,求first集算法用于计算非终结符的first集,即所有可能产生非终结符的字符串的第一个字符集。该算法通过递归遍历语法规则,收集非终结符及其产生式的first集,直到遍历所有规则。C语言实现:
#include
#include
#include
// 定义非终结符的最大个数
#define MAX_NON_TERMINALS 100
// 定义产生式的最大个数
#define MAX_PRODUCTIONS 1000
// 定义终结符的集合
char terminals[MAX_TERMINALS];
// 定义非终结符的集合
char non_terminals[MAX_NON_TERMINALS];
// 定义产生式的集合
struct Production {
char lhs; // 左部非终结符
char rhs[MAX_RHS_LENGTH]; // 右部产生式
};
struct Production productions[MAX_PRODUCTIONS];
// 定义first集的集合
char first_sets[MAX_NON_TERMINALS][MAX_FIRST_SET_SIZE];
// 标记非终结符是否已经求过first集
int visited[MAX_NON_TERMINALS];
// 求first集算法
void compute_first_sets() {
// 初始化visited数组
for (int i = 0; i < MAX xss=removed xss=removed xss=removed first_sets[non_terminal][i] = '0' xss=removed xss=removed xss=removed xss=removed first_sets[non_terminal][i] = 'epsilon' xss=removed xss=removed xss=removed xss=removed xss=removed>
4.76KB
文件大小:
评论区