The Dragon Language — краткая документация

Реализация: лёгкий интерпретатор на Python. Спецификация — чисто практическая.

Обзор overview

TDL — минималистичный интерпретируемый язык. В этой странице — самое важное: лексика, грамматика, вызовы и примеры, которые работают с интерпретатором.

Лексика tokens

Основные токены: NUMBER, STRING, NAME, NEWLINE, OP. Комментарии начинаются с #.

# числа
x = 42
# строки
s = "hello\nworld"

Грамматика syntax

Поддерживаются def, if, while, return. Тела можно писать в { ... } или одной инструкцией после заголовка.

def add(a, b) {
  return a + b
}

if x > 0 {
  print("plus")
}

Типы types

Поддерживаются числа (int/float), строки и булевы значения true/false. Значения представлены Python-типами внутри интерпретатора.

Переменные и область scope

Переменные живут в окружениях Env. Присваивание обновляет существующую переменную в ближайшем доступном окружении или создаёт локальную по умолчанию.

Операторы ops

Поддерживаются арифметические, сравнения и логические операторы. Приоритет: or < and < сравнения < + - < * / %.

1 + 2 * 3 == 7
not false

Управляющие конструкции flow

if и while работают как в знакомых языках. Внутренний return прерывает функцию через исключение-«return».

Функции functions

Определяются через def name(params) { ... }. Функции — объекты с замыканием: хранят окружение при создании. Вызов проверяет число аргументов.

def greet(name) {
  print("Hello, " + name)
}

greet("Alduin")

Примеры examples

FizzBuzz
fori = 1
while fori <= 15 {
  if fori % 15 == 0 { print("FizzBuzz") }
  elif fori % 3 == 0 { print("Fizz") }
  elif fori % 5 == 0 { print("Buzz") }
  else { print(fori) }
  fori = fori + 1
}

Запуск run

Запускается через Python-скрипт-интерпретатор. Простейшие шаги:

  1. Сохранить код как file.tdl
  2. Запустить: python3 interpreter.py file.tdl (имя скрипта — тот код, что у тебя есть)
Playground

Встроенный "play" позволяет вставить пример и увидеть преобразованный AST (ограничено — локально в браузере нет Python-рантайма).