- 1、本文档共32页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《编译原理》
课程设计
赋值语句的解释程序设计
姓名:汤朋
学号:2014112217
班级:软件四班
时间:2017/6/13
学期: 2016-2017 第一学期
1
1. 设计题目:
赋值语句的解释程序设计
2. 设计内容:
用算符优先分析方法设计一个分析解释程序, 对输入的赋值语句、
输出语句、清除语句进行词法分析、语法分析、表达式求值并存
储于指定变量中:若存在错误,提示错误相关信息。
3. 设计目的:
a) 了解掌握算符优先分析的基本方法、内容
b) 学会科学思考并解决问题,提高程序设计能力
4. 实现环境
电脑:
Windows10 家庭中文版
型号:雷神
处理器:Intel(R) Core(TM) i7-6700HQ CPU @2.60GHz
RAM:16.0GB(15.9GB可用)
系统类型: 64 位操作系统,基于 x64 的处理器
实现语言及环境:
Java,JDK 1.8
IDE:Ecpliseneon.1
5. 概要设计
文法表示:
S v=E|E?|clear
2
E E+T|E-T|T
T T*F|T/F|F
F (E)|v|c
归约规则:
N v=N|N?|clear
N N +N |N -N |N
N N *N |N /N |N
N (N)|v|c
种别码设计:
单词符号 种别码
= 1
? 2
+ 3
- 4
* 5
/ 6
( 7
) 8
v 9
c 10
3
clear 11
# 12
N 13
优先关系表
1 2 3 4 5 6 7 8 9 10 11 12
= ? + - * / ( ) v c clear #
1 = < < < < < < < >
2 ? >
3 + > > > < < < > < < >
4 - > > > < < < > < < >
5 * > > > > > < > < < >
6 / > > > > > < > < < >
7 ( < < < < < = < < >
8 ) > > > > > > >
9 v = > > > > > > >
10 c > > > > > > >
11 clear >
12 # < < < < < < < < < < < =
4
开始
输入单词符
号串
初始化栈 stack; 设
指针 pointer = 0;
将串的第一个单词
符号#二元组压入
stack;pointer++
Stack.size() ==
3 &&
stack.pop().getC
ode() == 12
N
Pointer <
stack.size()?
N
Y
栈顶终结符优
先级小于等于
pointer 所指终
结符?
Y
将pointer 所指终结
符的单词符号入
栈;pointer++
stack.pop().getC
ode() == 13&&
stack.pop().getC
ode() == 12
N
N
栈顶终结符优
先级大于
pointer 所指终
结符?
Y
rightPos = leftPos =
pointer-1;
leftPos--;
N
输出表达式错误
输出在
input.charAt(pointe
r)附近语法错误
Stack.get(rightP
os).getCode ==
13?
Y
rightPos--;
leftPos--;
N
Stack.get(leftPo
s).getCode ==
Y leftPos--;
13?
N
N
Y
清空stack和变量表
Stack.get(leftPo
s) euqals
stack.get(rightP
os)?
Y rightPos = leftPos;
N
leftPos++;
leftPos ==
pointer-1?
Pointer-leftPos-
N Y
1==2?
输出
stack.get(leftPos).g
etValue();stack.pop
();
结束
Y
N
清空变量表 Y
Stack.get(leftPo
s).getCode()==1
1?
Pointer-leftPos-
1==3?
Y
报错:表达式有
错!
结束
N
N
报错:变量
stack.get(leftPos).g
etValue()未定义
N
变量
stack.get(leftPo
s).getValue()存
在变量表中?
Y
Stack.get(leftPo
s).getCode()==9
?
Stack.get(leftPo
s).getCode()==9
?
变量
Stack.get(leftPo
Y Y
s).getValue是否
存在?
更新变量表中的值
N
Y
N
修改栈顶元素的种
别码为 13,设其值
为该变量的值
文档评论(0)