Wizard BASIC 0, v1.0.0, описание
Posted on

Wizard BASIC 0 — компилируемый высокоуровневый язык программирования.
Исходники
Файлы исходного кода должны быть в кодировке ASCII.
Ключевые слова
11 ключевых слов: and, as, define, end, go to, if, label, let, not, or, then.
Типы
Числа
Тип: с плавающей запятой, 4 байт.
Копирование: по значению.
Хранение: на стеке.
Определение: /\d+|(\d+.\d*)|(\d*.\d+)/.
Логические значения
В качестве ложного логического значения принимается число 0.
В качестве истинного логического значения принимаются числа, отличные от 0.
Строковые константы
Определение: оператор "define", identifier, "as", ? /"([^"\\]|(\\(t|n|r|"|\\)))*"/ ?, line break.
Операции
Перечислены в порядке убывания приоритета.
| Приоритет | Операция | Описание | Ассоциативность |
|---|---|---|---|
| 1 | not |
логическое отрицание | правая |
| 2 | * |
умножение | левая |
| 2 | / |
деление | левая |
| 3 | + |
сложение | левая |
| 3 | - |
вычитание | левая |
| 4 | < |
меньше | левая |
| 4 | > |
больше | левая |
| 5 | = |
равенство | левая |
| 6 | and |
конъюнкция | левая |
| 7 | or |
дизъюнкция | левая |
Вызов функции
identifier, "(", [expression, {",", expression}], ")"
Является выражением.
Объявление переменных и присваивание
"let", identifier, "=", expression, line break
Оператор.
Управляющие конструкции
Метки
Объявление: оператор "label", identifier, line break.
Переход: оператор "go to", identifier, line break.
Условие
"if", expression, "then", line break,
statement, line break
"end", line break
Оператор.
Комментарии
Однострочные: ? /^\s*note(\s[^\n]*)?\n/ ?.
Полная грамматика
LINE_BREAK = ["\r"], "\n", {["\r"], "\n"};
CONSTANT_REAL = ? /\b(\d+|(\d+.\d*)|(\d*.\d+))\b/ ?;
CONSTANT_STRING = ? /"([^"\\]|(\\(t|n|r|"|\\)))*"/ ?;
IDENTIFIER_SIMPLE = ? /\b[A-Za-z_]\w*\b/ ?;
expression_atom = CONSTANT_REAL | IDENTIFIER_SIMPLE | ("(", expression, ")")
| function_call;
expression_unary = "not", expression_atom;
expression_mul = expression_unary, {("*" | "/"), expression_unary};
expression_add = expression_mul, {("+" | "-"), expression_mul};
expression_compare = expression_add, {("<" | ">"), expression_add};
expression_equality = expression_compare, {"=", expression_compare};
expression_and = expression_equality, {"and", expression_equality};
expression_or = expression_and, {"or", expression_and};
expression = expression_or;
statement_assign = "let", IDENTIFIER_SIMPLE, "=", expression, LINE_BREAK;
statement_if = "if", expression, "then", LINE_BREAK, statement_list,
LINE_BREAK, "end", LINE_BREAK;
statement_label = "label", IDENTIFIER_SIMPLE, LINE_BREAK;
statement_goto = "go to", IDENTIFIER_SIMPLE, LINE_BREAK;
statement_define = "define", IDENTIFIER_SIMPLE, "as", CONSTANT_STRING,
LINE_BREAK;
statement = statement_assign | statement_if | statement_label |
statement_goto | statement_define | function_call;
statement_list = statement, {statement};
function_call = IDENTIFIER_SIMPLE, "(", [expression {",", expression}],
")";
program = statement_list;
Рантайм
- модуль
system:Number Exit(Number code);- модуль
system.io:Number ShowNumber(Number number);Number ShowString(String string);
- модуль
maths:Number Sin(Number number);Number Cos(Number number);Number Tg(Number number);Number Arcsin(Number number);Number Arccos(Number number);Number Arctg(Number number);Number Arctg2(Number y, Number x);Number Pow(Number base, Number exponent);Number Exp(Number number);Number Sqrt(Number number);Number Ln(Number number);Number Lg(Number number);Number Abs(Number number);Number Trunc(Number number);Number Rand(Number number).