实验二 LL1语法分析器.doc

上传人:11****ws 文档编号:3197586 上传时间:2019-05-25 格式:DOC 页数:28 大小:498KB
下载 相关 举报
实验二 LL1语法分析器.doc_第1页
第1页 / 共28页
实验二 LL1语法分析器.doc_第2页
第2页 / 共28页
实验二 LL1语法分析器.doc_第3页
第3页 / 共28页
实验二 LL1语法分析器.doc_第4页
第4页 / 共28页
实验二 LL1语法分析器.doc_第5页
第5页 / 共28页
点击查看更多>>
资源描述

1、实验二 LL(1)分析法一、实验目的通过完成预测分析法的语法分析程序,了解预测分析法和递归子程序法的区别和联系。使学生了解语法分析的功能,掌握语法分析程序设计的原理和构造方法,训练学生掌握开发应用程序的基本方法。有利于提高学生的专业素质,为培养适应社会多方面需要的能力。二、实验内容 根据某一文法编制调试 LL ( 1 )分析程序,以便对任意输入的符号串进行分析。 构造预测分析表,并利用分析表和一个栈来实现对上述程序设计语言的分析程序。 分析法的功能是利用 LL(1)控制程序根据显示栈栈顶内容、向前看符号以及 LL(1)分析表,对输入符号串自上而下的分析过程。 三、 LL( 1)分析法实验设计思

2、想及算法 模块结构:(1)定义部分:定义常量、变量、数据结构。(2)初始化:设立 LL(1)分析表、初始化变量空间(包括堆栈、结构体、数组、临时变量等) ;(3)控制部分:从键盘输入一个表达式符号串;(4)利用 LL(1)分析算法进行表达式处理:根据 LL(1)分析表对表达式符号串进行堆栈(或其他)操作,输出分析结果,如果遇到错误则显示错误信息。四、实验要求1、编程时注意编程风格:空行的使用、注释的使用、缩进的使用等。2、如果遇到错误的表达式,应输出错误提示信息。 3、对下列文法,用 LL(1)分析法对任意输入的符号串进行分析: (1)E-TG(2)G-+TG|TG(3)G-(4)T-FS(5

3、)S-*FS|/FS(6)S-(7)F-(E)(8)F-i输出的格式如下:5、实验源程序LL1.javaimport java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.table.DefaultTableModel;import java.sql.*;import java.util.Vector;public class LL1 extends JFrame implements ActionListener/* */private static final long serialVersio

4、nUID = 1L;JTextField tf1;JTextField tf2;JLabel l;JButton b0;JPanel p1,p2,p3;JTextArea t1,t2,t3;JButton b1,b2,b3;JLabel l0,l1,l2,l3,l4;JTable table;Statement sta;Connection conn;ResultSet rs;DefaultTableModel dtm;String Vn=null;Vector P=null;int firstComplete=null;/存储已判断过first 的数据char first=null;/存储最

5、后first结果int followComplete=null;/存储已判断过 follow的数据char follow=null;/存储最后follow结果char select=null;/存储最后select结果int LL=0;/标记是否为LL (1 )String vt_tou=null;/储存VtObject shuju=null;/存储表达式数据char yn_null=null;/存储能否推出空LL1() setLocation(100,0);setSize(700,780);tf1=new JTextField(13);tf2=new JTextField(13);l=new

6、 JLabel(“);l0=new JLabel(“输入字符串:“);l1=new JLabel(“输入的文法为: “);l2=new JLabel(“ “);l3=new JLabel(“分析的结果: “);l4=new JLabel(“预测分析表: “);/p1=new JPanel();p2=new JPanel();p3=new JPanel();t1=new JTextArea(24,20);t2=new JTextArea(1,30);t3=new JTextArea(24,40);b0=new JButton(“确定(S为开始)“);b1=new JButton(“ 判断文法 “

7、);b2=new JButton(“输入“ );b3=new JButton(“清空“ );table=new JTable();JScrollPane jp1=new JScrollPane(t1);JScrollPane jp2=new JScrollPane(t2);JScrollPane jp3=new JScrollPane(t3);p2.add(tf1);p2.add(l);p2.add(tf2);p2.add(b0);p2.add(b1);p2.add(l0);p2.add(l2);p2.add(jp2);p2.add(b2);p2.add(b3);p2.add(l1);p2.a

8、dd(l3);p2.add(jp1);p2.add(jp3);p3.add(l4);p3.add(new JScrollPane(table);add(p2,“Center“);add(p3,“South“);b0.addActionListener(this);b1.addActionListener(this);b2.addActionListener(this);b3.addActionListener(this);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);table.setPreferredScrollableViewportSize

9、(new Dimension(660,200);setVisible(true);public void actionPerformed(ActionEvent e)if(e.getSource()=b0)String a=tf1.getText();String b=tf2.getText();t1.append(a+b+n); if(e.getSource()=b1)t3.setText(“);int Vnnum=0,k;Vn=new String100;P=new Vector();String s=t1.getText().split(“n“);for(int i=0;i=Ak=Vnn

10、um)VnVnnum=si.substring(0, 1);/存入Vn 数据Vnnum+;P.add(si);elset3.setText(“文法输入有误,请重新输入“);return;yn_null=new char100;first=new charVnnum100;int flag=0;String firstVn=null;firstComplete=new intVnnum;for(int i=0;Vni!=null;i+) /依次求 FIRST*flag=0;firstVn=new String20;if(flag=add_First(firsti,Vni,firstVn,flag

11、)=-1)return;firstCompletei=1;t3.append(“first集:“ +“n“); /显示FIRST*for(int i=0;Vni!=null;i+)t3.append(“first(“+Vni+“)= “);for(int j=0;firstij!=0;j+)t3.append(firstij+“ , “);t3.append(“+“n“);follow=new charVnnum100;String followVn=null;followComplete=new intVnnum;for(int i=0;Vni!=null;i+) /求FOLLOW*flag

12、=0;followVn=new String20;if(flag=tianjiaFollow(followi,Vni,followVn,flag)=-1)return;followCompletei=1;t3.append(“follow集:“+“n“ ); /显示FOLLOW*for(int i=0;Vni!=null;i+)t3.append(“follow(“+Vni+“)= “);for(int j=0;followij!=0;j+)t3.append(followij+“ , “);t3.append(“+“n“);select=new charP.size()100;for(int

13、 i=0;iZ|t.charAt(j)A)if(puanduanChar(Vt,t.charAt(j)Vtbiaozhi=t.charAt(j);biaozhi+;if(puanduanChar(Vt,#)/若可推出空集,则将# 加入Vt。Vtbiaozhi=#;biaozhi+;vt_tou=new Stringbiaozhi+1;/根据select和表达式生成预测分析表shuju=new StringVnnumbiaozhi+1;String f=“;vt_tou0=f;for(int i=0;ibiaozhi;i+)vt_toui+1=String.valueOf(Vti);for(in

14、t i=0;iVnnum;i+)shujui0=Vni;for(int i=0;iP.size();i+)String t=(String)P.elementAt(i);int j;for(j=0;jVn.length;j+)if(Vnj.equals(t.substring(0,1)break;for(k=0;selectik!=0;k+)int y=puanduanXulie(Vt,selectik);shujujy+1=t.substring(1);dtm=new DefaultTableModel(shuju,vt_tou);/显示预测分析表table.setModel(dtm);LL

15、=1;if(e.getSource()=b3)/清空列表tf1.setText(“);tf2.setText(“);t1.setText(“);t2.setText(“);t3.setText(“);Vn=null;P=null;firstComplete=null;first=null;followComplete=null;follow=null;select=null;dtm=new DefaultTableModel();table.setModel(dtm);if(e.getSource()=b2)/输入字符串并预测分析t3.setText(“);if(LL=1)String s=t2.getText();for(int i=0;is.length();i+)if(s.charAt(i)=0)t3.setText(“字符串中请不要加入空格“+“n“);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育教学资料库 > 精品笔记

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。