Есть ли способ сделать контекстный разбор в татсу - PullRequest
0 голосов
/ 03 ноября 2019

контекстно-зависимый '%' ..... eol comments

Я начинаю с грамматики для PDF, описанной здесь

https://github.com/caradoc-org/caradoc/blob/master/doc/grammar/grammar.pdf

, которая кажетсяотсутствует определение комментариев eol.

PDF имеет комментарии в конце строки, которые начинаются с символа '%', за исключением строки string_literal (и другого потока правил).

string_literal = "(" string_content ")";

, где string_content может включатьсимвол '%', а также eol, но не "()" и т. д. В языке PDF также есть некоторые особые случаи, которые в противном случае выглядят как комментарии, например

'%PDF-1.5' eol;

или

"%%EOF" [eol];

Есть ли способ справиться с чувствительностью контекста в грамматике тацу?

1 Ответ

0 голосов
/ 04 ноября 2019

В этом ответе я буду держаться подальше от «Контекстно-зависимого», потому что эта фраза имеет значение в Теории языка.

PEG прекрасно способен анализировать субязык (скажем, выражения форматирования строк Python)на другом языке.

Фактически, исходное определение PEG не использует токенизатор, потому что грамматики PEG могут анализировать подязык токена.

Если вы думаете оподпрограмм, то контекст обеспечивается правилом, которое знает, что подграмма должна быть вызвана.

В TatSu есть функции, позволяющие выполнять токенизацию перед синтаксическим анализом (класс Buffer) для эффективности и удобства, но использование этих функций не является обязательным.

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

...