西南交大-编译原理课程设计二-赋值语句地解释程序设计.docx

西南交大-编译原理课程设计二-赋值语句地解释程序设计.docx

  1. 1、本文档共32页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

5566www + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:6122115144000002

1亿VIP精品文档

相关文档