编译原理课程设计-算术表达式的语法分析及语义分析程序设计(共13页).doc
《编译原理课程设计-算术表达式的语法分析及语义分析程序设计(共13页).doc》由会员分享,可在线阅读,更多相关《编译原理课程设计-算术表达式的语法分析及语义分析程序设计(共13页).doc(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上设计题一:算术表达式的语法分析及语义分析程序设计。1.目的通过设计、编制、调试一个算术表达式的语法及语义分析程序,加深对语法及语义分析原理的理解,并实现词法分析程序对单词序列的词法检查和分析。2.设计内容及要求:算术表达式的文法:无符号整数数字数字标志符字母字母数字表达式项加法运算符项项因子乘法运算符因子因子标志符无符号整数(表达式)加法运算符乘法运算符选择算符优先分析方法完成以上任务,生成逆波兰式的中间代码;(1) 写出算术表达式的符合分析方法要求的文法,给出分析方法的思想,完成分析程序设计。(2) 编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。源
2、代码#define _CRT_SECURE_NO_WARNINGS#include stdio.h#include stdlib.h#include using namespace std;char data2020; /算符优先关系char s100; /模拟符号栈s char lable20; /文法终极符集char input100; /文法输入符号串char str2010; /用于输入串的分析int k,j;char a,q;int r; /文法规则个数int r1;int m, n, N; /转化后文法规则个数char st1030; /用来存储文法规则char first1010
3、; /文法非终结符FIRSTVT集char last1010; /文法非终结符LASTVT集int fflag10 = 0 ; /标志第i个非终结符的FIRSTVT集是否已求出int lflag10 = 0 ; /标志第i个非终结符的LASTVT集是否已求出int deal(); /对输入串的分析int terminal_symbol(char c); /判断字符c是否是终极符int location(char c); /求字符c在算符优先关系表中的下标void out(int j, int k, char *s); /打印s栈void firstvt(char c); /求非终结符c的FIR
4、STVT集void lastvt(char c); /求非终结符c的LASTVT集void table(); /创建文法优先关系表char output10;/存储逆波兰式void main()int i, j, k = 0;printf(请输入文法规则数:);scanf(%d, &r);printf(请输入文法规则:n);for (i = 0; ir; i+)scanf(%s, sti); /存储文法规则,初始化FIRSTVT集和LASTVT集*/ firsti0 = 0; /*firsti0和lasti0分别表示sti0非终极符的FIRSTVT集和LASTVT集中元素的个数*/lasti0
5、 = 0;for (i = 0; ir; i+) /判断文法是否合法for (j = 0; stij != 0; j+)if (sti0Z)printf(文法error!n);exit(-1);if (stij = A&stij = A&stij + 1 = Z)printf(文法error!n);exit(-1);for (i = 0; ir; i+)/for (j = 0; stij != 0; j+)if (stijZ) & stij != -&stij != &stij != |)lablek+ = stij;lablek = #;lablek + 1 = 0;table();/pri
6、ntf(FIRST集为:n); /输出每个非终结符的FIRST集for (i = 0; ir; i+)printf(%c: , sti0);for (j = 0; jfirsti0; j+)printf(%c , firstij + 1);printf(n);printf(LAST集为:n); /输出每个非终结符的LAST集for (i = 0; ir; i+)printf(%c: , sti0);for (j = 0; jlasti0; j+)printf(%c , lastij + 1);printf(n);printf(算符优先分析表如下:n);for (i = 0; lablei !=
7、 0; i+)printf(t%c, lablei);printf(n);for (i = 0; ik + 1; i+)printf(%ct, lablei);for (j = 0; jk + 1; j+)printf(%ct, dataij);printf(n);printf(请输入文法输入符号串以#结束:);scanf(%s, input);deal();cout 逆波兰式为:;for (i = 0; lablei != 0; i+)cout outputi 0;/cout endl;void table()char text2010;/存储改写后的文法int i, j, k, t, l,
8、 x = 0, y = 0;int m, n;x = 0;for (i = 0; ir; i+)firstvt(sti0);lastvt(sti0);for (i = 0; i;elsetextxy = stij;y+;textxy = 0;x+;y = 0;r1 = x;/printf(转化后的文法为:n);for (i = 0; ix; i+) /输出转化后的文法规则串printf(%sn, texti);for (i = 0; i后的转化文法,用于最后的规约)*/stri0 = texti0;for (j = 3, l = 1; textij != 0; j+, l+)stril = t
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 课程设计 算术 表达式 语法分析 语义 分析 程序设计 13
限制150内