1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/phynos-js-rpn-expression

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Библиотека классов для работы с операционными выражениями

Используется обратная польская нотация. Если символ не отмечен, это означает, что функция ещё не реализована, но планируется к реализации в будущем.
В процессе реализации были использованы некоторые другие ресурсы, которые здесь не перечислены.

Снимки экрана с результатами тестирования

Тестирование в среде браузера Chrome

Результат тестирования

Тестирование на стандартном ядре JavaScript

Результат тестирования

Обновление

Обновление

Файлы

  • expression.js, index.html — полная версия;
  • expression_simple.js, index_simple.html — упрощённая версия (поддерживает только арифметические операции и переменные).

Основные функции

  • поддержка арифметических операций;
  • поддержка чисел с плавающей точкой;
  • поддержка пользовательских переменных;
  • поддержка пользовательских функций;
  • поддержка параметров пользовательских функций, включая вложенные параметры;
  • доступ к пользовательским переменным и функциям внутри объектов (включая вложенные объекты);
  • вызов пользовательских функций внутри объектов (включая вложенные объекты);
  • проблема точности чисел с плавающей точкой;
  • последовательный вызов функций объекта (например: obj.fun1(1).eda.fun2(1,2));
  • стандартный синтаксис JavaScript, за исключением тестовых функций. Основные функции не зависят от среды браузера (например, window, dom, console и т. д.).

Пример использования

var context = new CalContext();
//Добавление значения в стек — переменная
context.putData("$a",5);
//Добавление значения в стек — переменная
context.putData("PI",3);
//Добавление значения в стек — функция без параметров
context.putData("fun0",function(){ return 1000;});
//Добавление значения в стек — функция с одним параметром
context.putData("fun1",function(a){ return 10 * a;});
//Добавление значения в стек — функция с двумя параметрами
context.putData("fun2",function(a,b){ return 10 * a + b;});
//Добавление значения в стек — метод объекта (если используется метод или атрибут объекта window браузера, необходимо передать window в качестве контекста)
var t = {
  year: 28,
  fun: function(a) {
    return a + this.year;
  }
};
context.putData("fun3",t.fun,t);//Здесь необходимо передать объект в качестве обратного вызова
//Добавление значения в стек — объект
context.putData("people",{
   age: 28,
   bat: 3,
   fun1: function(){
     return this.age + 2;
   },
   fun2: function(a){
     return this.age + 10 * a;
   },
   fun3: function(a,b){
     return this.age + 10 * a + b;
   },
   skill: {
      lang : function(a){
          return a + this.bat;
      }
   }
});

//Получение значения
//var result = context.calc(expr);

//Ниже приведены примеры тестов

context.assertEqual("40+8*2",56);

context.assertEqual("40*8+2",322);

context.assertEqual("40/8+2",7);

context.assertEqual("40+8/2",44);

context.assertEqual("(40+8)/2",24);

context.assertEqual("40*(8-2)",240);

context.assertEqual("10%3 + 1",2);

context.assertEqual("0.1 + 1 + 0.3",1.4);

context.assertEqual("0.1 *10 + 6.3",7.3);

context.assertEqual("$a + 5",10);

context.assertEqual("$a + fun0()",1005);

context.assertEqual("$a + fun0() + 100",1105);

context.assertEqual("$a + fun1(1)",15);

context.assertEqual("$a + fun2(2,1)",26);

context.assertEqual("$a + fun2(3+7,3)",108);

context.assertEqual("$a + fun2(fun1(2),3) + 20",228);

context.assertEqual("11 + people.age / 2 + 6",31);

context.assertEqual("11 + people.age / 2 + fun1(1)",35);

context.assertEqual("11 + fun1(people.age / 2)/2 + 1",82);

context.assertEqual("$a + fun3(2) + people.fun1(1)",65);

context.assertEqual("$a + fun3(2) + people.skill.lang(1)",39);

//10 + (28+2) + 106 * 2 + 24 = 276
context.assertEqual("10 + fun3(2) + people.skill.lang(fun2(3+7,3)) * 2 + 24",276);

context.assertEqual("PI * 2 + 3",9);

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Реализация JS-кода для польской инверсной записи выражений. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/phynos-js-rpn-expression.git
git@api.gitlife.ru:oschina-mirror/phynos-js-rpn-expression.git
oschina-mirror
phynos-js-rpn-expression
phynos-js-rpn-expression
master