- 1
Создание калькулятора Цель работы: Создать простейший калькулятор, используя Java.
Краткая теория:
Предметно-ориентированные языки представляют собой обширную тему для обсуждения, ее невозможно уместить в одном вводном абзаце. Более подробную информацию о DSL можно найти в еще неопубликованной книге Мартина Фаулера (Martin Fowler). Обратите особое внимание на различия между "внутренними" и "внешними" DSL. Благодаря своему гибкому синтаксису и функциональной природе Scala может с успехом применяться для создания DSL обоих типов.
Другими словами, в конечном итоге язык должен позволять клиентам создавать и вычислять выражения аналогично тому, как показано в листинге 1.
листинг программа калькулятор
// использование интерпретатора DSL в Javas = "((5 * 10) + 7)";
double result = com.tedneward.calcdsl.Calculator.evaluate(s);.out.println("We got " + result); // Should be 57 Те из вас, кто обладает базовым представлением о теории компиляторов, знают, что работа транслятора (компилятора или интерпретатора) состоит как минимум из двух основных шагов:
· парсер обрабатывает текст программы и трансформирует его в абстрактное синтаксическое дерево (AST);
· генератор кода (в случае компилятора) обрабатывает AST и генерирует машинный код, либо блок вычислений (в случае интерпретатора) исполняет команды, содержащиеся в AST.
Разделение этих шагов работы транслятора на отдельные фазы позволяет выполнять оптимизацию промежуточного представления кода в AST. Например, в случае калькулятора можно проанализировать выражения и в ряде случаев отбросить целые его части, в частности операнды, умножаемые на ноль (поскольку результат гарантированно будет равен нулю).
Таким образом, нашей первой задачей будет определение AST для языка выражений. К счастью, в Scala есть case-классы. Они не предоставляют мощных средств инкапсуляции, но в них удобно хранить данные, что в совокупности с другими возможностями делает их подходящим инструментом для создания AST.
Ход выполнения работы:
Листинг программы:package javaapplication1;java.awt.*;java.awt.event.*;javax.swing.*;class Calculator
{static void main(String[] args) {.invokeLater(new Runnable()
{void run() {frame = new CalculatorFrame();.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);.setVisible(true);
}
});
}
}CalculatorFrame extends JFrame {CalculatorFrame() {("Calculator");panel = new CalculatorPanel();(panel);();
}
}CalculatorPanel extends JPanel {CalculatorPanel() {(new BorderLayout());= 0;= "=";=true;= new JButton("0");.setEnabled(false);(display, BorderLayout.NORTH);insert = new InsertAction();command = new CommandAction();= new JPanel();.setLayout(new GridLayout(4, 4));("7", insert);("8", insert);("9", insert);("/", command);("4", insert);("5", insert);("6", insert);("*", command);("1", insert);("2", insert);("3", insert);("-", command);("0", insert);(".", insert);("=", command);("+", command);(panel, BorderLayout.CENTER);
}void addButton(String label, ActionListener listener) {button = new JButton(label);.addActionListener(listener);.add(button);
}class InsertAction implements ActionListener
{void actionPerformed(ActionEvent event)
{input = event.getActionCommand();(start) {.setText("");= false;
}.setText(display.getText() + input);
}
}class CommandAction implements ActionListener
{void actionPerformed(ActionEvent event)
{command = event.getActionCommand();(start)
{(command.equals("-"))
{.setText(command);= false;
}lastCommand = command;
}
{(Double.parseDouble(display.getText()));= command;=true;
}
}
}void calculate(double x)
{(lastCommand.equals("+")) result += x;if(lastCommand.equals("-")) result -= x;if(lastCommand.equals("*")) result *= x;if(lastCommand.equals("/")) result /= x;if(lastCommand.equals("=")) result = x;.setText("" + result);
}JButton display;JPanel panel;double result;String lastCommand;boolean start;
} Результат выполнения Вывод Проделав данную лабораторную работу, я научился создавать простейший калькулятор, используя программную среду Java.
- 1
Похожие работы
Тема: Создание калькулятора с переходом в строковый калькулятор |
Предмет/Тип: Информационное обеспечение, программирование (Курсовая работа (т)) |
Тема: Створення арифметичного калькулятора |
Предмет/Тип: Отсутствует (Курсовая работа (т)) |
Тема: Створення калькулятора множення |
Предмет/Тип: Информатика, ВТ, телекоммуникации (Диплом) |
Тема: Вычисление количества информации с помощью калькулятора |
Предмет/Тип: Информатика, ВТ, телекоммуникации (Реферат) |
Тема: Функціонально-вартісний аналіз калькулятора ASSISTANT |
Предмет/Тип: Эктеория (Реферат) |
Интересная статья: Основы написания курсовой работы