ref: remove old docs variant
This commit is contained in:
@@ -1,19 +1,2 @@
|
||||
# Интерфейс компилятора
|
||||
|
||||
Компилятор называется `fzc`.
|
||||
Он принимает исходные файлы `.fzs` и создаёт бинарный файл `.fzb`.
|
||||
|
||||
```
|
||||
fzc [flags] <sources...>
|
||||
```
|
||||
|
||||
| Флаг | Назначение |
|
||||
| ------------- | ---------------------------------------------- |
|
||||
| -h, --help | Показать справку |
|
||||
| -v, --verbose | Вывести токены, AST, таблицу констант и опкоды |
|
||||
| -V, --version | Показать версию |
|
||||
| -o, --out | Задать имя выходного файла |
|
||||
|
||||
Если `-o` не задан, результат записывается в `a.fzb`. Пример: `fzc -v -o hello.fzb exl/hw.fzs`.
|
||||
|
||||
VM запускается командой `fz [flags] <file path>`. Флаг `-d` или `--debug` печатает опкоды, не выполняя программу.
|
||||
|
||||
@@ -1,33 +1,2 @@
|
||||
# Грамматика (EBNF)
|
||||
|
||||
Упрощённая грамматика текущего парсера:
|
||||
|
||||
```
|
||||
program = { statement } ;
|
||||
statement = class | function | if | block | return | expression ";" ;
|
||||
block = "{" { statement } "}" ;
|
||||
class = "class" name "{" { declaration | function } "}" ;
|
||||
function = "fn" name "(" [ parameters ] ")" [ type-name ] statement ;
|
||||
parameters = parameter { "," parameter } ;
|
||||
parameter = type-name name ;
|
||||
return = "return" [ expression ] ";" ;
|
||||
if = "if" "(" expression ")" statement [ "else" statement ] ;
|
||||
expression = assignment ;
|
||||
assignment = new-expression [ "=" assignment ] ;
|
||||
new-expression = logical-or | "new" name ;
|
||||
logical-or = logical-and { "||" logical-and } ;
|
||||
logical-and = comparison { "&&" comparison } ;
|
||||
comparison = term { compare-op term } ;
|
||||
term = factor { ( "+" | "-" ) factor } ;
|
||||
factor = power { ( "*" | "/" | "%" ) power } ;
|
||||
power = unary [ "^" unary ] ;
|
||||
unary = ( "+" | "-" | "!" ) unary | postfix ;
|
||||
postfix = primary { call | member } ;
|
||||
call = "(" [ expression { "," expression } ] ")" ;
|
||||
member = "." name ;
|
||||
primary = literal | declaration | name | "(" expression ")" ;
|
||||
declaration = type-name name ;
|
||||
type-name = builtin-type | name ;
|
||||
```
|
||||
|
||||
`literal` включает строковый, числовой, булев и `null` литералы. Комментарии `// ...` и пробельные символы между токенами игнорируются.
|
||||
|
||||
@@ -1,17 +1,2 @@
|
||||
# Операторы
|
||||
|
||||
| Оператор | Назначение |
|
||||
| -------------------- | -------------------------------------- |
|
||||
| +, - | Сложение/вычитание, унарные плюс/минус |
|
||||
| *, /, % | Умножение, деление, остаток |
|
||||
| ^ | Возведение в степень |
|
||||
| ==, !=, <, <=, >, >= | Сравнение |
|
||||
| ! | Логическое отрицание |
|
||||
| &&, || | Логические И и ИЛИ |
|
||||
| = | Присваивание |
|
||||
| . | Доступ к полю и методу |
|
||||
|
||||
Для строк и объектов доступны только `==` и `!=`.
|
||||
Ключевое слово `new` создаёт экземпляр класса: `new Point`.
|
||||
|
||||
Приоритет от большего к меньшему: унарные операции; ^; *, /, %; +, -; сравнения; &&; ||; =. Скобки имеют высший приоритет.
|
||||
|
||||
@@ -1,22 +1,2 @@
|
||||
# Система типов
|
||||
|
||||
| Типы | Значение |
|
||||
| ----------------- | ---------------------------------------- |
|
||||
| int, uint | Целое машинного размера |
|
||||
| i8, i16, i32, i64 | Знаковые целые фиксированного размера |
|
||||
| u8, u16, u32, u64 | Беззнаковые целые фиксированного размера |
|
||||
| str | Строка |
|
||||
| char | Символ |
|
||||
| bool | Булево значение |
|
||||
| ClassName | Экземпляр пользовательского класса |
|
||||
|
||||
Также существует `null`, применимое к объектным значениям.
|
||||
Тип указывается при объявлении переменной, поля и аргумента функции.
|
||||
|
||||
Объект совместим с объектом того же класса или с `null`.
|
||||
Объекты разных классов несовместимы.
|
||||
Строки поддерживают `==` и `!=`, объекты сравниваются по ссылке.
|
||||
Поля класса имеют объявленные типы и последовательные слоты.
|
||||
|
||||
Для функции тип результата указывается после списка параметров.
|
||||
Для функции без результата его можно опустить.
|
||||
|
||||
Reference in New Issue
Block a user