已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验三 语法分析器的设计一、 实验内容设计、编写和调试构造LR(0)项目集规范簇或实现基于LR分析表对给定的符号串进行LR分析的程序。以下两个内容任选其中一项:(1) 对于给定的文法,实现构造识别该文法全部活前缀DFA的程序。(2) 对于给定的LR分析表和符号串,设计程序以实现所输入符号串是否为合法符号串。要求用JAVA语言编程。(可参考实验指导书P149至P156)二、 程序代码AnalysisOfGrammer.javapackage analysis;import javax.swing.*;import javax.swing.table.DefaultTableModel;import java.awt.*;import java.awt.event.*;import java.io.*;import java.util.LinkedList;public class AnalysisOfGrammer extends JAppletprivate JFileChooser jfc = new JFileChooser(new File(.);private JButton jbt1 = new JButton(打开文法文件);private JButton jbt2 = new JButton(构造LR规范簇);private JButton jbt3 = new JButton(构造LR分析表);private JButton jbt4 = new JButton(清空);private JButton jbt5 = new JButton(退出);private JLabel jl1 = new JLabel(LR(0)项目集规范簇);private JLabel jl2 = new JLabel(LR(0)分析表);private JPanel p3 = new JPanel();private JTextArea jta1 = new JTextArea();private String grammer = new String50;private int count = 0;private LinkedList list = new LinkedList();private Object content = new Object1004;int num1 = 0;String cache = new String50100;int location = new int50;int back = 0;public void clear1()grammer = null;public void clear2()num1 = 0;list = null;content = null;cache = null;location = null;back = 0;public AnalysisOfGrammer()JPanel p1 = new JPanel();p1.setLayout(new GridLayout(1,5);p1.add(jbt1);p1.add(jbt2);p1.add(jbt3);p1.add(jbt4);p1.add(jbt5);add(p1,BorderLayout.NORTH);JPanel p4 = new JPanel();p4.setLayout(new GridLayout(1,2);JPanel p2 = new JPanel();p2.setLayout(new BorderLayout();p2.add(new JLabel(文法为:),BorderLayout.NORTH);p2.add(new JScrollPane(jta1),BorderLayout.CENTER);p4.add(p2);p4.add(p3);add(p4,BorderLayout.CENTER);jbt1.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)jta1.setText();open(););jbt2.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)if(jta1.getText().equals()JOptionPane.showMessageDialog(null, 请打开文法文件!);elseDNF();list.get(1).setNextState(接受态);for(int k = 0 ; k +grammer0.substring(0, 1);flagnum1 = createI(start);/初态集建立locationnum1 = getleng(cachenum1);while(back = num1)if(c locationback & flagback = 0)num1+;list.get(back).setNextState(list.get(back).getNextState()+S+num1+ );flagnum1 = createI(cachebackc);locationnum1 = getleng(cachenum1);c+;elseback+;c = 0;public int createI(String t)/生成状态集int end = 0;String s = addPoint(t);String head = findNext(s);String state = S+num1;String nextsign=;String nextstate=;boolean gra = new booleancount;int c = 1;int loop = 0;for(int k = 0 ; cachek0 != null; k+)if(cachek0.equals(s)loop = k;end = 2;break;if(end = 2)/更改后继状态String old = list.get(back).getNextState();String sta = S+num1;String renew = ;int staleng = sta.length(); for(int k = 0 ; k old.length()-staleng+1; k+ )if(old.substring(k,k+staleng).matches(sta)|old.equals(归约)num1-;renew = old.substring(0,k-1)+S+loop+old.substring(k+staleng+1, old.length()+ ;list.get(back).setNextState(renew);break;else if(old.equals(归约)num1-;renew = old.substring(0,k-1)+S+loop+old.substring(k+staleng+1, old.length()+ ;list.get(back).setNextState(renew);break;return end;cachenum10 = s;String set = cachenum10 + ;if(num1 list.size()nextsign=list.get(num1).getNextSign();nextstate=list.get(num1).getNextState();set = list.get(num1).getProjectSet()+cachenum10 + ;if(findNext(s).equals(#)set = s;nextsign = #;nextstate = 归约;ViablePrefixe o = new ViablePrefixe(state,set,nextsign,nextstate);list.add(o);return 1;elsewhile(true)int i = 0;for(; i = count & head.equals(findNext(s).substring(0,1) break;else if(i = count)head = grammer0.substring(0,1);/while循环结束int cc = 0; /设置下一状态的值String nextS = new String50;for(int i = 0 ; cachenum1i!=null; i+)int j = 0;boolean f = false;for(; nextSj!=null;j+)if(findNext(cachenum1i).equals(nextSj)f = true; break;/for j 的循环结束,查找有无相同的后继符号,f作为标记,相同的符号跳过,不同的记录下来,放在nestS里if(f != true)nextScc+ = findNext(cachenum1j);nextsign = nextsign+findNext(cachenum1j)+ ;/for i 循环结束ViablePrefixe o = new ViablePrefixe(state,set,nextsign,nextstate);list.add(o);return end;public int show(String s, String grammer)/文法的拆分函数,显示在界面上,返回值是文法的条数boolean lastSign = false;/上一符号为nint flag1 = 0;/上一符号位置int count = 0;String str = s.substring(flag1, flag1+3);for(int i = 0 ; i s.length() ; i+)if(s.substring(i, i+1).equals(|)if(lastSign)grammercount+ = str + s.substring(flag1, i);elsegrammercount+ = s.substring(flag1, i);flag1 = i + 1;lastSign = true;else if(s.substring(i, i+1).equals(n)if(lastSign)grammercount+ = str + s.substring(flag1, i);elsegrammercount+ = s.substring(flag1, i);flag1 = i+1;if(flag1+3 s.length()str = s.substring(flag1, flag1+3);lastSign = false;else if(s.substring(i, i+1).equals(r)if(lastSign)grammercount+ = str + s.substring(flag1, i);elsegrammercount+ = s.substring(flag1, i);i+;flag1 = i+1;if(flag1+3 s.length()str = s.substring(flag1, flag1+3);lastSign = false;return count;private void open()/打开文件String s =;if(jfc.showOpenDialog(this) = JFileChooser.APPROVE_OPTION)s = open(jfc.getSelectedFile();count = show(s,grammer);for(int i = 0 ; grammeri!=null ; i+)jta1.append(grammeri);jta1.append(n);private String open(File file)/打开文件String content1 = ;tryBufferedInputStream in = new BufferedInputStream(new FileInputStream(file);byte b = new bytein.available();in.read(b,0,b.length);content1 = new String(b,0,b.length);in.close();catch(IOException ex)jta1.setText(Error opening + file.getName();return content1;private static String addPoint(String m)/在文法中添加.String t=;int i;for(i = 0 ; i m.length()-1)t = m.substring(0,3)+.+m.substring(3,m.length();return t;private static String findNext(String m)/返回.后的字母String c = #;for(int i = 0 ; i m.length()-1 ; i+)if(m.substring(i,i+1).equals(.)c = m.substring(i+1,i+2);return c;ViablePrefixe.javapackage analysis;public class ViablePrefixe /活前缀类private String state = ;/状态private String projectSet = ;/项目private String nextSign = ;/后继符号private String nextState = ;/后继状态public ViablePrefixe(String state,String projectSet,String nextSign,String nextState)this.state = state;jectSet = projectSet;this.nextSign = nextSign;this.nextState = nextState;public ViablePrefixe(String state,String projectSet,String nextSign)this.state = state;jectSet = projectS
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 专业技能培训教学互动方案
- 小学生阅读能力提升培训总结
- 旅游合同违约责任处理办法
- 小学足球比赛组织活动方案
- 企业培训计划设计工具包(可编辑版)
- 工地环保措施及监控方案
- 工厂车间绿色节能降耗管理方案
- 公司的股权激励方案解析
- 高效能办公自动化软件应用培训课件
- 2024年电商平台用户行为数据报告
- 2023年商务沟通与谈判的心得体会(四篇)
- GA/T 148-2019法医学病理检材的提取、固定、取材及保存规范
- 《智慧机场发展研究(论文)》
- 《糖尿病教学查房》课件
- DB4401-T 102.1-2020 建设用地土壤污染防治+第1部分:污染状况调查技术规范-(高清现行)
- 2022年公安基础知识考试试题及答案
- 低压电力电缆招标技术规格书
- 2021新苏教版六年级上册科学14探索宇宙-课件
- 动物遗传学遗传信息的改变
- 中国债券市场投资手册(2022)
- 光无源器件介绍
评论
0/150
提交评论