Стало у меня больше свободного времени. В такие моменты я как обычно возвращаюсь к идее парсера одного языка разметки. Язык почти как xml, практически можно сказать что спецсимволы ‘<’, ‘>’, ‘/’ заменены на другие. Тексты на языке очень похожи на тексты исходников для вёрски в LaTeX.
Задуманный парсер ограниченее LaTeX - вся разметка языка на конструкциях вида \markA, \markB{argument}, \markC[optional argument]{arg}. Всё остальное употребляется как обычный текст.
Вот нужен совет как определить чтение этих конструкций, хотя бы в виде regexp’а вроде «\[a-zA-Z]+». Как и TeX парсер должен быть ориентирован на человеческие тексты, а значит знаки препинания из тела конструкции вылетают. Также парсер должен работать с исходниками для TeX/LaTeX, который расчитан на математические выражения - плюсы, минусы + спецсимволы для TeX ‘_’, ‘^’, ‘$’ и прочее под ограничением. Забавно, но эксперименты с pdflatex наталкивают на ещё большую ограниченость парсинга по сравнению с TeX - его \def вполне может включать в тело конструкций практически все выше перечисленное. Ладно мне такой парсер гораздо труднее реализовать, главное - нужно ли это? Получается парсер не рассчитан на подобные TeX-хаки.
Как посоветуйте определять конструкции? Хочется ведь прилично именовать разметку без всяких \MyNewSuperPuperGiperMegaTag.
PS. По сути проблема - как делать многословные идентификаторы в языке типа «go-forward» или «go_forward» когда практически все символы с клавиатуры под ограничением, кроме алфавита и символа «@» (привет от команды \makeatletter)? К проблеме можно подойти философски - имеется диалектическое противоречие 2-х процессов: с одной стороны у нас обработка текстов материальными машинами с ПО подобным TeX и ограничениями как у TeX, с другой - процесс работы с текстами используя материальную клавиатуру со всеми известным ограничением на набор символов (почему бы не дать языку возможность быть массово используемым?). И, вроде бы, \def TeX-а позволяет обходить принятый в сообществе LaTeX стиль разметки - как показывают эксперименты с pdflatex, подобные хаки работают весьма нестабильно. Да и вопрос - зачем они нужны при использовании самого LaTeX. Из этого всего выводится очевидное - использовать смену регистра вроде \goForward.