Языки, которые могут изменить свой синтаксис? - PullRequest
2 голосов
/ 25 июля 2011

Существуют ли языки, в которых программист может изменить синтаксис языка в любой момент?

Это означает, что можно написать язык в понравившемся синтаксисе, и есть какой-то переводчик, чтобы перевести его обратно в некоторый «стандартный код», который можно скомпилировать или интерпретировать.

Кодтакже будет читаемым, потому что «стандартный код» может быть переведен в версию кода, которая нравится другому кодировщику.

У меня был этот вопрос, потому что некоторым людям может понравиться дизайн языка, но не нравится синтаксис.(например, Lisp с [] вместо (), Lisp с f (x) вместо (fx)).

Также было бы неплохо, если бы кто-нибудь мог предоставить некоторые академические источники по таким темам.

Редактировать: Я нашел один, FreeForm .

Ответы [ 3 ]

6 голосов
/ 25 июля 2011

В конкретном случае Лисп:

  • В Лиспе есть макросы! Вы можете преобразовать язык любым удобным для вас способом, используя макросы Lisp.
  • Вы также можете создавать макросы для чтения, чтобы изменить способ синтаксического анализа исходных выражений в Лиспе.
  • Для более обширных изменений в исходном формате, вы даже можете сделать свой собственный читатель. См. Пример читаемых S-выражений Дэвида А. Уилера для примера.
2 голосов
/ 25 июля 2011

Есть разные вещи, которые склоняются в этом направлении ... Но я подозреваю, что мой список пострадает от "О, нет, это совсем не волшебство!"синдром.

Но ...

  • Препроцессор C
  • Преобразователи кода (чтобы сделать код с отступом так, как вы предпочитаете, или как угодно)
  • Перегрузка операторов
  • Прекомпиляторы различных языков, такие как Coffeescript-to-Javascript в Rails 3.1
1 голос
/ 19 февраля 2012

Ваш вопрос нуждается в уточнении.

  1. Преобразование (f x) <---> f(x), похоже, называется lens , а не синтаксическим сахаром.Линзы являются двунаправленными преобразованиями, где синтаксический сахар в основном рассматривается как одностороннее преобразование.Проект Бумеранг предоставляет некоторые инструменты для изготовления линз;некоторые исследования приведены здесь: http://www.seas.upenn.edu/~harmony/. Тем не менее, я согласен, что некоторые виды синтаксического сахара могут быть реализованы в виде линз.

  2. Как правило, разрешено использовать оба "«Сахар» и «десахар» синтаксические формы в одном и том же месте, где f(x) и (f x) кажутся взаимоисключающими.(f x g(h y)) означает (f x g (h y)) или (f x (g h y))?Да, вы можете устранить неоднозначность, рассматривая пробелы как значимые, но есть некоторый недостаток.

  3. Изменение синтаксиса языка в любой точке - это другое дело.Такие inline предложения, как «теперь забудь (fx) синтаксис и используй синтаксис f (x)», могут рассматриваться как источник несоответствия;с другой стороны, такие пункты, как «расширение текущего двоичного оператора, заданного с помощью двоичного оператора # $», могут рассматриваться как полезная особенность.

  4. Необходимы дополнительные пояснения.

Я планирую перечислить все языки, которые могут изменить свой синтаксис после дополнительных разъяснений;возможно, это будет новый вопрос на http://programmers.stackexchange.com

...