Project

General

Profile

Actions

Task #4246

closed

Калькулятор константных выражений

Added by Alexander Kamkin almost 11 years ago. Updated almost 11 years ago.

Status:
Closed
Priority:
Normal
Assignee:
Andrei Tatarnikov
Category:
-
Target version:
Start date:
06/22/2013
Due date:
% Done:

100%

Estimated time:
Detected in build:
svn
Published in build:
0.2.2

Description

Реализовать метод Operation Operation.reduce(final ICalculator calculator, int flags), упрощающий выражение за счет схлопывания константных подвыражений.

По умолчанию, метод возвращает копию операции.

Actions #1

Updated by Andrei Tatarnikov almost 11 years ago

  • % Done changed from 0 to 10
Actions #2

Updated by Andrei Tatarnikov almost 11 years ago

  • Status changed from New to Open
  • % Done changed from 10 to 90

Я написал калькулятор для основных стандартных операций EStandardOperation (MINUS, PLUS, ADD, SUB, MUL, DIV, REM, MOD) и API-классы для создания/расширения калькуляторов (см. класс syntax.Calculator). А у класса Operation появился метод для схлопывания подвыражений:

public ISyntaxElement reduce(ICalculator calculator, int flags)

Его можно использовать следующим образом

syntax.addFormula(
    new Formula(
        new Operation(
            EStandardOperation.EQ,
            a,
            new Operation(
                EStandardOperation.ADD,
                new Value(intType.valueOf("2", 10)),
                new Value(intType.valueOf("3", 10))).reduce(CalculatorForStandard.getInstance(), 0)
            )
        )
    );

Данный код помогает упростить выражение (+ 2 3) в число 5.

В дальнейшем стандартный калькулятор может быть расширен для поддержки новых стандартных операций. Также на основе имеющихся базовых классов можно создавать калькуляторы для других типов операций.

Actions #3

Updated by Andrei Tatarnikov almost 11 years ago

  • Status changed from Open to Closed
  • % Done changed from 90 to 100

P.S. Посмотрите реализацию. Что-то ещё нужно добавить?

Actions #4

Updated by Andrei Tatarnikov almost 11 years ago

  • Status changed from Closed to Resolved
Actions #5

Updated by Andrei Tatarnikov almost 11 years ago

Закрыл по ошибке. Resolved.

Actions #6

Updated by Alexander Kamkin almost 11 years ago

  • Status changed from Resolved to Open

Давай вместо int flags сделаем enum ReduceOptions, cодержащий единственную константу CLONE.
Кроме того, можно добавить метод с сокращенной сигнатурой reduce(calculator) = reduce(calculator, ReduceOptions.CLONE).

Actions #7

Updated by Andrei Tatarnikov almost 11 years ago

  • Status changed from Open to Resolved

Сделал. Назвал ReduceOptions.NEW_INSTANCE. См. r96.

Actions #8

Updated by Sergey Smolov almost 11 years ago

  • Status changed from Resolved to Closed
  • Published in build set to 0.2.2
Actions

Also available in: Atom PDF