Гибкий
![]() | Эта статья включает список литературы , связанную литературу или внешние ссылки , но ее источники остаются неясными, поскольку в ней отсутствуют встроенные цитаты . ( Июль 2019 г. ) |
Lithe — экспериментальный язык программирования, созданный в 1982 году Дэвидом Сэндбергом из Вашингтонского университета , который позволяет программисту свободно выбирать собственный синтаксис. сочетает идеи синтаксически-ориентированного перевода и классов Lithe по-новому , в результате чего получается удивительно простой, но мощный язык.
Обзор
[ редактировать ]Стандартная модель программирования на основе классов не определяет механизм манипулирования объектами: там, где Smalltalk использует передачу сообщений, Lithe использует синтаксически-ориентированную трансляцию (SDT). SDT — это метод перевода строки в последовательность действий путем присоединения одного такого действия к каждому правилу грамматики. Таким образом, анализ строки грамматики создает последовательность применений правил. Lithe объединяет SDT с моделью классов, используя классы в качестве нетерминального алфавита грамматики. Поскольку класс грамматики, используемый Lithe, правильно содержит все контекстно-свободные грамматики, можно описать широкий спектр синтаксиса, а SDT предоставляет простой способ присоединения семантики к любому такому синтаксису.
Пакет — это единица модульности программы в Lithe. Пакет разделен на две части: одна определяет классы, а другая — правила. Скрытие информации достигается за счет требования как ключевых слов экспорта для тех правил и классов, которые должны быть видны вне пакета , так и включения имен исходных пакетов в предложение with потребительского пакета.
Примеры
[ редактировать ]Программирование в Lithe состоит из определения пар правил и классов. Возьмем, к примеру, задачу вычисления абсолютного значения числа:
rule "|" <i:int> "|" return int; {if i<0 then return -i else return i end}
После того, как эта пара правило-действие определена, ее можно свободно использовать в исходном коде Lithe, например, после этого будет действительным следующее выражение:
|x - y| + 3
Эквивалентное правило в BNF будет:
<int> ::= "|" <int> "|"
Обратите внимание, что описание Lithe меняет местами левую и правую части описания BNF, а затем добавляет имя к каждому нетерминалу в правой части BNF. Эти имена используются в части действия, которая выражается в виде строки, которая преобразуется в последовательность действий с использованием других, ранее определенных пар правило-действие (в конечном итоге некоторые из этих пар правило-действие будут вызывать примитивные действия).