欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    合肥工业大学编译原理实验 词法分析设计Word格式文档下载.docx

    • 资源ID:7878479       资源大小:71.41KB        全文页数:15页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    合肥工业大学编译原理实验 词法分析设计Word格式文档下载.docx

    1、boolean isdigit(char c)-判断字符c是否是数字boolean isletter(char c)-判断字符c是否是字母boolean isline(char c)-判断字符c是否是下划线boolean remove()-用于在判断关系运算符时,判断是否是要再读一个字符void getbc()-检查空白直到读入字符非空白void getchar()-读入下一个字符void retract()-读入前一个字符void words()-识别字符串void num()-识别数字串void show(int i,String s,char a)-各种输出处理void change_r

    2、_l()-改变行列数void handle()-输入串处理int reserve(String s)-判断字符串s是否是保留字int reseverid(String s)-判断识别的标志符s是否已经在id表中int reseverci(String s)-判断识别的数字串s是否已经在ci表中int in_s(char c)-判断字符c是否在分界符表中int in_m(char c)-判断字符c是否在算术运算符表中int in_k(char b)-判断字符b是否在关系运算符中void readstr()-从命令行读入源程序void readtext()-从文本中读入源程序四、算法流程图五、源程

    3、序代码和测试的结果package package_two;import java.util.*;import java.io.*;public class word staticStringk=do,endforifprintfscanfthenwhileautobreakcasecharconstcontinuedefaultdoubleelseenumexternfloatgotointlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunionunsignedvoidvolatileinline;/1关键字static

    4、 char s=,;()/2分界符 static char m=+-*/3算术运算符 static String r=/4关系运算符 ArrayList ci=new ArrayList();/5常数 id=new ArrayList/6标识符 int pint;/搜索指示器 String strtoken=/存放构成单词符号的字符串 int row;/行数 int line;/列数 char ch;/存放最新读入源程序字符 String instring;/存放输入源程序 word()/初始化 instring=if i=0 for n+;na=48&c64&91)|(c96&123)ret

    5、urn true; boolean isline(char c)/判断字符c是否是下划线 if(c=_)return true; boolean remove()/用于在判断关系运算符时,判断是否是要再读一个字符 char b=instring.charAt(pint+1); if(b=|b=)/当其后的字符是=或时,要再读一个字符。否则不要再读。 return true; void getbc()/检查空白直到读入字符非空白 while(ch= ) getchar(); void getchar()/读入下一个字符 pint+; if(pint=instring.length()-1)/当指

    6、针没有越界时,可读字符 ch=instring.charAt(pint); if(ch=n)/当读到换行符时,行数加一,列数置一。再读下一个字符 change_r_l(); getchar(); else ch=/当指针越界时,置ch为空白符 void retract()/读入前一个字符 pint-; ch=instring.charAt(pint); void words()/识别字符串 strtoken=/先将strtoken置空 while(isletter(ch)|isdigit(ch)|isline(ch)/当是字母,数字,下划线时继续识别字符串 strtoken=strtoken+

    7、ch;/将新识别的字符加到strtoken后 void num()/识别数字串/先将strtoken置空 while(isdigit(ch)/当数字时继续识别数字串 if(isletter(ch)|isline(ch)/识别完数字串而其后是字母,下划线时出错处理 while(isletter(ch)|isline(ch)|isdigit(ch)/当是字母,数字,下划线时继续识别错误数字串 strtoken=strtoken+ch; show(0,strtoken,/输出错误数字串 strtoken=/将strtoken置空返回 void show(int i,String s,char a)/

    8、各种输出处理 switch(i) case -1:System.out.println(a+ +Error Error (+row+line+) break; case 0:System.out.println(s+ case 1:(1,+s+ 关键字 case 2:(2,+a+ 分界符 case 3:(3, 算术运算符 case 4:(4, 关系运算符 case 5:(5, 常数 case 6:(6, 标识符 line+;/列数加一 void change_r_l()/改变行列数 row+; void handle()/输入串处理/将搜索指示器置-1要处理的语句为 :+instring);

    9、getchar();/读入一个字符 while(pintinstring.length()/当搜索指示器没有越界时 getbc();/检查空白直到读入读入非空 if(isdigit(ch)/当ch为数字时进行数字串识别 num();/数字串识别 if(strtoken.length()!=0)/经过数字串识别后,如果strtoken不为空 if(reseverci(strtoken)=-1)/如果strtoken不在ci表中,将strtoken加入ci表中 ci.add(strtoken);/将strtoken加入ci表中 show(5,strtoken,/输出数字串 / System.out

    10、.println(one.strtoken+是第+(one.ci.size()-1)+个常数 else /如果strtoken在ci表中,仅输出 /System.out.println(one.strtoken+one.reseverci(one.strtoken)+个已经识别的常数 /拼出数字串 else if(isletter(ch)/当ch为字母时进行字符串识别 words();/字符串识别 if(reserve(strtoken)=-1)/如果strtoken不在k表中 if(reseverid(strtoken)=-1)/如果strtoken不在id表中 id.add(strtoke

    11、n);/将strtoken加入id表中 show(6,strtoken,/输出标识串 / System.out.println(one.strtoken+(one.id.size()-1)+个标识符 else /如果strtoken在id表中+one.reseverid(one.strtoken)+个已经识别的标识符 else /如果strtoken在k表中+one.reserve(one.strtoken)+个关键字 show(1,strtoken,/输出关键字 /拼出字符串 else if(in_s(ch)!=-1) /分界符处理包含在one.in_s(one.ch)中 else if(i

    12、n_m(ch)! /算术运算符处理包含在one.in_m(one.ch)中 else if(in_k(ch)! /关系运算符处理包含在one.in_k(one.ch)中 else show(-1, ,ch);/error/读下一位 int reserve(String s)/判断字符串是否是保留字 int i; for(i=0;ik.length;i+) if(s.equals(ki) return i;/是保留字,就返回编码 return -1;/不是保留字,就返回-1 int reseverid(String s)/判断识别的标志符是否已经在id表中id.size(); if(s.equa

    13、ls(id.get(i)/识别的标志符已经在id表中,返回位置/识别的标志符不在id表中,返回-1 int reseverci(String s)/判断识别的数字串是否已经在ci表中ci.size(); if(s.equals(ci.get(i)/识别的数字串已经在ci表中,返回位置/识别的数字串不在ci表中,返回-1 int in_s(char c)/查找分界符s.length;i+) if(c=si)/与某个分界符配备时 / System.out.println(c+是分界符表中的第+i+个分界符 show(2, ,c);/输出分界符/返回所在位置/不在分界符表中 int in_m(cha

    14、r c)/查找算术运算符m.length; if(c=mi)/与某个算术运算符配备时是算术运算符表中的第个算术运算符 show(3, /输出算术运算符/不在算术运算符表中 int in_k(char b)/查找关系运算符 if(remove()=false)/读下一位为假时,进行一位关系运算符识别 for(i=0;r.length; if(ri.length()=1)/当关系运算符为一位时,尝试匹配 if(ri.equals(Character.toString(b) / System.out.println(b+是关系运算符表中的第个关系运算符 show(4, ri,/输出关系运算符 ret

    15、urn i; else/读下一位为假时,进行两位关系运算符识别 char a=new char2;/将两位字符放入a中 a0=b; a1=ch; if(ri.length()=2)/当关系运算符为两位时,尝试匹配 if(ri.equals(String.copyValueOf(a) / System.out.println(String.copyValueOf(a)+ show(4, ri, retract();/两位关系运算符匹配失败,读入前一个字符/不在关系运算表中 void readstr()throws Exception/从命令行读入源程序 BufferedReader sin=ne

    16、w BufferedReader(new InputStreamReader(System.in);/从命令行输入的输入流 BufferedWriter fw=new BufferedWriter(new FileWriter (E:+ File.separator +fun.txt); /输出流,输出到fun.txt instring=sin.readLine(); while(instring.length()!=0)/将从命令行的输入写入fun.txt fw.write(instring); fw.newLine(); handle();/处理读入的源程序 instring=sin.re

    17、adLine(); fw.close(); void readtext()throws Exception/从文本读入源程序 BufferedReader f =new BufferedReader(new FileReader ( instring=f.readLine(); while(instring!=null) handle();/处理读入的源程序 change_r_l(); instring=f.readLine(); f.close();测试方法和测试的结果测试方法:可用程序默认源程序或调用readstr()从命令行输入源程序或调用readtext()从指定文本中读入源程序测试的结果六、实验的评价、收获与体会


    注意事项

    本文(合肥工业大学编译原理实验 词法分析设计Word格式文档下载.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开