XL (язык программирования): различия между версиями
[непроверенная версия] | [непроверенная версия] |
Neklaum (обсуждение | вклад) м источники |
РобоСтася (обсуждение | вклад) м checkwiki fixes (1, 2, 9, 17, 22, 26, 38, 48, 50, 52, 54, 64, 65, 66, 76, 81, 86, 88, 89, 101) |
||
(не показаны 4 промежуточные версии 4 участников) | |||
Строка 23: | Строка 23: | ||
}} |
}} |
||
'''XL''' — основа расширяемого языка eXtensible Language. Это [[ |
'''XL''' — основа расширяемого языка eXtensible Language. Это [[язык программирования]], разработанный для поддержки [[Концептуальное программирование|концептуального программирования]]. |
||
== Описание == |
== Описание == |
||
XL предоставляет программно расширяемый [[Синтаксис (программирование)|синтаксис]] и [[Семантика (программирование)|семантику]]. [[Плагин |
XL предоставляет программно расширяемый [[Синтаксис (программирование)|синтаксис]] и [[Семантика (программирование)|семантику]]. [[Плагин]]ы компилятора могут быть использованы для добавления новых возможностей в язык. Базовый набор плагинов реализован согласно стандартным императивным языкам. Программисты могут написать собственные [[плагин]]ы для реализации специфических задач, таких как работа с другими [[Система счисления|системами счисления]], что позже может быть просто встроено в язык. |
||
== Язык == |
== Язык == |
||
В XL определено три уровня абстракции: |
В XL определено три уровня абстракции: |
||
* XL0 определяет как исходный текст должен преобразовываться в [https://ru.wikipedia.org/wiki/%D0%94%D0%B5%D1%80%D0%B5%D0%B2%D0%BE_%28%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85%29?wprov=sfla1 структурное дерево] |
* XL0 определяет как исходный текст должен преобразовываться в [https://ru.wikipedia.org/wiki/%D0%94%D0%B5%D1%80%D0%B5%D0%B2%D0%BE_%28%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85%29?wprov=sfla1 структурное дерево]. |
||
* XL1 определяет основу языка с возможностями сравнимыми с [[C++]] |
* XL1 определяет основу языка с возможностями сравнимыми с [[C++]]. |
||
* XL2 определяет стандартную библиотеку, включающую основные типы данных и операторы. |
* XL2 определяет стандартную библиотеку, включающую основные типы данных и операторы. |
||
XL не имеет ни [[примитивный тип|примитивных типов]], ни зарезервированных слов. |
XL не имеет ни [[примитивный тип|примитивных типов]], ни зарезервированных слов. |
||
Все используемые операторы и типы данных, как |
Все используемые операторы и типы данных, такие как целые числа или оператор сложения, объявлены в стандартной библиотеке (XL2). XL1 является переносимым для выполнения в разных средах и платформах, однако если конкретный процессор не поддерживает умножения чисел с плавающей точкой, то описание соответствующего оператора в стандартной библиотеке может быть пропущено и использование такого умножения может закончиться ошибкой во время компиляции. |
||
в Xданной ой гарантне может бытьнет: если конкретный процессор не поддерживает умножения чисел с плавающей точкой, то описание соответствующего оператора в стандартной библиотеке может быть пропущено и использование такого умножения может закончиться ошибкой во время компиляции. |
|||
Пример программы [[Hello World]] в XL выглядит следующим образом: |
Пример программы [[Hello World]] в XL выглядит следующим образом: |
||
Строка 43: | Строка 41: | ||
use XL.TEXT_IO |
use XL.TEXT_IO |
||
WriteLn "Hello World" |
WriteLn "Hello World" |
||
Альтернативным написанием в стиле, более пригодном для широко масштабируемых программ, в виде: |
Альтернативным написанием в стиле, более пригодном для широко масштабируемых программ, в виде: |
||
import IO = XL.TEXT_IO |
import IO = XL.TEXT_IO |
||
IO.WriteLn "Hello World" |
IO.WriteLn "Hello World" |
||
Пример программы, вычисляющей [[факториал]] чисел от 1 до 20:<syntaxhighlight> |
|||
0! is 1 |
|||
N! is N * (N-1)! |
|||
for I in 1..20 loop |
|||
print I! |
|||
</syntaxhighlight> |
|||
== Синтаксис == |
== Синтаксис == |
||
[[Синтаксис (программирование)|Синтаксис]] определён на уровне XL0. Этап компиляции XL0 может быть сконфигурирован используя |
[[Синтаксис (программирование)|Синтаксис]] определён на уровне XL0. Этап компиляции XL0 может быть сконфигурирован используя специальный описательный [[файл]], в котором определено как представляется текст и назначен приоритет операций. |
||
Базовый синтаксический файл определяет общие математические нотации, например «+» для сложения, которые обычно приняты в порядке операций. |
Базовый синтаксический файл определяет общие математические нотации, например «+» для сложения, которые обычно приняты в порядке операций. |
||
Строка 56: | Строка 58: | ||
* ''целый (integer)'' узел представляет собой целый литерал, такой как <code>2</code>. Знак <code>#</code> может быть использован для указания основания числа отличного от 10, например <code>2#1001</code> — число 1001 в двоичной системе счисления. Для удобочитаемости можно использовать знак «_» нижнее подчёркивание: <code>1_000_000</code>. |
* ''целый (integer)'' узел представляет собой целый литерал, такой как <code>2</code>. Знак <code>#</code> может быть использован для указания основания числа отличного от 10, например <code>2#1001</code> — число 1001 в двоичной системе счисления. Для удобочитаемости можно использовать знак «_» нижнее подчёркивание: <code>1_000_000</code>. |
||
* ''вещественный (real)'' узел представляет собой не слитные числа, как например <code>2.5</code>. Нотации основы и разделителей могут быть использованы как и для целых узлов, например <code>16#F.FFF#E-10</code>. |
* ''вещественный (real)'' узел представляет собой не слитные числа, как например <code>2.5</code>. Нотации основы и разделителей могут быть использованы как и для целых узлов, например <code>16#F.FFF#E-10</code>. |
||
* ''текстовый (text)'' узел представляет текстовое содержимое. Они обычно заключаются в одинарные или двойные кавычки, например <code>"Слава КПСС!"</code> или <code>'Ё'</code>. В то же время с помощью синтаксического файла можно добавить другие разделители, включая разделители для многострочного текстового содержимого. |
* ''текстовый (text)'' узел представляет текстовое содержимое. Они обычно заключаются в одинарные или двойные кавычки, например <code>"Слава КПСС!"</code> или <code>'Ё'</code>. В то же время с помощью синтаксического файла можно добавить другие разделители, включая разделители для многострочного текстового содержимого. |
||
* ''символьный (symbol)'' узел представляет имена или операторы. Имена — это последовательность букв или цифр начинающееся с буквы. Например: <code>Пётр1</code>. В уровне XL0 учитывается регистр букв, но XL1 игнорирует регистр и символы нижнего подчёркивания, так что <code>ИванСусанин</code> <code>иван_сусанин</code> являются равнозначными именами. |
* ''символьный (symbol)'' узел представляет имена или операторы. Имена — это последовательность букв или цифр начинающееся с буквы. Например: <code>Пётр1</code>. В уровне XL0 учитывается регистр букв, но XL1 игнорирует регистр и символы нижнего подчёркивания, так что <code>ИванСусанин</code> <code>иван_сусанин</code> являются равнозначными именами. |
||
⚫ | |||
⚫ | |||
* ''префиксные (prefix)'' узлы представляются двумя последовательными узлами. Например: <code>Write "Слава КПСС!"</code>. Их так же используют для постфиксной записи: <code>3!</code> или <code>Open?</code>. |
* ''префиксные (prefix)'' узлы представляются двумя последовательными узлами. Например: <code>Write "Слава КПСС!"</code>. Их так же используют для постфиксной записи: <code>3!</code> или <code>Open?</code>. |
||
* ''блочные (block)'' узлы представляются как узел заключённый в группированные символы, как например <code>(A)</code>, <code>[Index]</code>. Отступ непосредственно представлен блочным узлом. |
* ''блочные (block)'' узлы представляются как узел заключённый в группированные символы, как например <code>(A)</code>, <code>[Index]</code>. Отступ непосредственно представлен блочным узлом. |
||
Версия от 13:11, 13 сентября 2024
Необходимо проверить качество перевода, исправить содержательные и стилистические ошибки. |
Для улучшения этой статьи желательно:
|
XL | |
---|---|
Класс языка | мультипарадигменный: императивный |
Появился в | 2000 |
Автор | Кристоф Де Динечин[вд] |
Разработчик | Кристоф Де Динечин[вд] |
Выпуск | 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 является переносимым для выполнения в разных средах и платформах, однако если конкретный процессор не поддерживает умножения чисел с плавающей точкой, то описание соответствующего оператора в стандартной библиотеке может быть пропущено и использование такого умножения может закончиться ошибкой во время компиляции.
Пример программы 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. Этап компиляции 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")))