⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 applet1.java

📁 一个LL1预测分析的动态演示程序,是编译原理学习的绝好实例,赶快下吧.
💻 JAVA
字号:
// Decompiled by Jad v1.5.7g. Copyright 2000 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/SiliconValley/Bridge/8617/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi 
// Source File Name:   Applet1.java

import java.applet.Applet;
import java.awt.Adjustable;
import java.awt.Button;
import java.awt.Canvas;
import java.awt.CheckboxGroup;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Label;
import java.awt.Panel;
import java.awt.ScrollPane;
import java.awt.TextComponent;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Enumeration;
import java.util.EventObject;
import java.util.Stack;
import java.util.Vector;

public class Applet1 extends Applet
    implements ActionListener
{

    public ScrollPane lsp;
    public ScrollPane rsp;
    public Button begin;
    public Button next;
    public Button reset;
    public TextField tf1;
    public Adjustable rha;
    public Adjustable rva;
    public Adjustable lha;
    public Adjustable lva;
    public Label la1;
    public Panel pa;
    public int wsize;
    public int hsize;
    public Font f;
    rcanvas4_3 ca2;
    int height;
    int width;
    int sel;
    int lpheight;
    int lpwidth;
    int pheight;
    int pwidth;
    String buffer;
    StringBuffer bufshow;
    char buf[];
    FontMetrics fm;
    Stack st;
    Vector vec;
    int lrightl;
    int lbottoml;
    int rightl;
    int bottoml;
    int wid;
    int heig;
    boolean back;
    boolean error;
    boolean end;
    boolean nowldev;
    TextField tf2;
    TextField tf3;
    Label la2;
    mycanvas4_3 mc;
    String tokenseries;
    TextField textField1;
    Button my_description;
    Panel panel1;
    Panel left_panel;
    Panel right_panel1;
    CheckboxGroup Group1;
    Label label1;
    java.awt.List list1;
    Label label2;
    Label label3;
    Canvas canvas1;

    public void onclickdesc()
    {
        ca2.state = 1;
        ca2.repaint();
    }

    int getparam(String str, char ch2)
        throws Exception
    {
        int j = tokenseries.indexOf(ch2);
        int k;
        for(k = 7; k < 12; k++)
            if(str.equals(mc.strbuf[k]))
                break;

        if(k > 11 || j < 1)
            throw new Exception();
        else
            return (k - 6) * 10 + j;
    }

    public Applet1()
    {
        lsp = null;
        rsp = null;
        begin = null;
        next = null;
        reset = null;
        tf1 = null;
        la1 = null;
        pa = null;
        ca2 = new rcanvas4_3(this);
        tf2 = null;
        tf3 = null;
        la2 = null;
        mc = new mycanvas4_3();
        tokenseries = " d+*()$";
        vec = new Vector();
        buf = new char[1024];
        rightl = bottoml = 0;
        lrightl = lbottoml = 0;
    }

    int drawconclude(Graphics g, int x, int y)
    {
        y -= height;
        for(Enumeration e = vec.elements(); e.hasMoreElements(); g.drawString(e.nextElement().toString(), x, y += height));
        return y;
    }

    public void repaint()
    {
        mc.repaint();
        ca2.repaint();
    }

    public void onclicknext()
    {
        ca2.state = 0;
        try
        {
            deal();
        }
        catch(Exception e)
        {
            vec.removeAllElements();
            error = true;
        }
        if(end)
            next.setEnabled(false);
        repaint();
    }

    public void actionPerformed(ActionEvent ae)
    {
        if(ae.getSource() == begin)
            onclickbegin();
        else
        if(ae.getSource() == next)
            onclicknext();
        else
        if(ae.getSource() == reset)
            onclickreset();
        else
        if(ae.getSource() == my_description)
            onclickdesc();
    }

    public void init()
    {
        f = new Font("Helvetica", 1, 16);
        Dimension d1 = getSize();
        int wsize = d1.width;
        int hsize = d1.height;
        setLayout(null);
        setSize(800, 600);
        left_panel = new Panel();
        left_panel.setLayout(null);
        left_panel.setBounds(10, 10, wsize - 300 - (wsize * 2) / 100, (hsize * 99) / 100);
        mc.setBounds(10, 10, wsize - 320 - (wsize * 2) / 100, 150);
        add(left_panel);
        left_panel.add(mc);
        la2 = new Label("栈");
        la2.setBounds(10, 170, 15, 20);
        left_panel.add(la2);
        tf2 = new TextField();
        tf2.setEditable(false);
        tf2.setBounds(35, 170, 200, 20);
        left_panel.add(tf2);
        la2 = new Label("请输入表达式");
        la2.setBounds(10, 200, 80, 20);
        left_panel.add(la2);
        tf3 = new TextField();
        tf3.setBounds(115, 200, 120, 20);
        left_panel.add(tf3);
        tf3.setText("id*(id+id)");
        tf2.setText("$E");
        tf2.setEditable(false);
        lsp = new ScrollPane(0);
        lsp.setBounds(wsize - 270, 0, 260, (hsize * 98) / 100);
        add(lsp);
        lsp.add(ca2);
        Dimension d = lsp.getSize();
        sel = -2;
        error = false;
        pheight = d.height;
        pwidth = d.width;
        d = lsp.getSize();
        lpheight = d.height;
        lpwidth = d.width;
        end = false;
        begin = new Button();
        begin.setActionCommand("button");
        begin.setLabel("开始");
        begin.setBounds(10, 230, 108, 24);
        left_panel.add(begin);
        begin.addActionListener(this);
        next = new Button();
        next.setActionCommand("button");
        next.setLabel("下一步");
        next.setBounds(10, 260, 108, 24);
        next.setEnabled(false);
        left_panel.add(next);
        next.addActionListener(this);
        reset = new Button();
        reset.setActionCommand("button");
        reset.setLabel("重新开始");
        reset.setBounds(10, 290, 108, 24);
        reset.setEnabled(false);
        left_panel.add(reset);
        reset.addActionListener(this);
        my_description = new Button();
        my_description.setActionCommand("button");
        my_description.setLabel("使用说明");
        my_description.setBounds(10, 320, 108, 24);
        my_description.addActionListener(this);
        left_panel.add(my_description);
    }

    public void onclickbegin()
    {
        ca2.state = 0;
        reset.setEnabled(true);
        next.setEnabled(true);
        begin.setEnabled(false);
        tf3.setEditable(false);
        buffer = tf3.getText();
        buffer.getChars(0, sel = buffer.length(), buf, 0);
        int j = 0;
        for(int i = 0; i < sel;)
            switch(buf[i])
            {
            default:
                buf[j] = buf[i];
                j++;
                // fall through

            case 9: // '\t'
            case 10: // '\n'
            case 13: // '\r'
            case 32: // ' '
                i++;
                break;
            }

        if(j == 0 || buf[j - 1] != '$')
            buf[j++] = '$';
        sel = -2;
        buffer = new String(buf, 0, j);
        tf3.setText(buffer);
        try
        {
            deal();
        }
        catch(Exception e)
        {
            vec.removeAllElements();
            error = true;
        }
        repaint();
    }

    public void onclickreset()
    {
        ca2.state = 0;
        reset.setEnabled(false);
        begin.setEnabled(true);
        next.setEnabled(false);
        tf3.setEditable(true);
        tf2.setText("$E");
        end = false;
        sel = -2;
        vec.removeAllElements();
        mc.setParam(-1);
        error = false;
        repaint();
    }

    public void rupdate()
    {
        Graphics gg = ca2.getGraphics();
        gg.setFont(f);
        fm = gg.getFontMetrics();
        height = fm.getHeight();
        width = fm.charWidth('E');
        wid = width + 15;
        heig = height + 23;
        ca2.setSize(Math.max(rightl, pwidth), Math.max(bottoml, pheight));
        Graphics tg = ca2.getGraphics();
        tg.setFont(f);
        tg.clearRect(0, 0, rightl, bottoml);
        rightl = bottoml = 0;
        int k1 = height;
        if(error)
        {
            tg.drawString("输入串错误", 10, 20);
            rightl = fm.stringWidth("输入串错误") + 10;
            bottoml = 21;
            next.setEnabled(false);
            return;
        }
        for(Enumeration e = vec.elements(); e.hasMoreElements();)
        {
            tg.drawString((String)e.nextElement(), width * 2, k1);
            k1 += height;
        }

        bottoml = k1;
        rightl = width * 50;
    }

    void deal()
        throws Exception
    {
        String str = tf2.getText();
        char chl = str.charAt(str.length() - 1);
        char ch = buffer.charAt(0);
        if(ch == 'i')
        {
            ch = buffer.charAt(1);
            if(ch != 'd')
                throw new Exception();
        }
        int k;
        if(tokenseries.indexOf(chl) > 0)
        {
            if(chl == ch)
                if(chl == 'd')
                {
                    str = str.substring(0, str.length() - 2);
                    buffer = buffer.substring(2);
                } else
                {
                    if(chl == '$')
                    {
                        mc.setParam(-1);
                        end = true;
                        return;
                    }
                    str = str.substring(0, str.length() - 1);
                    buffer = buffer.substring(1);
                }
        } else
        {
            String str1 = null;
            if(chl == '\'')
                str1 = str.substring(str.length() - 2);
            else
                str1 = "" + chl;
            k = getparam(str1, ch);
            if(sel == -2)
            {
                mc.setParam(k);
                sel = -1;
                return;
            }
            switch(mc.buf[k / 10][k % 10])
            {
            case 0: // '\0'
                if(ch == 'd')
                    buffer = buffer.substring(2);
                else
                    buffer = buffer.substring(1);
                break;

            case 12: // '\f'
                str = str.substring(0, str.length() - 1) + "E'T";
                break;

            case 13: // '\r'
                str = str.substring(0, str.length() - 1);
                break;

            case 14: // '\016'
                str = str + "T+";
                break;

            case 15: // '\017'
            case 17: // '\021'
                str = str.substring(0, str.length() - 2);
                break;

            case 16: // '\020'
                str = str.substring(0, str.length() - 1) + "T'F";
                break;

            case 18: // '\022'
                str = str + "F*";
                break;

            case 19: // '\023'
                str = str.substring(0, str.length() - 1) + "id";
                break;

            case 20: // '\024'
                str = str.substring(0, str.length() - 1) + ")E(";
                break;

            default:
                throw new Exception();
            }
            k = mc.buf[k / 10][k % 10];
            if(k == 13)
                k = 22;
            else
            if(k == 0)
                k = 21;
            vec.addElement(mc.strbuf[k]);
        }
        tf3.setText(buffer);
        tf2.setText(str);
        chl = str.charAt(str.length() - 1);
        ch = buffer.charAt(0);
        if(ch == 'i')
        {
            ch = buffer.charAt(1);
            if(ch != 'd')
                throw new Exception();
        }
        if(tokenseries.indexOf(chl) > 0)
            k = -1;
        else
        if(chl == '\'')
            k = getparam(str.substring(str.length() - 2), ch);
        else
            k = getparam(str.substring(str.length() - 1), ch);
        mc.setParam(k);
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -