XL (язык программирования): различия между версиями
[отпатрулированная версия] | [отпатрулированная версия] |
U-bot (обсуждение | вклад) более не распознаётся как изолированная статья, removed: {{изолированная статья|сирота1}} |
EmausBot (обсуждение | вклад) м r2.6.4) (робот добавил: de:XL (Programmiersprache) |
||
Строка 88: | Строка 88: | ||
* [http://xlr.sourceforge.net/Concept%20Programming%20Presentation.pdf Слайды о XL и концептном программировании] |
* [http://xlr.sourceforge.net/Concept%20Programming%20Presentation.pdf Слайды о XL и концептном программировании] |
||
[[de:XL (Programmiersprache)]] |
|||
[[en:XL (programming language)]] |
[[en:XL (programming language)]] |
||
[[fa:ایکس ال (زبان برنامهنویسی)]] |
[[fa:ایکس ال (زبان برنامهنویسی)]] |
Версия от 00:04, 2 февраля 2011
XL | |
---|---|
Класс языка | мультипарадигменный: императивный |
Появился в | 2000 |
Автор | Christophe de Dinechin |
Разработчик | Christophe de Dinechin |
Выпуск | 0.1 (2010) |
Тестовая версия | 2-27-2010 |
Система типов | строгая |
Испытал влияние | Ada, C++ |
Лицензия | GPLv2 |
Сайт | xlr.sf.net |
ОС | Unix-подобная операционная система |
Необходимо проверить качество перевода, исправить содержательные и стилистические ошибки. |
Для улучшения этой статьи желательно:
|
XL — основа расширяемого языка eXtensible Language. Это язык программирования, разработанный для поддержки концептуального программирования.
XL предоставляет программно расширяемый синтаксис и семантику. Плагины компилятора могут быть использованы для добавления новых возможностей в язык. Базовый набор плагинов реализован согласно стандартного императивного языка. Программисты могут написать собственные плагины для реализации специфических задач, таких как работа с другими системами счисления, что позже может быть просто встроено в язык.
Язык
В XL определено три уровня абстракции:
- XL0 определяет как исходный текст должен преобразовываться в структурное дерево
- XL1 определяет основу языка с возможностями сравнимыми с C++
- XL2 определяет стандартную библиотеку, включающую основные типы данных и операторы.
XL не имеет ни примитивных типов, ни зарезервированных слов. Все используемые операторы и типы данных, как то: целые числа или оператор сложения, объявлены в стандартной библиотеке (XL2). XL1 является переносимым для выполнения в разных средах и платформах. А вот в XL2 такой гарантии уже нет: если конкретный процессор не поддерживает умножения чисел с плавающей точкой, то описание соответствующего оператора в стандартной библиотеке может быть пропущено и использование такого умножения может закончиться ошибкой во время компиляции.
Пример программы Hello World в XL выглядит следующим образом:
use XL.TEXT_IO WriteLn "Hello World"
Альтернативным написанием в стиле, более пригодном для широко масштабируемых программ, будет так:
import IO = XL.TEXT_IO IO.WriteLn "Hello World"
Синтаксис
Синтаксис определён на уровне XL0. Этап компиляции 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")))