XL (язык программирования): различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
оформление
м checkwiki fixes (1, 2, 9, 17, 22, 26, 38, 48, 50, 52, 54, 64, 65, 66, 76, 81, 86, 88, 89, 101)
(не показана 41 промежуточная версия 37 участников)
Строка 1: Строка 1:
{{Значения|XL}}
'''XL''' основа расширяемого языка eXtensible Language. Это язык программирования разработанный для поддержки концептуального программирования.
{{Плохой перевод}}
{{rq|check|style|wikify}}


{{Карточка языка программирования
XL предоставляет программно расширяемый синтаксис и семантику.
|name = XL
Плагины компилятора могут быть использованы для добавления новых возможностей в язык.
|logo =
Базовый набор плагинов реализован согласно стандартного императивного языка.
|caption =
Программисты могут написать собственные плагины для реализации специфичных для приложения нотаций, таких как отличитель символов, которые позже могут просто встроены в язык.
|paradigm = [[Мультипарадигменный язык программирования|мультипарадигменный]]: [[Императивное программирование|императивный]]
|class =
|year = 2000
|latest_release_version = 0.1
|latest_release_date = 2010
|latest_test_version = 2-27-2010
|latest_test_date = {{Release date|mf=yes|2010|2|27}}
|typing = [[Строгая типизация|строгая]]
|implementations =
|dialects =
|influenced_by = [[Ада (язык программирования)|Ada]], [[C++]]
|license = [[GPLv2]]
|website = http://xlr.sf.net
|operating_system = [[Unix-like]]
}}

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

== Описание ==
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 defines how an input text is transformed into a [[parse tree]].
* XL1 определяет основу языка с возможностями сравнимыми с [[C++]].
* XL0 определяет как исходный текст должен трансформироватся в [[структурное дерево]]
* XL1 определяет основу языка с возможностями сравнимыми с [[C++]]
* XL2 определяет стандартную библиотеку, включающую основные типы данных и операторы.
* XL2 определяет стандартную библиотеку, включающую основные типы данных и операторы.


XL не имеет ни [[примитивный тип|примитивных типов]], ни зарезервированных слов.

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


Пример программы [[Hello World]] в XL выглядит следующим образом:
Пример программы [[Hello World]] в XL выглядит следующим образом:
Строка 21: Строка 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 может быть сконфигурирован используя специальный описательный [[файл]], в котором определено как представляется текст и назначен приоритет операций.
Базовый синтаксический файл определяет общие математические нотации, например "+" для сложения, которые обычно приняты в порядке операций.
Базовый синтаксический файл определяет общие математические нотации, например «+» для сложения, которые обычно приняты в порядке операций.


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


* ''целый (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>. В то же время с помощью синтаксического файла можно добавить другие разделители, включая разделители для многострочного текстового содержимого.

* ''символьный (symbol)'' узел представляет имена или операторы. Имена — это последовательность букв или цифр начинающееся с буквы. Например: <code>Пётр1</code>. В уровне XL0 учитывается регистр букв, но XL1 игнорирует регистр и символы нижнего подчёркивания, так что <code>ИванСусанин</code> <code>иван_сусанин</code> являются равнозначными именами.
* ''текстовый (text)'' узел представляет текстовое содержимое. Они обычно заключаются в одинарные или двойные кавычки, например <code>"Слава КПСС!"</code> or <code>'Ё'</code>. В тоже время с помощью синтаксического файла можно добавить другие разделители, включая разделители для многострочного текстового содержимого.
* ''инфиксные (infix)'' узлы представляются двумя узлами, связанными инфиксным символом. Например: <code>A+1</code> или <code>2 and 3</code>.

* ''symbol'' nodes represent names or operators. Names are sequence of alphanumeric characters beginning with a letter, like <code>Hello</code>. XL0 preserves case, but XL1 ignores case and underscores, so that <code>JohnDoe</code> and <code>john_doe</code> are the same name. Symbols are sequence of non-alphanumeric characters, like <code>*</code> or <code>=/=</code>.

* ''символьный (symbol)'' узел представляет имена или операторы. Имена - это последовательность букв или цифр начинающееся с буквы. Например: <code>Пётр1</code>. В уровне XL0 учитывается регистр букв, но XL1 игнорирует регистр и символы нижнего подчёркивания, так что <code>ИванСусанин</code> <code>иван_сусанин</code> являются равнозначными именами.

* ''infix'' nodes represent two nodes related by an infix symbol, like <code>A+1</code> or <code>2 and 3</code>. Infix nodes are in particular used to separate lines, with an infix "new-line" symbol.

* ''инфиксные (infix)'' узлы представляются двумя узлами связаными инфиксным символом. Например: <code>A+1</code> или <code>2 and 3</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'' nodes represent a node surrounded by grouping symbols, like <code>(A)</code>, <code>[Index]</code>. Indentation is internally represented by a block node.

* ''блочные (block)'' узлы представляются как узел заключённый в группировочные сиволы, как например <code>(A)</code>, <code>[Index]</code>. Отступ непосредственно представлен блочным узлом.


With the default syntax file, the following is valid XL0, irrespective of any semantics.
Со стандартным синтаксическим файлом, ниже следующее является правильным XL0, независимым от любой семантики.
Со стандартным синтаксическим файлом, ниже следующее является правильным XL0, независимым от любой семантики.


A = B + "Hello"
A = B + "Hello"


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


infix("=",
infix("=",
Строка 65: Строка 75:
infix("+",
infix("+",
symbol("B"), text("Hello")))
symbol("B"), text("Hello")))



== Ссылки ==
== Ссылки ==
* [http://xlr.sf.net Страничка разработки на SourceForge]
* [http://xlr.sf.net Страничка разработки на SourceForge]
* [http://mozart-dev.sf.net Исторически сайт разработки]
* [http://mozart-dev.sf.net Исторически сайт разработки]
* [http://www.byte.com/documents/s=7784/byt1070853295820/1208_heller.html Статья в Byte]
* [https://web.archive.org/web/20080106165715/http://www.byte.com/documents/s=7784/byt1070853295820/1208_heller.html Статья в Byte]
* [http://www.ddj.com/java/184404696 Статья в журнале "Dr Dobbs Journal"]
* [http://www.ddj.com/java/184404696 Статья в журнале «Dr Dobbs Journal»]
* [http://xlr.sourceforge.net/Concept%20Programming%20Presentation.pdf Слайды о XL и концептном программировании]
* [http://xlr.sourceforge.net/Concept%20Programming%20Presentation.pdf Слайды о XL и концептном программировании]


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

[[de:XL (XML-Programmiersprache)]]
[[fr:XL (langage)]]
[[en:XL_(programming_language)]]

Версия от 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")))

Ссылки