Режим Emacs для c-подобного языка

Я пытаюсь написать новый режим emacs для нового шаблонного языка, подобного C, который я должен использовать для некоторых академических исследований.

Я хочу, чтобы код был окрашен и с отступом, как в c-режиме, со следующими исключениями:

  • «%» используется не как оператор, а как первый символ в некоторых определенных ключевых словах (например: «%p», «%action» и т. д.).
  • Строки кода не заканчиваются точкой с запятой.

Можно ли создать производный режим (из c-mode) и настроить его так, чтобы он игнорировал первоначальные цели «%» и «;»? Можно ли заставить функцию «автоматического отступа после нажатия RET» работать без «;»?

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

Должен ли я попытаться написать основной режим с нуля?

Я подумал об исправлении R-режима с сайта http://ess.r-project.org/, но этот режим не поддерживает комментарии вида "/* комментарий */".

Самая важная функция, которую я ищу, — это отступ в скобках, то есть отступ кода внутри блока «{}» после нажатия RET (и без дополнительного отступа после строк, которые не заканчиваются на «;»). Частичные решения тоже помогут.


person Oren    schedule 24.02.2012    source источник


Ответы (3)


Если вы не возражаете против чего-то действительно простого, вы можете посмотреть Режим Госу. Госу — это язык с фигурными скобками и без точек с запятой, так что вы должны быть готовы к минимуму. Он также использует тот же синтаксис комментариев, что и C.

Реализация режима для него действительно проста и основана на универсальном режиме, поэтому изменить его так, как вам нужно, должно быть легко. Он не основан на C-режиме.

Это то, что я использовал, чтобы создать режим для языка, над которым я работал, для моего класса компиляторов, и это было очень просто даже с ограниченным опытом работы с elisp. С другой стороны, отступ довольно прост — он работает для большей части кода, но не так совершенен, как в C-режиме.

person Tikhon Jelvis    schedule 25.02.2012
comment
Вместо режима Gosu я использовал режим Google Go и исправил его. - person Oren; 25.02.2012

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

person Stefan    schedule 25.02.2012
comment
Я пытался пропатчить CC-режим в соответствии с awk-режимом (в котором строки не должны заканчиваться на ';'), но это было слишком много кода для понимания и исправления. - person Oren; 26.02.2012

Проверьте arduino-mode: https://github.com/bookest/arduino-mode/blob/master/arduino-mode.el

Это режим на основе C, который использует функции режима cc для быстрого создания чего-то очень полезного и уникального для программирования Arduino. Использование этого простого шаблона должно сильно помочь.

person Eric    schedule 25.02.2012