хорошо, «библиотеки», на которые вы ссылаетесь, это просто грамматики языка .
Действительно, языковые грамматики - это просто набор правил для разделения синтаксиса документа на области действия .
Другими словами, каждое правило в грамматике просто назначает один или несколько элементов синтаксиса для области.
w / r / t фактический синтаксический анализ , для TextMate и Sublime Text это делается с помощью регулярных выражений .
Например, рассмотрим грамматику языка Python;Как вы знаете, когда я помещаю курсор в начало , а и выполняю ctrl-shift-P (показать область видимости), область видимости появится в строке состояния:
source.python.keyword.control.flow.python
Опять же, эта область определена в грамматике языка Python, поэтому мы можем найти конкретное правило:
{
match = '\b(elif|else|except|finally|for|if|try|while|with|break|continue|pass|raise|return|yield)\b';
name = 'keyword.control.flow.python';
}
Первый элемент, match - это просто шаблон , который передается в синтаксический анализатор.
Второй элемент, name - это просто имя, данное этомуопределенный синтаксический элемент (т. е. scope ).
Sublime Text 2 хранит языковые грамматики в каталоге Packages с расширением tmLanguage как XML, а не JSON, поэтому приведенное выше правило из грамматики языка Python выглядит следующим образом в ST2:
<dict>
<key>
match
</key>
<string>
\b(elif|else|except|finally|for|if|try|while|with|break|....[truncated]
</string>
<key>
name
</key>
<string>
keyword.control.flow.python
</string>
</dict>
Таким образом, каждое правило в грамматике заключено в пара тегов dict и шаблон regexp каждого правила заключены в строковые теги ;То же самое для соответствующего имени области.
Все грамматики языка полностью состоят из этих правил - именно с этим match / name (или pattern / scope )структура.