2、FirstVt、LastVt集的构造:
FirstVt(sen[][],first[][],sen_len,frist_len); LastVt(sen[][],last[][],sen_len,frist_len); 3、算符优先关系表OpPriotable的构造:
OpPriotable(sen,first,last,opTable,sen_len,first_len,&opTable_len); 4、算符优先分析过程的实现:
InputAnalyse(opTable[][col],string[col],opTable_len); 5、主函数:main()。
5
4.2 主要算法的流程图
读入.txt文件初始化存放产生式的数组判断是否为算符文法打印文法不是算符文法初始化操作栈操作栈是否为空N弹出栈顶填入FIRSTVT表Y反转构造LASTVT表构造算符优先关系表头产生式全扫描完?输入串分析当前输入符给a初始化分析栈SK=1,S[K]=#YN扫描产生式相邻符号构造算符优先关系表NOpTable[i][j]=’\\0’找离栈顶最近的终结符S[j]YS[j]aY找出离栈顶最近的S[j]
图4-1 算符优先分析法程序流程图
6
4.3 数据分析与定义
1、文法(产生式):文法使用产生式来定义
char sen[row][col]:用二维数组表示产生式; int sen_len:产生式的个数 ;
char first[row][col]:用二维数组构造FIRSTVT表 int first_len: Firstvt表的行数; 3、LASTVT集:
char last[row][col]:用二维数组构造LASTVT表; int frist_len:LASTVT表的行数;
char opTable[row][col]:用二维数组表示算符优先关系表; int opTable_len:算符优先关系表的行数和列数; char string[col]:用一维数组记录输入串; char S[SIZE]:用一维数组表示分析栈 ; char a:当前输入字符; typedef struct {
char nonterm; //非终结符 char term; //终结符
2、FIRSTVT集:
4、算符优先关系表:
5、算符优先分析表
6、其他数据结构:
}StackElement;
FIRSTVT表或LASTVT表中一个表项(A,a); {
StackElement *top; StackElement *bottom; int stacksize;
7、typedef struct
}stack;
以形如表项(A,a)为元素的栈,在构造FirstVt集的过程中用到;
4.4 系统界面设计
本实验没有考虑界面设计,将结果直接打印输出在DOS界面下。
7
5 测试方法和测试结果
5.1 测试用例1
测试目的:使用算符优先分析法对一个算符文法中的句子进行分析。
读入一个算符优先文法进行分析,给出文件路径
D:\\\\courses\\\\C_source_file\\\\成品\\\\算符优先文法1.txt。结果如下:
图5-1 测试用例1运行截图1
输入一个字符串,使得该字符串是该文法的一个句子。则输入字符串i+i*i/(i+i)#时运行结果为:
8
图5-2 测试用例1运行截图2
5.2 测试用例2
测试目的:使用算符优先分析法,分析一个字符串不是该文法的句子,并输入一个字符串,使得该字符串不是文法的句子。
9
输出出错信息。
百度搜索“70edu”或“70教育网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,70教育网,提供经典综合文库编译原理课程设计 - 算符优先分析法研究 - 附源程序(2)在线全文阅读。
相关推荐: