встраивание одного вида синтаксиса в другой: это хитрый или умный? - PullRequest
2 голосов
/ 04 февраля 2009

Справочная информация: Недавно, глядя на «структурированный текстовый редактор», я заметил, что они использовали трюк для изменения python / perl / c ++ / java и др. в «структурированную» схему путем проникновения XML в комментарии соответствующих языков.

Я вспомнил один раз, когда видел этот трюк в файле Windows Bat. Операторы REM файла bat использовались для «скрытия» некоторого кода Perl.

Вопрос: Вы когда-нибудь видели случай, когда кто-то использовал комментарии языка программирования или языка разметки для встраивания синтаксиса совершенно другого языка? Если да, можете ли вы дать ссылку на пример или объяснить, что это было?

Если нет, вот пример:

Вопрос: Является ли этот вид "хитрости" умной и полезной идеей? Если да, можете ли вы перечислить особый случай, когда вы использовали этот трюк? Если нет, можете ли вы описать, почему вы думаете, что это плохая идея?

Ответы [ 7 ]

3 голосов
/ 04 февраля 2009

Вы говорите о полиглотах , абсолютно захватывающем аспекте компьютерного программирования и прекрасном упражнении в неоднозначности некоторых языков сценариев / программирования. Хотя это определенно интригующее понятие, их редко можно увидеть за пределами арены новизны. Если говорить с точки зрения программиста, то, безусловно, было бы подвигом заставить вашу работу функционировать в нескольких, совершенно разных средах; Однако, учитывая, что полиглоты, как правило, полагаются на всевозможные хаки и обходные пути с помощью комментариев, это почти всегда выходит за рамки осуществимости. Определенно стоит посмотреть, если вы еще не видели, что они могут сделать; Я рекомендую этот .

Верьте или нет, этот единственный файл будет правильно скомпилирован (в некотором роде, в форме или форме) на пятнадцати отдельных языках:

  1. HTML
  2. Баш
  3. ЗШ
  4. C89
  5. C99
  6. C ++
  7. Makefile
  8. рубин
  9. Tcl
  10. Perl
  11. Haskell
  12. Python
  13. JavaScript
  14. Brainfuck
  15. Пробелы
2 голосов
/ 04 февраля 2009

Я не могу дать вам полный ответ, но Netbean любит использовать этот трюк в своем сгенерированном Java-коде.

Проблема в том, что исходный код Java должен быть средой между приложениями. Добавляя смысл к определенным комментариям, вы вынуждены придерживаться только Netbeans. Конечно, комментарии могут быть просто проигнорированы другими программами, но что, если эти комментарии будут перемещены или изменены? Я сделал это в Netbeans, и затем произошла некоторая забавность, когда я попытался загрузить файл обратно в Netbeans. Мне потребовалось время, чтобы исправить синтаксис (в комментариях!), Который, как предполагалось, был невидим для меня.

Лично я никогда бы не добавил больше смысла к существующему файлу, если бы он требовал более одной нелокальной модификации (то есть, вполне нормально иметь значение в одном комментарии, но не иметь смысла от этого комментария к этому комментарию ). Я определенно добавил бы другой файл, который в большинстве случаев содержал необходимые метаданные.

1 голос
/ 04 февраля 2009

WEB и CWEB Дональда Кнута встраивают Паскаль (WEB) и C (CWEB) в TeX. Вот пример из исходного кода METAFONT:

@ The following system-independent code makes the |xord| array contain a
suitable inverse to the information in |xchr|. Note that if |xchr[i]=xchr[j]|
where |i<j<@'177|, the value of |xord[xchr[i]]| will turn out to be
|j| or more; hence, standard ASCII code numbers will be used instead of
codes below @'40 in case there is a coincidence.

@<Set init...@>=
for i:=first_text_char to last_text_char do xord[chr(i)]:=@'177;
for i:=@'200 to @'377 do xord[xchr[i]]:=i;
for i:=0 to @'176 do xord[xchr[i]]:=i;
1 голос
/ 04 февраля 2009

Одна из любимых разметок, используемых в документации для Python, - Реструктурированный текст . Это общий упрощенный язык разметки, такой как Markdown или Textile, но он обеспечивает хорошую структуру документации и может легко использоваться для создания документации HTML или PDF.

1 голос
/ 04 февраля 2009

Visual studio имеет такую ​​форму, которая называется T4. К сожалению, документация отрывочна.

1 голос
/ 04 февраля 2009

Я видел этот трюк (скрытие вещей в комментариях), используемый для сворачивания в редакторах, для разметки документации в различных инструментах и ​​для оставления панировочных сухарей для круговой работы в инструменте моделирования.

Другое использование, которое я видел, находится в Cog , генераторе кода. Вы пишете python внутри комментариев, а затем Cog запускает python для генерации кода. Это интересно, потому что весь смысл в том, чтобы никогда не нуждаться / не хотеть модифицировать сгенерированный код, чтобы он не сталкивался с тем же набором раздражений, которые вы получаете, например, со складывающимся редактором, когда вы случайно путаетесь с «сложенными» комментариями в другом редакторе.

1 голос
/ 04 февраля 2009

Этот ужас вставляет действительную разметку XHTML, HTML и pre-HTML3.2 tagup «скрывая» с комментариями CSS:

<style type="text/css"><!--/*--><![CDATA[/*><!--*/
    ...
/*]]>*/--></style>

Я был огорчен, когда начал видеть, что это на самом деле используется. Это было предназначено только как упражнение. К сожалению.

...