编译原理:求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>
cpp 文件大小:4.76KB