Парсинг TeX-кода ни в коем случае не единственный способ получить список всех управляющих последовательностей. Другие возможности включают в себя:
заставляет TeX выгружать свои структуры данных после загрузки соответствующего пакета, а затем анализировать файл дампа; когда вы запускаете команду latex
, то на самом деле происходит то, что двоичный файл tex
загружает файл дампа latex.fmt
, который был сгенерирован с помощью того же двоичного кода, который анализирует весь встроенный код LaTeX и выдает его структуры данных;
изменить исходный код TeX для вывода чего-либо каждый раз, когда определяется последовательность управления;
запустить TeX в отладчике с поддержкой сценариев, вставить точку останова, в которой последовательность вставлена в хэш-таблицу, и заставить скрипт вывести имя последовательности.
Ни один из них, вероятно, не будет особенно простым решением, но, вероятно, проще, чем написание парсера, эквивалентного TeX. Для начала посмотрите TeX: Программа и исходный код вашей системы TeX.
Если ваша цель заключается в предоставлении «intellisense» в редакторе, простой список последовательностей команд не сильно поможет: когда пользователь вводит \ref{
, вы должны предложить список меток, определенных в документе ( бонусные баллы, если набрать Chapter~\ref{
приводит к списку меток глав, а не ко всем меткам); для \settowidth{
- список команд длины; для \begin{
- список сред; и т.д.
Вы могли видеть, что делает AUCTeX (режим Emacs); он имеет ограниченный синтаксический анализатор на основе регулярных выражений, который обрабатывает общий случай, и набор библиотек для конкретных пакетов, которые расширяют функциональность.