未完成【编译原理】科学计算器设计Java

本文介绍了一项编程作业,要求设计一个具备基本运算功能的科学计算器。计算器需能处理浮点数、整数、括号、运算符,并解决语法错误、除0等问题。根据编译原理中的翻译模式进行实现,包括E、E'、T和T'的规则。文章包含作业要求、代码实现及运行结果展示。
摘要由CSDN通过智能技术生成

作业要求

本次作业需要大家制作可编程计算器。
(1)其界面可参考下图,再加上‘(‘ 和 ’)’
可编程计算器界面
(2)点击 25.6 * 14.5 + 2 这11个符号,按‘=’,可输出结果373.2
(3)点击2 / (5.2 + 78) – 6这12个符号, 按‘=’,可输出结果 -5.97596
(4)若输入语法错误的串,如2 / 5.2 + 78 –, 则需报错。
(5)考虑整型和浮点型问题。对于浮点型,还需考虑精度问题。
(6)考虑除0问题。
(7)考虑键盘操作问题。

注意: 要想计算出值来,必须使用翻译模式。再考虑要计算整个算术表达式的值,则使用综合属性 val。本题翻译模式的提示如下:

E  TE’{E.val = T.val + E’.val}
E’  +TE’ {E’.val = T.val + E’.val}
E’  -TE’ { _________}
E’ ε {E’.val = 0}
T  FT’{T.val = F.val * T’.val}
T’  FT’ {T’.val = F.val T’.val}
T’  /FT’ { _________}
T’ ε { _______}
F  (E) {F.val = E.val}
F  i {F.val = i.lexval}

对于 E  TE’{E.val = T.val + E’.val}, 其代码经过更改如下:
代码

代码实现

package smartcalculator;
import java.awt.*;
import java.awt.event.*;

public class calculator {
   

    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        CalFrame f= new CalFrame();

    }

}
class CalFrame extends Frame{
   
    double d1,d2;
    int op=-1;
    TextField tf;
    CalPanelL p1;
    CalPanelR p2;

    CalFrame(){
        super("Smart Calculator");

        setLayout(new FlowLayout(FlowLayout.CENTER,8,10));
        setBackground(new Color(100,150,150));
        setForeground(Color.white);
        setResizable(false);
        setSize(300,200);

        tf = new TextField(22);
        tf.setEditable(false);
        tf.setBackground(new Color(108,118,103));
        tf.setForeground(Color.white);
        tf.setFont(new Font("Arial",Font.BOLD,16));
        add(tf);
        p1=new CalPanelL();
        p2=new CalPanelR();
        add(p1);
        add(p2);

        setVisible(true);
        addWindowListener(new Wclose());
    }

    class CalButton extends Button{
   
        CalButton(String s){
            super(s);
            setBackground(Color.gray);
        }
    }
    class CalPanelL extends Panel{
   
        CalButton b0,b1,b2,b3,
                  b4,b5,b6,b7,
                  b8,b9,bPN,bPoint;
        CalPanelL(){
            setLayout(new GridLayout(4,3));
            setFont(new Font("TimesRoman",Font.BOLD,16));
            b0=new CalButton("0");
            b1=new CalButton("1");
            b2=new CalButton("2");
            b3=new CalButton("3");
            b4=new CalButton("4");
            b5=new CalButton("5");
       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值