ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:200.55KB ,
资源ID:1128622      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-1128622.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(中南大学软件学院编译原理实验报告Word格式.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

中南大学软件学院编译原理实验报告Word格式.docx

1、读入一个单词后对照一开始的五类分析出是哪一类,符合后交给语法分析器处理。实现过程:import java.io.*;import java.util.ArrayList;/* * Created by 温 睿诚 on 2016/5/11/0011. */public class CiFa String keyword = /记录结果的符号表/用什么数据结构呢?/当前单词StringBuilder str = new StringBuilder();/下一个要读的字符char now;/一个栈Characterstack = new ArrayList0) return (Character)

2、stack.remove(stack.size() - 1).charValue(); else return 0; /错误信息String errorMsg;Reader reader = null; public static void main(String args) CiFa cifa = new CiFa();cifa.fenXi(args0);private void fenXi(String filename) /读取文件File file = new File(filename); try reader = new InputStreamReader(new FileInpu

3、tStream(file); catch (FileNotFoundException e) System.out.println(读取文件字符失败!e.printStackTrace();/不断读取字符直到结束getChar(); int result;/使用预测分析法YuFa yuFa = new YuCeFenXi(); boolean flag = true; while (!(now = 65535) /根据返回数值查找或插入,错误则打印并提示。正确则记录到mapresult = read(); if (result != 6) + result + , + str + if (!y

4、uFa.fenxi(result, str.toString() flag = false;System.err.println(语法分析出错!出错单词: + str.toString(); else System.err.println(+ errorMsg + str.delete(0, str.length();/结束boolean tempResult = false; if (yuFa != null) tempResult = yuFa.fenxi(6, # if (tempResult & flag)语法分析通过!/判断是否为数字private boolean isDigit()

5、 if (0 = now &now = 9)return true; else return false;/判断是否为字母private boolean isLetter() if (az) | (AZ)/赋值下一字符给now,返回true表示读到空格、换行等空白字符private boolean getChar() boolean flag = false;now = (char) reader.read(); while (now = 0 | now = t | now = rn | now = 32) flag = true; catch (IOException e) e.printS

6、tackTrace();return flag;/连接字符到单词private void concat() str.append(now);private boolean isSpilt() String temp = String.valueOf(now); for (String str : spilt) if (str.startsWith(temp) return false;private boolean inAL(String str, ArrayList strings) if (strings.contains(str)private boolean inShuzu(Strin

7、g str, String strings) for (String str1 :if (str.equals(str1) private boolean isYun() yunsuan) /词法分析器private int read() if (isLetter() /字母开始的,要么关键字,要么标识符,其用空格、tab、回车之类的分隔,/ 而标识符还可以用分割符号、运算符号分割。暂不判断标识符是否定义concat(); boolean flag;flag = getChar(); while (isDigit() | isLetter() & flag = false) concat();

8、if (inShuzu(str.toString(), keyword) return 1;if (!inAL(toString(), biaoshi) biaoshi.add(str.toString();return 2; else if (isDigit() /数字开头的,是常数,以空格、tab等以及分隔符、运算符分割 while (isDigit() return 3; else if (isSpilt() /分隔符,当出现、(时入栈,接收到、)时判断是否符合。单个字符,不需要分隔if (now = () put(); else if (now = char temp = pop();

9、 if (temp !errorMsg = 没有与匹配 return 6; else if (now = ) return 5; else if (isYun() /运算符,一般为单个符号,例外如下 if (now = getChar();=return 4;/ERROR无法识别+ now + 结果:对于文件:输出:等第二部分 语法分析(任选其中一个做实验)实验二 预测分析法设计与实现实验报告要求用文法的形式对语法定义做出详细说明,说明语法分析程序的工作过程,说明错误处理的实现。首先写出文法,然后作出预测分析表,再根据算法查表判断是否符合改文法。这是自己写的文法。模仿C+文法,但有不少局限性。

10、import java.util.Stack; * Created by 温 睿诚 on 2016/6/1/0001. * 预测分析法*/public class YuCeFenXi implements YuFa Stackstack;String t = String o = String k = String c = private static String map = new String1514;/横排 S A B C N D E F G H I J K L /对应 1 2 3 4 5 6 7 8 9 10 11 12 13 14 /竖排 t b z ( o ) , ; = k #

11、 /对应 1 2 3 4 5 6 7 8 9 10 11 12 13YuCeFenXi() /null即出错,空字符串即空字map11 = tb(A)NSmap113 = map21 = Bmap26 = map31 = tbCmap46 = map47 = ,tbCmap51 = tbD;Nmap52 = bI;map510 = k(E)NNmap512 = map67 = ,bDmap68 = map72 = bJmap73 = Fmap83 = zGmap95 = oHcHmap96 = map102 = bmap103 = zmap114 = (A)map119 = =Kmap124

12、= map125 = map126 = map132 = HLmap133 = map145 = oHLmap148 = stack = new Stack & temp L) | (temp = S) | temp = N/把非终结符转换为表中对应数字private int n2I(String str) char temp = str.charAt(0); switch (temp) case : case BCreturn 5; default:return temp - + 3;/把终结符转换为表中对应数字private int t2I(String str) tboreturn 6;

13、,return 7;return 8;return 9;kreturn 10;return 11;return 12;#return 13;return -1;private boolean inArray(String str, String array) for (String temp : array) if (str.equals(temp)public static boolean isNumeric(String str) for (int i = 0; i = 0; i-) stack.push(String.valueOf(chanshengshi.charAt(i);/这里写

14、语义分析return fenxi(type, str);对于输入文件:实验四 递归下降分析法设计与实现详细说明递归下降分析法程序的工作过程,并且详细说明你的程序的设计思路和实现。根据文法写几个函数即可。这是这次实验的文法(之前自己写的文法画出的LL(1)分析表实在太大了,画不下去就换了个实验做):/*文法ET+TTF*FFiF(E)实现:import java.util.Scanner; * Created by 温 睿诚 on 2016/6/12/0012.public class DiGuiDown ET+T Fi F(E)static Scanner scanner; static St

15、ring sym; static boolean flag = true;scanner = new Scanner(System.in);advance();E(); if (flag) 合法字符串非法字符串private static void advance() if (scanner.hasNext() sym = scanner.next();private static void E() T(); while (sym.equals() private static void T() F();private static void F() if (sym.equals(i if (sym.equals(/errorflag = false;此处应该输入 ) ,但输入了+ sym);此处应该输入 ( ,但输入了

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

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