XL — основа расширяемого языка eXtensible Language. Это язык программирования, разработанный для поддержки концептуального программирования.

Описание XL предоставляет программно расширяемый синтаксис и семантику. Плагины компилятора могут быть использованы для добавления новых возможностей в язык. Базовый набор плагинов реализован согласно стандартным императивным языкам. Язык предоставляет возможность написания собственных плагинов для реализации специфических задач, таких как работа с другими системами счисления, что позже может быть просто встроено в язык.

Язык В XL определено три уровня абстракции: XL0 определяет как исходный текст должен преобразовываться в структурное дерево. XL1 определяет основу языка с возможностями сравнимыми с C++. XL2 определяет стандартную библиотеку, включающую основные типы данных и операторы.

XL не имеет ни примитивных типов, ни зарезервированных слов. Все используемые операторы и типы данных, такие как целые числа или оператор сложения, объявлены в стандартной библиотеке (XL2). Реализация XL1 является переносимой для выполнения в разных средах и платформах, однако если конкретный процессор не поддерживает умножения чисел с плавающей точкой, то описание соответствующего оператора в стандартной библиотеке может быть пропущено и использование такого умножения может закончиться ошибкой во время компиляции.

Пример программы Hello World в XL выглядит следующим образом:

use XL.TEXT_IO WriteLn "Hello World" Альтернативным написанием в стиле, более пригодном для широко масштабируемых программ, в виде: import IO = XL.TEXT_IO IO.WriteLn "Hello World" Пример программы, вычисляющей факториал чисел от 1 до 20:0! is 1 N! is N * (N-1)! for I in 1..20 loop print I!

Синтаксис Синтаксис определён на уровне XL0. Конфигурация компилятора задаётся в специальном е, в котором определено как представляется текст и назначен приоритет операций. Базовый синтаксический файл определяет общие математические нотации, например «+» для сложения, которые обычно приняты в порядке операций.

Структурное дерево содержит 7 типов узлов: 4 конечных узла типов (целое, вещественное, текст и символ) и 3 внутренних узла типов (инфиксный, префикс и блок).

целый (integer) узел представляет собой целый литерал, такой как 2. Символ # может быть использован для указания основания числа отличного от 10, например 2#1001 — число 1001 в двоичной системе счисления. Для удобочитаемости можно использовать символ «_» нижнее подчёркивание: 1_000_000. вещественный (real) узел представляет собой не слитные числа, как например 2.5. Нотации основы и разделителей могут быть использованы как и для целых узлов, например 16#F.FFF#E-10. текстовый (text) узел представляет текстовое содержимое. Они обычно заключаются в одинарные или двойные кавычки, например "Слава КПСС!" или 'Ё'. В то же время с помощью синтаксического файла можно добавить другие разделители, включая разделители для многострочного текстового содержимого. символьный (symbol) узел представляет имена или операторы. Имена — это последовательность букв или цифр начинающееся с буквы. Например: Пётр1. В уровне XL0 учитывается регистр букв, но XL1 игнорирует регистр и символы нижнего подчёркивания, так что ИванСусанин иван_сусанин являются равнозначными именами. инфиксные (infix) узлы представляются двумя узлами, связанными инфиксным символом. Например: A+1 или 2 and 3. префиксные (prefix) узлы представляются двумя последовательными узлами. Например: Write "Слава КПСС!". Их так же используют для постфиксной записи: 3! или Open?. блочные (block) узлы представляются как узел заключённый в группированные символы, как например (A), [Index]. Отступ непосредственно представлен блочным узлом.

Со стандартным синтаксическим файлом, ниже следующее является правильным XL0, независимым от любой семантики.

A = B + "Hello"

После обработки это будет выглядеть как:

infix("=", symbol("A"), infix("+", symbol("B"), text("Hello")))

Ссылки Страничка разработки на SourceForge Исторически сайт разработки Статья в Byte

Категория:Языки программирования с расширяемым синтаксисом