XL (язык программирования)

Материал из Википедии — свободной энциклопедии
Это старая версия этой страницы, сохранённая Stokito (обсуждение | вклад) в 17:18, 21 января 2008 (Язык). Она может серьёзно отличаться от текущей версии.
Перейти к навигации Перейти к поиску

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 nodes represent names or operators. Names are sequence of alphanumeric characters beginning with a letter, like Hello. XL0 preserves case, but XL1 ignores case and underscores, so that JohnDoe and john_doe are the same name. Symbols are sequence of non-alphanumeric characters, like * or =/=.
  • символьный (symbol) узел представляет имена или операторы. Имена - это последовательность букв или цифр начинающееся с буквы. Например: Пётр1. В уровне XL0 учитывается регистр букв, но XL1 игнорирует регистр и символы нижнего подчёркивания, так что ИванСусанин иван_сусанин являются равнозначными именами.
  • infix nodes represent two nodes related by an infix symbol, like A+1 or 2 and 3. Infix nodes are in particular used to separate lines, with an infix "new-line" symbol.
  • инфиксные (infix) узлы представляются двумя узлами связаными инфиксным символом. Например: A+1 или 2 and 3.
  • префиксные (prefix) узлы представляются двумя последовательными узлами. Например: Write "Слава КПСС!". Их так же используют для постфиксной записи: 3! или Open?.
  • block nodes represent a node surrounded by grouping symbols, like (A), [Index]. Indentation is internally represented by a block node.
  • блочные (block) узлы представляются как узел заключённый в группировочные сиволы, как например (A), [Index]. Отступ непосредственно представлен блочным узлом.


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

A = B + "Hello"

It parses as:

infix("=",
      symbol("A"),
      infix("+",
            symbol("B"), text("Hello")))


Ссылки