# Javascript-VM **Repository Path**: weimingtom/Javascript-VM ## Basic Information - **Project Name**: Javascript-VM - **Description**: Imported from https://github.com/pasha9797/Javascript-VM - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2020-02-08 - **Last Updated**: 2023-06-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README Описание конечного языка. Это типа ассемблер для VM javascript. Виртуальная машина содержит глобальный стек и таблицу переменных. На уровне данного языка есть: Комманды, константы, переменные, функции, массивы. Типов данных нет. Список комманд: push #1 - положить значение #1 в стек pushFromVar #1 - положить значение из переменной #1 в стек pushFromArray - положить в стек значения из массива. Стек должен содержать от головы: сам массив, индекс pop #1 - взять из стека значение и записать в переменную #1 popToArray - запись значения из стека в массив. Стек должен содержать от головы: Массив, индекс, значение. decl #1 - объявить переменную #1 declArray #1 - объявить массив с именем #1 jumpTrue #1 - прыгнуть на комманду #1 если в стеке лежит 1 jumpFalse #1 - прыгнуть на комманду #1 если в стеке лежит не 1 jump #1 - прыгнуть на комманду #1 sub - вычесть 2 значения из стека. Результат записать в стек mul - умножить 2 значения из стека. Результат записать в стек div - разделить 2 значения из стека. Результат записать в стек add - сложить 2 значения из стека. Результат записать в стек mod - остаток от деления 2 значений из стека. Результат записать в стек and - Логическое И к 2 значениям из стека. Результат записать в стек or - Логическое ИЛИ к 2 значениям из стека. Результат записать в стек gt - Операция > к 2 значениям из стека. Результат записать в стек ge - Операция >= к 2 значениям из стека. Результат записать в стек lt - Операция < к 2 значениям из стека. Результат записать в стек le - Операция <= И к 2 значениям из стека. Результат записать в стек equals - Операция == к 2 значениям из стека. Результат записать в стек not - если в стеке была 1, положить 0. Иначе положить 1 functionStart #1 - комманда объявления функции. VM создат функцию и запишет её в таблицу переменных, потом выполнится комманда, следующая за functionEnd. functionEnd #1 - комманда завершения объявления функции. Нужна в качестве метки для VM call - Вызов функции. Стек должен содержать от головы: сама функция, аргументы к ней (в обратном порядке) systemCall #1 - Вызов системной функции с именем #1. В стеке должны быть аргументы к функции return - Выход из функции. Если ф-я возвращает значение, оно должно быть последним в стеке