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

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
Amirobot (обсуждение | вклад)
исправление опечаток, внутренних ссылок
Строка 1: Строка 1:
{{Карточка языка программирования
|name = XL
|logo =
|caption =
|paradigm = [[Мультипарадигменный язык программирования|мультипарадигменный]]: [[Императивное программирование|императивный]]
|class =
|year = 2000
|designer = [[Christophe de Dinechin]]
|developer = [[Christophe de Dinechin]]
|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]]
}}

{{Плохой перевод}}
{{Плохой перевод}}
{{rq|check|style|wikify}}
{{rq|check|style|wikify}}
'''XL''' — основа расширяемого языка eXtensible Language. Это язык программирования, разработанный для поддержки концептуального программирования.
'''XL''' — основа расширяемого языка eXtensible Language. Это язык программирования, разработанный для поддержки концептуального программирования.
__TOC__

XL предоставляет программно расширяемый синтаксис и семантику.
XL предоставляет программно расширяемый синтаксис и семантику.
Плагины компилятора могут быть использованы для добавления новых возможностей в язык.
Плагины компилятора могут быть использованы для добавления новых возможностей в язык.
Строка 11: Строка 33:
== Язык ==
== Язык ==
В XL определено три уровня абстракции:
В XL определено три уровня абстракции:
* XL0 определяет как исходный текст должен преобразовыватся в [[структурное дерево]]
* XL0 определяет как исходный текст должен преобразовываться в [[структурное дерево]]
* XL1 определяет основу языка с возможностями сравнимыми с [[C++]]
* XL1 определяет основу языка с возможностями сравнимыми с [[C++]]
* XL2 определяет стандартную библиотеку, включающую основные типы данных и операторы.
* XL2 определяет стандартную библиотеку, включающую основные типы данных и операторы.


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


Пример программы [[Hello World]] в XL выглядит следующим образом:
Пример программы [[Hello World]] в XL выглядит следующим образом:
Строка 34: Строка 56:
Структурное дерево содержит 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>.
Строка 40: Строка 62:
* ''текстовый (text)'' узел представляет текстовое содержимое. Они обычно заключаются в одинарные или двойные кавычки, например <code>"Слава КПСС!"</code> or <code>'Ё'</code>. В тоже время с помощью синтаксического файла можно добавить другие разделители, включая разделители для многострочного текстового содержимого.
* ''текстовый (text)'' узел представляет текстовое содержимое. Они обычно заключаются в одинарные или двойные кавычки, например <code>"Слава КПСС!"</code> or <code>'Ё'</code>. В тоже время с помощью синтаксического файла можно добавить другие разделители, включая разделители для многострочного текстового содержимого.


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


* ''инфиксные (infix)'' узлы представляются двумя узлами связаными инфиксным символом. Например: <code>A+1</code> или <code>2 and 3</code>.
* ''инфиксные (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)'' узлы представляются как узел заключённый в группированные символы, как например <code>(A)</code>, <code>[Index]</code>. Отступ непосредственно представлен блочным узлом.


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

Версия от 23:38, 7 марта 2010

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) узел представляет текстовое содержимое. Они обычно заключаются в одинарные или двойные кавычки, например "Слава КПСС!" or 'Ё'. В тоже время с помощью синтаксического файла можно добавить другие разделители, включая разделители для многострочного текстового содержимого.
  • символьный (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")))

Ссылки