Skip to content

pasha9797/Javascript-VM

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Описание конечного языка. Это типа ассемблер для 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 - Выход из функции. Если ф-я возвращает значение, оно должно быть последним в стеке

About

Javascript interpreter using Antlr

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published