Парадигма | Сопоставление с образцом и переписывание терминов |
---|---|
Разработано | Чарльз Халперн-Хаму Джеймс Корди |
Разработчик | Джеймс Корди Чарльз Халперн-Хаму Ян Кармайкл Эрик Промислоу |
Веб-сайт | www.txl.ca |
TXL — язык программирования специального назначения, первоначально разработанный Чарльзом Халперном-Хаму и Джеймсом Корди в Университете Торонто в 1985 году. Аббревиатура «TXL» изначально расшифровывалась как «Turing eXtender Language» в честь изначального назначения языка — спецификации и быстрого прототипирования вариантов и расширений языка программирования Тьюринга , но в настоящее время не имеет какой-либо осмысленной интерпретации.
Современный TXL специально разработан для создания, манипулирования и быстрого прототипирования языковых описаний, инструментов и приложений с использованием преобразования источника. Это гибридный функциональный / правильный язык, использующий функциональное программирование первого порядка на более высоком уровне и переписывание терминов на более низком уровне. Формальная семантика и реализация TXL основаны на формальном переписывании терминов , но структуры терминов в значительной степени скрыты от пользователя из-за стиля спецификации шаблонов, похожего на примеры.
Каждая программа TXL состоит из двух компонентов: описание исходных структур, которые должны быть преобразованы, заданное как (возможно, неоднозначная) контекстно-свободная грамматика с использованием расширенной формы Бэкуса-Наура ; и набор правил преобразования дерева, заданный с использованием пар шаблон/замена, объединенных с использованием функционального программирования первого порядка. TXL разработан, чтобы позволить программисту явно контролировать интерпретацию, применение, порядок и откат как правил разбора, так и правил перезаписи, что позволяет выражать широкий спектр основанных на грамматике методов, таких как гибкий разбор.
Первый компонент анализирует входное выражение в дерево с помощью сопоставления с образцом . Второй компонент использует Term-rewriting способом, похожим на Yacc, для создания преобразованного вывода.
TXL чаще всего используется в задачах анализа и реинжиниринга программного обеспечения, таких как восстановление проекта , а также при быстром прототипировании новых языков программирования и диалектов.
%Спецификация синтаксисаопределить программу [повторить номер]конец определения
%Правила преобразованияправило основное заменить $ [повторить число] N1 [число] N2 [число] Отдых [повторить число] где Н1 [> Н2] к N2 N1 Отдыхконец правила
%Спецификация синтаксисаопределить программу [число]конец определения
%Правила преобразованияфункция основная заменить [программу] п [число] к п [факт][факт0]конечная функция
функциональный факт заменить [число] н [число] построить nMinusOne [число] н [- 1] где н [> 1] построить фактМинусОдин [число] nMinusOne [факт] к н [* фактМинусОдин]конечная функция функция факт0 заменить [число] 0 к 1конечная функция