36.6.4 Низкоуровневый парсинг

Самый базовый способ использования парсера выражений — это указать ему начать в заданной позиции с определенным состоянием и парсить до указанной конечной позиции.

Функция: parse-partial-sexp start limit &optional target-depth stop-before state stop-comment

Эта функция парсит sexp в текущем буфере, начиная с start, не сканируя дальше limit. Она останавливается в позиции limit или когда выполняются определенные критерии, описанные ниже, и устанавливает точку в место, где парсинг остановился. Она возвращает состояние парсера, описывающее статус парсинга в точке остановки.

Если третий аргумент target-depth не равен nil, парсинг останавливается, если глубина в скобках становится равной target-depth. Глубина начинается с 0 или с того, что указано в state.

Если четвертый аргумент stop-before не равен nil, парсинг останавливается при встрече с любым символом, начинающим sexp. Если stop-comment не равен nil, парсинг останавливается после начала невложенного комментария. Если stop-comment — это символ syntax-table, парсинг останавливается после начала невложенного комментария или строки, или после конца невложенного комментария или строки, в зависимости от того, что наступит раньше.

Если state равен nil, предполагается, что start находится на верхнем уровне структуры скобок, например, в начале определения функции. Или же вы можете захотеть возобновить парсинг в середине структуры. Для этого вы должны предоставить аргумент state, который описывает начальный статус парсинга. Значение, возвращенное предыдущим вызовом parse-partial-sexp, подойдет отлично.