没有合适的资源?快使用搜索试试~ 我知道了~
首页《编译原理》课程设计指导书 算术表达式的语法分析及语义分析程序设计。
《编译原理》课程设计指导书 算术表达式的语法分析及语义分析程序设计。
4星 · 超过85%的资源 需积分: 16 44 下载量 77 浏览量
更新于2023-03-16
评论 8
收藏 65KB DOC 举报
1.目的 通过设计、编制、调试一个算术表达式的语法及语义分析程序,加深对语法及语义分析原理的理解,并实现词法分析程序对单词序列的词法检查和分析。 2.设计内容及要求: 算术表达式的文法: 〈无符号整数〉∷= 〈数字〉{〈数字〉} 〈标志符〉∷= 〈字母〉{〈字母〉|〈数字〉} 〈表达式〉∷= [+|-]〈项〉{〈加法运算符〉〈项〉} 〈项〉∷= 〈因子〉{〈乘法运算符〉〈因子〉} 〈因子〉∷= 〈标志符〉|〈无符号整数〉|‘(’〈表达式〉‘)’ 〈加法运算符〉∷= +|- 〈乘法运算符〉∷= *|/ 可以选择递归下降法、LL(1)、算符优先分析法、LR法完成以上任务,中间代码选用逆波兰式或四元式。 写出算术表达式的符合分析方法要求的文法,给出分析方法的思想,完成分析程序设计。 编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。
资源详情
资源评论
资源推荐
算术表达式的语法及语义分析程序
设计概述
1.1设计题目
算术表达式的语法及语义分析程序设计。
1.2设计目的
通过设计、编制、调试一个算术表达式的语法及语义分析程序,加深对语法语
义分析原理的理解,并实现词法分析程序对单词序列的词法检查和分析。
1.3设计任务内容
(1)利用递归下降分析方法和思想对某些语句进行语法分析与语义分析,生成
相应的中间代码。
(2)学会正确运用语法规则,并能应用所学的方法解决存在的问题,给出语法
分析方法及中间代码形式的描述、文法和属性文法的设计。
2设计环境与工具
本课程设计程序采用 VC++开发,其可执行文件能在 Window 界面上运行
良好。
3设计原则
3.1语法分析方法
采用递归下降分析方法进行语法分析。
3.2中间代码形式描述
在描述中间代码的时候,应用四元式。
3.3文法和属性文法设计
算术表达式的文法:
〈无符号整数〉∷= 〈数字〉{〈数字〉}
〈标识符〉∷= 〈字母〉{〈字母〉|〈数字〉}
〈表达式〉∷= [+|-]〈项〉{〈加法运算符〉〈项〉}
〈项〉∷= 〈因子〉{〈乘法运算符〉〈因子〉}
〈因子〉∷= 〈标识符〉|〈无符号整数〉|‘(’〈表达式〉‘)’
〈加法运算符〉∷= +|-
〈乘法运算符〉∷= *|/
4简要分析与概要设计
4.1简要分析
首先应该把用文字表示的文法改写为数学符号。(其中关于无符号整数和标
识符,由于可以在词法分析的过程中给以确定,所以就不必抽象其表达式。)
设:
indentifer:标识符 digit :无符号整数
E: 表达式 T:项 F:因子
则一个简单的术表达式的文法 G1 中包含以下产生式:
E -> E+E | E-E | E*E | E/E | (E) | indentifer | digit
为了明确运算符的优先权(括号的优先权高于乘除法,乘除法的优先权高于加
减法),可改写文法 G1 如下:
改写后的文法 G2:
E -> E+T | E-T | T
T -> T*F | T/F | F
F -> (E) |indentifer | digit
为了避免左递归的发生,可进一步将文法改成:
文法 G[E]:
(1)E -> [+|-]TG
(2)G -> +TG|—TG
(3)G ->ε
(4)T -> FS
(5)S -> *FS|/FS
(6)S ->ε
(7)F -> (E)
(8)F -> indentifer | digit
4.2概要设计
由于程序在执行的过程中分为词法、语法、语义,故在程序设计的时候也按
照这种方式,把整个程序分成三个大的部分,即词法分析部分,语法分析部分
和语义分析部分。而且在各个部分的内部采用模块化设计,再分成各个小块,
各自完成其相对应的功能。
5源程序清单
void yuyi_main()//语义分析主函数
{
cifa_p = cifa_head;
yuyi_head = new yuyi;
yuyi_head -> next = NULL;
yuyi_end = yuyi_head;
cout<<endl;
yufa_zfc_disp(cifa_head->next);
cout<<"语义分析产生的四元式如下:"<<endl;
cout<<endl<<"-----------------------------------------------------"<<endl;
advance();
E1();
yuyi_sys_disp();
cout<<endl<<"----------------语义分析结束--------------------"<<endl;
}
//*********************************主函数************************************
void main()//主函数
{
int len;
int f=1;
cout<<endl<<"请输入一个算术表达式(请在一行内完成输入且每个项的长度不大于
10):"<<endl;
gets(str);
len = strlen(str);
str[len] = '^';
cout<<endl;
system("pause");
cout<<endl;
cout<<"***********************词法分析开始*****************"<<endl;
f = cifa_main();
if ( f == 0 ) return;
cout<<endl;
system("pause");
cout<<endl;
cout<<"***********************语法分析开始*****************"<<endl;
f = yufa_main();
if (f== 0) return;
cout<<endl;
system("pause");
cout<<endl;
cout<<"********************语义分析开始*********************"<<endl;
yuyi_main();
cout<<endl;
system("pause");
cout<<endl;
}
int F1()//F -> (E) | 标识符 | 无符号整数
{
if ((strcmp(cifa_p->word,"(") == 0 ) )
{
advance();
strcpy(F_name,cifa_p->word);
strcpy(E_name,F_name);
E1();
if ((strcmp(cifa_p->word,")") == 0 ) )
{
advance();
strcpy(F_name,E_name);
return (1);
}
else
{
cout<<"ERROR"<<endl;
return (0);
}
}
else if ( cifa_p->type == 1 || cifa_p->type == 2)
{
strcpy(F_name,cifa_p->word);
advance();
return (1);
}
else return 0;
}
int T1()//T -> F*T | F/T | F
{
yuyi *p = new yuyi;
F1();
strcpy(p->op1,F_name);
if (strcmp(cifa_p->word,"*") == 0)
{
advance();
T1();
p->next =NULL;
p->op = '*';
strcpy(p->op2,T_name);
T_name[0] = 't';
T_name[1] = ++count;
T_name[2] = '\0';
strcpy(p->result,T_name);
yuyi_add(p);
return(1);
}
else if (strcmp(cifa_p->word,"/") == 0)
{
advance();
T1();
p->next =NULL;
p->op = '/';
strcpy(p->op2,T_name);
T_name[0] = 't';
T_name[1] = ++count;
T_name[2] = '\0';
strcpy(p->result,T_name);
yuyi_add(p);
return(1);
}
else
{
strcpy(T_name,F_name);
return(1);
}
}
剩余21页未读,继续阅读
子_书
- 粉丝: 0
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
- MW全能培训汽轮机调节保安系统PPT教学课件.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论1