Универсальный синтаксис для языков программирования
От: Chrome  
Дата: 15.10.08 14:59
Оценка: 3 (1)
Вопрос такой – возможно ли отделить синтаксис языков программирования от семантики.
Возможно ли создать универсальный синтаксис, эффективный для человека и пригодный для описания произвольной семантики современных языков программирования.

Под описанием семантики я подразумеваю формирование(при помощи универсального синтаксиса)дерева — эквивалентного дереву разбора, которое формирует парсер обычного языка.
Эффективный для человека – означает, что эквивалентное описание должно быть не намного длиннее оригинального.

Сегодня синтаксис и семантика языка связаны – каждый язык имеет свою грамматику для описания набора концептов, которыми язык оперирует – классов, функций, переменных и т д
Несколько языков имеют примерно общую семантику, но различный синтаксис, как в примере Visual basic .Net and C#
Более того, существуют предложения создавать грамматику на каждый новый набор понятий (DSL)

Напрашивается аналогия с XML
До него каждый изобратал свой формат для каждого вида текстовых данных, после – резко перестали.
Для примера пара XML и HTML – у последнего есть несколько вкусностей – иногда можно опустить кавычки вокруг значений атрибутов, атрибуты могут вообще не иметь значений, открывающие и закрывающие таги могут пересекаться. Некоторые элементы не требуют закрывающих тагов. Но от этого постепенно отказываются в пользу универсальности(XHTML) – никому не хочется изучать эти часности.
И речь не идет о машинном разборе – HTML часто пишет и читает человек.
Тем не меннее, XHTML выглядит предпочтительно.

Начасть можно с рассмотрения лексических примитивов:
Оформление комментариев
Допустимые символы в идентификаторах
Синтаксис строк – вид кавычек, специальные символы, перенос на новую строку
Формат чисел
Чувствительность к регистру.
Все эти детали изменяются от языка к языку, на усмотрение его авторов, не принося ничего, кроме головной боли для пользователей.

Потребность в синтаксисе не связанном с семантикой зачастую возникает в рамках программирования на любом языке.
Когда в программу на C# или C++ нужно вставить какое нибудь дерево, типа XML, HTML, SQL и т д — тут начинается нецелевое использование конструкций языка, таких как: темплейты, выражения, дерево классов. Функциональные языки приспосабливают свои функции.

Решение, не очень хорошее, в природе существует – синтаксис типа лиспа, или гораздо хуже XML – можно выразить что хочешь, но слишком многословно, и недостаточно статически типизировано.

Хотелось бы понять, почему конкретный синтаксис настолько более компактен по сравнению с общим и какие успехи достигнуты в данном направлении мыслящим сообществом.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.