欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      編譯原理 語法分析器 (java完美運行版)

      時間:2019-05-14 18:41:07下載本文作者:會員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《編譯原理 語法分析器 (java完美運行版)》,但愿對你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《編譯原理 語法分析器 (java完美運行版)》。

      第一篇:編譯原理 語法分析器 (java完美運行版)

      實驗二

      語法分析器

      一、實驗?zāi)康?/p>

      通過完成預(yù)測分析法的語法分析程序,了解預(yù)測分析法和遞歸子程序法的區(qū)別和聯(lián)系。使學(xué)生了解語法分析的功能,掌握語法分析程序設(shè)計的原理和構(gòu)造方法,訓(xùn)練學(xué)生掌握開發(fā)應(yīng)用程序的基本方法。有利于提高學(xué)生的專業(yè)素質(zhì),為培養(yǎng)適應(yīng)社會多方面需要的能力。

      二、實驗內(nèi)容

      ? 根據(jù)某一文法編制調(diào)試 LL(1)分析程序,以便對任意輸入的符號串進行分析。

      ? 構(gòu)造預(yù)測分析表,并利用分析表和一個棧來實現(xiàn)對上述程序設(shè)計語言的分析程序。

      ? 分析法的功能是利用LL(1)控制程序根據(jù)顯示棧棧頂內(nèi)容、向前看符號以及LL(1)分析表,對輸入符號串自上而下的分析過程。

      三、LL(1)分析法實驗設(shè)計思想及算法

      ? 模塊結(jié)構(gòu):

      (1)定義部分:定義常量、變量、數(shù)據(jù)結(jié)構(gòu)。

      (2)初始化:設(shè)立LL(1)分析表、初始化變量空間(包括堆棧、結(jié)構(gòu)體、數(shù)組、臨時變量等);

      (3)控制部分:從鍵盤輸入一個表達式符號串;

      (4)利用LL(1)分析算法進行表達式處理:根據(jù)LL(1)分析表對表達式符號串進行堆棧(或其他)操作,輸出分析結(jié)果,如果遇到錯誤則顯示錯誤信息。

      四、實驗要求

      1、編程時注意編程風(fēng)格:空行的使用、注釋的使用、縮進的使用等。

      2、如果遇到錯誤的表達式,應(yīng)輸出錯誤提示信息。

      3、對下列文法,用LL(1)分析法對任意輸入的符號串進行分析:

      (1)E->TG(2)G->+TG|—TG(3)G->ε(4)T->FS(5)S->*FS|/FS(6)S->ε(7)F->(E)(8)F->i 輸出的格式如下:

      五、實驗源程序

      LL1.java import 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 serialVersionUID = 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的數(shù)據(jù)

      char first[][]=null;//存儲最后first結(jié)果

      int followComplete[]=null;//存儲已判斷過follow的數(shù)據(jù)

      char follow[][]=null;//存儲最后follow結(jié)果

      char select[][]=null;//存儲最后select結(jié)果

      int LL=0;//標(biāo)記是否為LL(1)String vt_tou[]=null;//儲存Vt

      Object shuju[][]=null;//存儲表達式數(shù)據(jù)

      char yn_null[]=null;//存儲能否推出空

      LL1(){ setLocation(100,0);setSize(700,780);tf1=new JTextField(13);tf2=new JTextField(13);l=new JLabel(“>>”);l0=new JLabel(“輸入字符串:”);l1=new JLabel(“輸入的文

      法”);l2=new JLabel(“ ”);l3=new JLabel(“

      析的結(jié)”);l4=new JLabel(“預(yù)測

      析”);//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(“ 判斷文法 ”);

      :果:表

      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.add(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(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 String[100];P=new Vector();String s[]=t1.getText().split(”n“);for(int i=0;i

      return;}

      if(s[i].charAt(0)<='Z'&&s[i].charAt(0)>='A'&&s[i].charAt(1)=='→'){ for(k=0;k=Vnnum){ Vn[Vnnum]=s[i].substring(0, 1);//存入Vn數(shù)據(jù) Vnnum++;} P.add(s[i]);} else { t3.setText(”文法輸入有誤,請重新輸入“);return;} } yn_null=new char[100];first=new char[Vnnum][100];int flag=0;String firstVn[]=null;firstComplete=new int[Vnnum];for(int i=0;Vn[i]!=null;i++)//依次求 FIRST** { flag=0;firstVn=new String[20];

      if((flag=add_First(first[i],Vn[i],firstVn,flag))==-1)return;firstComplete[i]=1;} t3.append(”first集:“+”n“);//顯示FIRST**

      for(int i=0;Vn[i]!=null;i++){ t3.append(”first(“+Vn[i]+”)={ “);for(int j=0;first[i][j]!='