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

📄 applet1.java

📁 一个自顶向下与自底向上的分析演示
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                    g.setColor(Color.black);
                // fall through

            case 8: // '\b'
                if(token == 8)
                    g.setColor(Color.red);
                drawtoken(g, 3, k1, y + 5 * heig);
                if(token == 8)
                    g.setColor(Color.black);
                // fall through

            case 7: // '\007'
                if(token == 7)
                    g.setColor(Color.red);
                drawtoken(g, 1, k1, y + 4 * heig);
                if(token == 7)
                    g.setColor(Color.black);
                // fall through

            case 6: // '\006'
                if(token == 6)
                    g.setColor(Color.red);
                drawtoken(g, 0, k1 + wid, y + 3 * heig);
                if(token == 6)
                    g.setColor(Color.black);
                // fall through

            case 5: // '\005'
                if(token == 5)
                    g.setColor(Color.red);
                drawtoken(g, 4, k1 + wid, y + 2 * heig);
                if(token == 5)
                    g.setColor(Color.black);
                // fall through

            case 4: // '\004'
                if(token == 4)
                    g.setColor(Color.red);
                drawtoken(g, 5, k1 - wid, y + 3 * heig);
                if(token == 4)
                    g.setColor(Color.black);
                // fall through

            case 3: // '\003'
                if(token == 3)
                    g.setColor(Color.red);
                drawtoken(g, 3, k1 - wid, y + 2 * heig);
                if(token == 3)
                    g.setColor(Color.black);
                // fall through

            case 2: // '\002'
                if(token == 2)
                    g.setColor(Color.red);
                drawtoken(g, 2, k1, y + heig);
                if(token == 2)
                    g.setColor(Color.black);
                // fall through

            case 1: // '\001'
                if(token == 1)
                    g.setColor(Color.red);
                drawtoken(g, 1, k1, y);
                if(token == 1)
                    g.setColor(Color.black);
                // fall through

            case 0: // '\0'
                if(token == 0)
                    g.setColor(Color.red);
                g.drawOval(((k1 - height) + width) - 2, y - height, (height * 3) / 2, (height * 3) / 2);
                Color oldcol = g.getColor();
                g.setColor(Color.green);
                g.fillArc(((k1 - height) + width) - 1, (y - height) + 1, (height * 3) / 2 - 2, (height * 3) / 2 - 1, 0, 360);
                g.setColor(oldcol);
                g.drawString("E", k1, y);
                if(token == 0)
                    g.setColor(Color.black);
                break;
            }
        else
            switch(token)
            {
            case 11: // '\013'
                if(token == 11)
                    g.setColor(Color.red);
                drawtoken1(g, 3, k1, y);
                if(token == 11)
                    g.setColor(Color.black);
                // fall through

            case 10: // '\n'
                if(token == 10)
                    g.setColor(Color.red);
                drawtoken1(g, 6, k1, y + heig);
                if(token == 10)
                    g.setColor(Color.black);
                // fall through

            case 9: // '\t'
                if(token == 9)
                    g.setColor(Color.red);
                drawtoken1(g, 5, k1 + wid, y + 2 * heig);
                if(token == 9)
                    g.setColor(Color.black);
                // fall through

            case 8: // '\b'
                if(token == 8)
                    g.setColor(Color.red);
                drawtoken1(g, 4, k1 + wid, y + 3 * heig);
                if(token == 8)
                    g.setColor(Color.black);
                // fall through

            case 7: // '\007'
                if(token == 7)
                    g.setColor(Color.red);
                drawtoken1(g, 2, k1 + 2 * wid, y + 4 * heig);
                if(token == 7)
                    g.setColor(Color.black);
                // fall through

            case 6: // '\006'
                if(token == 6)
                    g.setColor(Color.red);
                drawtoken1(g, 1, k1 + 2 * wid, y + 5 * heig);
                if(token == 6)
                    g.setColor(Color.black);
                // fall through

            case 5: // '\005'
                if(token == 5)
                    g.setColor(Color.red);
                drawtoken1(g, 3, k1, y + 4 * heig);
                if(token == 5)
                    g.setColor(Color.black);
                // fall through

            case 4: // '\004'
                if(token == 4)
                    g.setColor(Color.red);
                drawtoken1(g, 2, k1, y + 5 * heig);
                if(token == 4)
                    g.setColor(Color.black);
                // fall through

            case 3: // '\003'
                if(token == 3)
                    g.setColor(Color.red);
                drawtoken1(g, 1, k1, y + 6 * heig);
                if(token == 3)
                    g.setColor(Color.black);
                // fall through

            case 2: // '\002'
                if(token == 2)
                    g.setColor(Color.red);
                drawtoken1(g, 2, k1 - wid, y + 2 * heig);
                if(token == 2)
                    g.setColor(Color.black);
                // fall through

            case 1: // '\001'
                if(token == 1)
                    g.setColor(Color.red);
                drawtoken1(g, 1, k1 - wid, y + 3 * heig);
                if(token == 1)
                    g.setColor(Color.black);
                // fall through

            case 0: // '\0'
                if(token == 0)
                    g.setColor(Color.red);
                drawtoken1(g, 0, k1 - wid, y + 4 * heig);
                if(token == 0)
                    g.setColor(Color.black);
                break;
            }
    }

    void drawtoken1(Graphics g, int num, int k1, int y)
    {
        int k2 = k1 + width / 2;
        String s0;
        String s2;
        String s3;
        String s1 = s2 = s3 = s0 = null;
        switch(num)
        {
        case 6: // '\006'
            s0 = "T";
            s1 = "T";
            s2 = "*";
            s3 = "F";
            break;

        case 5: // '\005'
            s0 = "F";
            s1 = "(";
            s2 = "E";
            s3 = ")";
            break;

        case 4: // '\004'
            s0 = "E";
            s1 = "E";
            s2 = "+";
            s3 = "T";
            break;

        case 3: // '\003'
            s1 = "T";
            s0 = "E";
            break;

        case 2: // '\002'
            s1 = "F";
            s0 = "T";
            break;

        case 1: // '\001'
            s1 = "id";
            s0 = "F";
            break;

        case 0: // '\0'
            s0 = "id";
            break;
        }
        g.drawOval(((k2 - height) + width / 2) - 2, y - height, (height * 3) / 2, (height * 3) / 2);
        Color oldcol = g.getColor();
        g.setColor(Color.green);
        g.fillArc(((k2 - height) + width / 2) - 1, (y - height) + 1, (height * 3) / 2 - 2, (height * 3) / 2 - 1, 0, 360);
        g.setColor(oldcol);
        g.drawString(s0, k1, y);
        if(num > 3)
        {
            mydrawnode(g, k2, y, k2 - wid, (y + heig) - height, s1);
            mydrawnode(g, k2, y, k2, (y + heig) - height, s2);
            mydrawnode(g, k2, y, k2 + wid, (y + heig) - height, s3);
        } else
        if(num > 0)
            mydrawnode(g, k2, y, k2, (y + heig) - height, s1);
    }

    public void init()
    {
        f = new Font("Helvetica", 1, 16);
        Dimension d = getSize();
        int wsize = d.width;
        int hsize = d.height;
        setLayout(null);
        setSize(800, 600);
        rsp = new ScrollPane(0);
        rsp.setBounds(0, 0, wsize - 340 - (wsize * 2) / 100, (hsize * 99) / 100);
        add(rsp);
        canvas1 = new Canvas();
        canvas1.setSize(5000, 5000);
        rsp.add(canvas1);
        lsp = new ScrollPane(0);
        lsp.setBounds(wsize - 340 - wsize / 100, 0, 208 + wsize / 100, (hsize * 98) / 100);
        add(lsp);
        ca1 = new lcanvas4_1(this);
        ca2 = new rcanvas4_1(this);
        lsp.add(ca1);
        rsp.add(ca2);
        sel = -1;
        token = -1;
        tokenp = 0;
        pheight = d.height;
        pwidth = d.width;
        d = lsp.getSize();
        lpheight = d.height;
        lpwidth = d.width;
        ca1.setSize(150, 450);
        ca2.setSize(300, 450);
        panel1 = new Panel();
        panel1.setLayout(null);
        panel1.setBounds(wsize - 120, (hsize * 4) / 100, 108, (hsize * 20) / 100);
        add(panel1);
        label1 = new Label("分析类型");
        label1.setBounds(24, 0, 60, 24);
        panel1.add(label1);
        cbg = new CheckboxGroup();
        ldev = new Checkbox("自顶向下", cbg, true);
        ldev.setBounds(24, 24, 80, 24);
        panel1.add(ldev);
        rdev = new Checkbox("自底向上", cbg, false);
        rdev.setBounds(24, 48, 80, 24);
        panel1.add(rdev);
        tf1 = new TextField("id*(id+id)");
        tf1.setBounds(wsize - 120, (hsize * 28) / 100 + 30, 108, 24);
        tf1.setEnabled(false);
        add(tf1);
        begin = new Button();
        begin.setActionCommand("button");
        begin.setLabel("开始");
        begin.setBounds(wsize - 120, (hsize * 28) / 100 + 60, 108, 24);
        add(begin);
        begin.addActionListener(this);
        next = new Button();
        next.setActionCommand("button");
        next.setLabel("下一步");
        next.setBounds(wsize - 120, (hsize * 28) / 100 + 90, 108, 24);
        next.setEnabled(false);
        add(next);
        next.addActionListener(this);
        reset = new Button();
        reset.setActionCommand("button");
        reset.setLabel("重新开始");
        reset.setBounds(wsize - 120, (hsize * 28) / 100 + 120, 108, 24);
        reset.setEnabled(false);
        add(reset);
        reset.addActionListener(this);
        my_description = new Button();
        my_description.setActionCommand("button");
        my_description.setLabel("使用说明");
        my_description.setBounds(wsize - 120, (hsize * 28) / 100 + 200, 108, 24);
        add(my_description);
        my_description.addActionListener(this);
        my_description.addActionListener(this);
        label2 = new Label("固定输入");
        label2.setBounds(wsize - 120, (hsize * 28) / 100, 108, 24);
        add(label2);
        label3 = new Label("");
        label3.setBounds(wsize - 120, (hsize * 52) / 100, 108, 24);
        add(label3);
        lha = lsp.getHAdjustable();
        lva = lsp.getVAdjustable();
        lha.setUnitIncrement(10);
        lva.setUnitIncrement(10);
        rha = rsp.getHAdjustable();
        rva = rsp.getVAdjustable();
        rha.setUnitIncrement(10);
        rva.setUnitIncrement(10);
    }

    public void onclickbegin()
    {
        ca2.state = 0;
        reset.setEnabled(true);
        next.setEnabled(true);
        begin.setEnabled(false);
        ldev.setEnabled(false);
        rdev.setEnabled(false);
        if(cbg.getSelectedCheckbox() == ldev)
            nowldev = true;
        else
            nowldev = false;
        sel = -1;
        deal();
        repaint();
    }

    public void onclickreset()
    {
        ca2.state = 0;
        reset.setEnabled(false);
        begin.setEnabled(true);
        next.setEnabled(false);
        ldev.setEnabled(true);
        rdev.setEnabled(true);
        token = sel = -1;
        repaint();
    }

    public void rupdate()
    {
        wid = width * 5;
        heig = height * 3;
        Graphics tg = ca2.getGraphics();
        tg.clearRect(0, 0, 500, 800);
        drawtree(tg);
    }

    void deal()
    {
        if(sel == -1)
            if(nowldev)
                tokenp = 0;
            else
                tokenp = 1;
        token++;
        sel = bufl[tokenp][token];
        if(token > 10)
            next.setEnabled(false);
    }
}

⌨️ 快捷键说明

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