Я пытаюсь понять, как использовать PEG.js для простого поиска / замены в тексте. Конечно, это не предназначенное использование для парсера, но в любом случае мне любопытно, какая логика стоит за этими языками, чтобы произвести некоторый поиск / замену.
Проблема, с которой столкнулся Im, заключается в том, что трудно дать положительное определение дополнительности некоторых определений. Пример: представьте, что я хочу найти и заменить что-то вроде этого синтаксиса:
rule = (whatever_is_not_my_syntax* m:my_syntax)+ {replace m}
word = [a-z0-9_]+
my_syntax = word "." word
whatever_is_not_my_syntax = ???
Трудно описать положительно, что whatever_is_not_my_syntax
в PEG.js без частичного столкновения (и последующей ошибки парсера) с my_syntax
, или, по крайней мере, я не знаю, как это сделать, потому что единственными отрицательными функциями синтаксического анализатора в PEG.js являются !expression
и [^characters]
.
Вы можете мне помочь? Я буду признателен за любую книгу или библиографию, если таковая существует, по этой теме. Заранее спасибо.