Создание калькулятора

Краткая характеристика предметно-ориентированных языков, различия между "внутренними" и "внешними" DSL. Особенности работы транслятора (компилятора). Листинг программы для разработки простейшего калькулятора с использованием программной среды Java.

Рубрика Программирование, компьютеры и кибернетика
Вид лабораторная работа
Язык русский
Дата добавления 31.03.2017
Размер файла 57,8 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://allbest.ru

Создание калькулятора

Цель работы: Создать простейший калькулятор, используя Java.

Краткая теория:

Предметно-ориентированные языки представляют собой обширную тему для обсуждения, ее невозможно уместить в одном вводном абзаце. Более подробную информацию о DSL можно найти в еще неопубликованной книге Мартина Фаулера (Martin Fowler). Обратите особое внимание на различия между "внутренними" и "внешними" DSL. Благодаря своему гибкому синтаксису и функциональной природе Scala может с успехом применяться для создания DSL обоих типов.

Другими словами, в конечном итоге язык должен позволять клиентам создавать и вычислять выражения аналогично тому, как показано в листинге 1.

листинг программа калькулятор

// использование интерпретатора DSL в Java

String s = "((5 * 10) + 7)";

double result = com.tedneward.calcdsl.Calculator.evaluate(s);

System.out.println("We got " + result); // Should be 57

Те из вас, кто обладает базовым представлением о теории компиляторов, знают, что работа транслятора (компилятора или интерпретатора) состоит как минимум из двух основных шагов:

· парсер обрабатывает текст программы и трансформирует его в абстрактное синтаксическое дерево (AST);

· генератор кода (в случае компилятора) обрабатывает AST и генерирует машинный код, либо блок вычислений (в случае интерпретатора) исполняет команды, содержащиеся в AST.

Разделение этих шагов работы транслятора на отдельные фазы позволяет выполнять оптимизацию промежуточного представления кода в AST. Например, в случае калькулятора можно проанализировать выражения и в ряде случаев отбросить целые его части, в частности операнды, умножаемые на ноль (поскольку результат гарантированно будет равен нулю).

Таким образом, нашей первой задачей будет определение AST для языка выражений. К счастью, в Scala есть case-классы. Они не предоставляют мощных средств инкапсуляции, но в них удобно хранить данные, что в совокупности с другими возможностями делает их подходящим инструментом для создания AST.

Ход выполнения работы:

Листинг программы:

package javaapplication1;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class Calculator

{

public static void main(String[] args) {

EventQueue.invokeLater(new Runnable()

{

public void run() {

CalculatorFrame frame = new CalculatorFrame();

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setVisible(true);

}

});

}

}

class CalculatorFrame extends JFrame {

public CalculatorFrame() {

setTitle("Calculator");

CalculatorPanel panel = new CalculatorPanel();

add(panel);

pack();

}

}

class CalculatorPanel extends JPanel {

public CalculatorPanel() {

setLayout(new BorderLayout());

result = 0;

lastCommand = "=";

start=true;

display = new JButton("0");

display.setEnabled(false);

add(display, BorderLayout.NORTH);

ActionListener insert = new InsertAction();

ActionListener command = new CommandAction();

panel = new JPanel();

panel.setLayout(new GridLayout(4, 4));

addButton("7", insert);

addButton("8", insert);

addButton("9", insert);

addButton("/", command);

addButton("4", insert);

addButton("5", insert);

addButton("6", insert);

addButton("*", command);

addButton("1", insert);

addButton("2", insert);

addButton("3", insert);

addButton("-", command);

addButton("0", insert);

addButton(".", insert);

addButton("=", command);

addButton("+", command);

add(panel, BorderLayout.CENTER);

}

private void addButton(String label, ActionListener listener) {

JButton button = new JButton(label);

button.addActionListener(listener);

panel.add(button);

}

private class InsertAction implements ActionListener

{

public void actionPerformed(ActionEvent event)

{

String input = event.getActionCommand();

if(start) {

display.setText("");

start = false;

}

display.setText(display.getText() + input);

}

}

private class CommandAction implements ActionListener

{

public void actionPerformed(ActionEvent event)

{

String command = event.getActionCommand();

if(start)

{

if(command.equals("-"))

{

display.setText(command);

start = false;

}

else lastCommand = command;

}

else

{

calculate(Double.parseDouble(display.getText()));

lastCommand = command;

start=true;

}

}

}

public void calculate(double x)

{

if(lastCommand.equals("+")) result += x;

else if(lastCommand.equals("-")) result -= x;

else if(lastCommand.equals("*")) result *= x;

else if(lastCommand.equals("/")) result /= x;

else if(lastCommand.equals("=")) result = x;

display.setText("" + result);

}

private JButton display;

private JPanel panel;

private double result;

private String lastCommand;

private boolean start;

}

Результат выполнения

Вывод

Проделав данную лабораторную работу, я научился создавать простейший калькулятор, используя программную среду Java.

Размещено на Allbest.ru


Подобные документы

  • Общая характеристика основ дисциплины "Теория чисел". Интерфейс, листинг и оценка положительных и отрицательных качеств программы-калькулятора CalcKurs, а также описание ее основных процедур – DelOstatok, Factor, NodNok, SuperGorner, Express и AntiExp.

    курсовая работа [1,9 M], добавлен 28.05.2010

  • Пример построения программы с использованием арифметических операторов. Основные инструменты создания калькулятора. Процедура ввода чисел. Измененная процедура обработки нажатия кнопки "+". Процедура открытия формы "Справка", итоговый результат.

    презентация [1,5 M], добавлен 02.03.2012

  • Задачи трансляторов, характеристика их видов. Этапы и функции основных фаз процесса компиляции. Описание используемых директив и команд ассемблера, алгоритмов, таблиц. Листинг программы. Алгоритм работы программной реализации разрабатываемого компилятора.

    курсовая работа [1,3 M], добавлен 24.06.2013

  • Характеристика интерфейса в Java, возможность его расширения с использованием механизма наследования. Организация обратного вызова в Java. Сущность внутреннего класса. Обращение из внутреннего класса к элементам внешнего класса и листинг программы.

    методичка [90,8 K], добавлен 30.06.2009

  • Характеристика библиотеки java.awt. Обработка событий управляющими компонентами и менеджерами размещения. Основные виды компонентов. Написание программы–калькулятора, реализующую графический интерфейс. Спецификация класса Calc и иерархия классов AWT.

    методичка [643,8 K], добавлен 30.06.2009

  • Принцип работы транслятора. Исследование формата данных объектного файла шестнадцатиразрядной системы DOS для последующего преобразования его в файл программы. Используемые директивы и команды ассемблера. Алгоритмы программы и таблицы компилятора.

    контрольная работа [35,9 K], добавлен 07.07.2012

  • Разработка приложения "Калькулятор с переходом в строковый калькулятор" с применением объектно-ориентированного программирования. Концепция и понятия объектно-ориентированного программирования. Язык программирования Java. Листинг программы "Калькулятор".

    курсовая работа [966,9 K], добавлен 11.02.2016

  • Позиционирование и предназначение бюджетного калькулятора и калькулятора Windows. Определение математической модели приложения. Диаграмма классов. Проектирование бизнес логики. Описание программного продукта, его тестирование. Инструкция пользователя.

    дипломная работа [1,0 M], добавлен 06.06.2017

  • Встроенные типы данных, основные конструкции, структуры и применение языка Javа. Введение в интегрированную среду разработки Eclipse. Листинг программы, иллюстрирующей работу с одномерными массивами (создание массива). Спецификация класса Figure.

    методичка [1,4 M], добавлен 30.06.2009

  • Общее понятие о пакете "java.net". Логическая структура соединений через сокеты. Создание объекта Socket, соединение между узлами Internet. Способы создания потока. Алгоритм работы системы клиент-сервер. Листинг ServerForm.java, запуск подпроцесса.

    лабораторная работа [174,6 K], добавлен 27.11.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.