From Wikipedia (Ru) - Reading time: 2 min
Необходимо проверить качество перевода c неуказанного языка, исправить содержательные и стилистические ошибки. |
Для улучшения этой статьи желательно: |
| XL | |
|---|---|
| Класс языка | мультипарадигменный: императивный |
| Появился в | 2000 |
| Автор | Кристоф Де Динечин[вд] |
| Разработчик | Кристоф Де Динечин[вд] |
| Выпуск | 0.1 (2010) |
| Тестовая версия | 2-27-2010 |
| Система типов | строгая |
| Испытал влияние | Ada, C++ |
| Лицензия | GPLv2 |
| Сайт | xlr.sf.net |
| ОС | Unix-подобная операционная система |
XL — основа расширяемого языка eXtensible Language. Это язык программирования, разработанный для поддержки концептуального программирования.
XL предоставляет программно расширяемый синтаксис и семантику. Плагины компилятора могут быть использованы для добавления новых возможностей в язык. Базовый набор плагинов реализован согласно стандартным императивным языкам. Программисты могут написать собственные плагины для реализации специфических задач, таких как работа с другими системами счисления, что позже может быть просто встроено в язык.
В XL определено три уровня абстракции:
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 внутренних узла типов (инфиксный, префикс и блок).
2. Символ # может быть использован для указания основания числа отличного от 10, например 2#1001 — число 1001 в двоичной системе счисления. Для удобочитаемости можно использовать символ «_» нижнее подчёркивание: 1_000_000.2.5. Нотации основы и разделителей могут быть использованы как и для целых узлов, например 16#F.FFF#E-10."Слава КПСС!" или 'Ё'. В то же время с помощью синтаксического файла можно добавить другие разделители, включая разделители для многострочного текстового содержимого.Пётр1. В уровне XL0 учитывается регистр букв, но XL1 игнорирует регистр и символы нижнего подчёркивания, так что ИванСусанин иван_сусанин являются равнозначными именами.A+1 или 2 and 3.Write "Слава КПСС!". Их так же используют для постфиксной записи: 3! или Open?.(A), [Index]. Отступ непосредственно представлен блочным узлом.Со стандартным синтаксическим файлом, ниже следующее является правильным XL0, независимым от любой семантики.
A = B + "Hello"
После обработки это будет выглядеть как:
infix("=",
symbol("A"),
infix("+",
symbol("B"), text("Hello")))