📄 main.cpp
字号:
#include "RuleSet.h"
#include <windows.h>
#include <stdio.h>
#include <conio.h>
struct TEMP_RULE
{
SIGN Left;
SIGN* Right;
};
int main(int argc,char *argv[])
{
int i,len;
// 例【4.8】 第 87 页
/*
int RULE_NUM = 10;
TEMP_RULE TempRule[]=
{
'S', "AB",
'S', "bC",
'A', "b",
'A', "",
'B', "aD",
'B', "",
'C', "AD",
'C', "b",
'D', "aS",
'D', "c"
};
*/
// 例【4.9】第 90 页
int RULE_NUM = 6;
TEMP_RULE TempRule[]=
{
'S', "BA",
'A', "BS",
'A', "d",
'B', "aA",
'B', "bS",
'B', "c"
};
// 例【4.19】第 104 页
// S == E E == E' U == T'
/*
int RULE_NUM = 8;
TEMP_RULE TempRule[]=
{
'S', "TE",
'E', "+TE",
'E', "",
'T', "FU",
'U', "*FU",
'U', "",
'F', "i",
'F', "(S)"
};
*/
RULE Rule;
RULE_SET RuleSet;
SIGN_SET TempSet,ResultSet;
TABLE SelectTable;
for(i = 0; i < RULE_NUM; i++)
{
Rule.Left = TempRule[i].Left;
strcpy(Rule.Right,TempRule[i].Right);
RuleSet.AddRule(Rule);
}
RuleSet.SetStartSign('S');
printf("\n***************** FIRST 集 *****************\n");
TempSet.Reset();
for(i = 0; i < RULE_NUM; i++)
{
Rule = RuleSet.GetRule(i);
if (TempSet.AppendSign(Rule.Left))
{
ResultSet = RuleSet.GetFIRSTSignSet(Rule.Left);
printf("\n符号 %c 的 FIRST 集是: ",Rule.Left);
ResultSet.Output();
}
}
RuleSet.CalcFOLLOWSet();
printf("\n***************** FOLLOW 集 *****************\n");
len = TempSet.GetSignNum();
for(i = 0; i < len; i++)
{
printf("\n符号 %c 的 FOLLOW 集是: ",TempSet[i]);
ResultSet = RuleSet.GetFollowSet(TempSet[i]);
ResultSet.Output();
}
printf("\n***************** SELECT 集 *****************\n");
RuleSet.CalcSELECTSet();
printf("\n***************** 预测分析表 *****************\n");
SelectTable = RuleSet.CreateSELECTTable();
SelectTable.Output();
printf("\n请按回车键退出......");
while(getch()!=13);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -