




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验三 语义分析一、实习目的通过上机实习,加深对语法制时翻译原理的理解,掌握将语法分析所识别的语法成分变换为中间代码的语义翻译方法。二、实习要求采用递归下降语法制导翻译法对算术表达式、赋值语句、条件语句、循环语句进行语义分析生成四元式序列。三、实习过程实习代码;/* * JavaCC file */ options JDK_VERSION = 1.5; static=false;PARSER_BEGIN(whileParse)package whileparse;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.util.ArrayList;public class whileParse public int count=0; /*四元式标号*/ public static ArrayList sysList = new ArrayList(); public int ncount=0; /*临时变量下标*/ public static void main(String args) throws ParseException FileInputStream fileStream;try fileStream = new FileInputStream(data/test.c); whileParse parser = new whileParse(fileStream); System.out.println(Reading from standard input.); System.out.println(Enter c programe only main() with only while(); :); try switch (parser.start() case 0: System.out.println(OK.); break; case 1: System.out.println(Goodbye.); break; default: break; for(int i = 0; isysList.size(); i+) System.out.println(sysList.get(i); catch (Exception e) System.out.println(NOK.); System.out.println(e.getMessage(); parser.ReInit(System.in); catch (Error e) System.out.println(Oops.); System.out.println(e.getMessage(); catch (FileNotFoundException e1) e1.printStackTrace(); PARSER_END(whileParse) SKIP : |r|t|n| TOKEN : /* OPERATORS */|TOKEN : CONSTANT: ( )+ | TOKEN: | | | | | |TOKEN:| LOWER:| =| LOWERW:TOKEN: | | | | | int start() : Procedure() return 0; | return 1; /*处理主程序*/void Procedure(): (Content()* void Content():WhileStatement()|IfStatement()void WhileStatement(): Token node; int j1; int next; Sys newsys; next=count+1; Condition() count+; j1=count; newsys = new Sys(count+,J,_, _, j1+#); sysList.add(newsys); (WhileStatement()|IfStatement()*)* count+; newsys = new Sys(count+,J,_, _, next+); sysList.add(newsys); EditSys.huitian(sysList, j1+#, count+1+); void IfStatement(): Token node; int j1; int next; Sys newsys; next=count+1; Condition() count+; j1=count; newsys = new Sys(count+,J,_, _, j1+#); sysList.add(newsys); (IfStatement()|WhileStatement()*)* count+; newsys = new Sys(count+,J,_, _, next+); sysList.add(newsys); EditSys.huitian(sysList, j1+#, count+1+); String Expression() : String first; String middle; String temp=; Sys newsys; first=Term() temp=first; ( middle=Term() count+; temp=T+ncount; ncount+; newsys = new Sys(count+,+,first,middle,temp); sysList.add(newsys); first = temp; /first=Integer.parseInt(first)+Integer.parseInt(middle)+; | middle=Term() count+; temp=T+ncount; ncount+; newsys = new Sys(count+,-,first,middle,temp); sysList.add(newsys); first = temp; /first=Integer.parseInt(first)-Integer.parseInt(middle)+; )* return temp; /return first; String Term() : String first; String middle; String temp=; Sys newsys; first=unary() temp=first; ( ( middle= unary() count+; temp=T+ncount; ncount+; newsys = new Sys(count+,*,first,middle,temp); sysList.add(newsys); first = temp; /first=Integer.parseInt(first)*Integer.parseInt(middle)+; | middle=unary() count+; temp=T+ncount; ncount+; newsys = new Sys(count+,/,first,middle,temp); sysList.add(newsys); first = temp; /first=Integer.parseInt(first)/Integer.parseInt(middle)+; ) )* return temp; /return first; String unary() : String str; / str= element()return -Double.parseDouble(str)+; str= element()return str;String element() : String str;Token node; node=return node.image;| str=Expression()return str;int Condition(): Token node; int next; String first; String middle; Sys newsys; first=Expression()(node= middle=Expression() count+; next=count+1; newsys = new Sys(count+,j middle=Expression() count+; next=count+1; newsys = new Sys(count+,j,first,middle,next+1+); sysList.add(newsys); | node= middle=Expression() count+; next=count+1; newsys = new Sys(count+,j=,first,middle,next+1+); sysList.add(newsys); | node= middle=Expression() count+; next=count+1; newsys = new Sys(count+,j=,first,middle,next+1+); sysLis
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 元宇宙教育内容创新-洞察及研究
- (2025年标准)律师分手协议书
- (2025年标准)场地改造协议书
- (2025年标准)捐助校服协议书
- (2025年标准)合伙口头协议书
- (2025年标准)股份经营协议书
- (2025年标准)房子权属协议书
- (2025年标准)暑期工协议书
- 多股东合资企业合作协议书模板
- 2025年河北机关事业单位工人技能等级考试(制冷设备维修工·技师)历年参考题库含答案详解(5卷)
- GB/T 45089-20240~3岁婴幼儿居家照护服务规范
- 康复治疗颈椎病
- DB36T+2031-2024高弹沥青超薄罩面施工技术规范
- 2024桥式门式起重机大修项目及其技术标准
- 【部编】人教版六年级上册道德与法治全册知识点总结梳理
- 电动汽车V2G技术
- 2023风光互补路灯设计方案
- jgj592023安全检查标准完整版
- 2022年临沧市市级单位遴选(选调)考试试题及答案
- 中专宿舍管理制度和方法
- 屁屁辅助脚本
评论
0/150
提交评论