2013-04-19 2 views
1

Существуют ли языки или инструменты, которые поддерживают разбор регулярных выражений посимвольно?Регулярный разбор регулярного выражения

Я думаю, что это может быть эквивалентно «регулярных выражений на потоках», которая является то, что, кажется, одна из особенностей будущей версии Perl 6.

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

Прецедент является то, что я хочу, чтобы мои мыши событие прокрутки, которые будут передано наивной программой, такие как less пейджера, что означает мой инструмент (который порождает less над PTY) будет делать что-то вроде выдачи коды \x1b[?1000h, который включает в себя передачу сообщений мыши, а затем последует перевод каждого кода возврата мыши, полученного после этого, например \x1b[M!! (последние несколько символов кодируют положение мыши в терминале и должны игнорироваться, но также разделяются) в код со стрелкой \x1b[A.

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

Нужно ли ждать, когда Perl 6 сможет это достичь? Должны быть особые причины, почему для двигателей регулярных выражений обычно требуется наличие всей строки?

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

Так как мне не нужен обратный отсчет, возможно, есть какой-то легкий механизм регулярных выражений, который обеспечивает поток API. Похоже, что использование какой-либо формы синтаксической системы (если она существует, которая подходит) была бы умнее, чем создание чего-то произвольного.

+1

Я думаю, что вы ищете конечный автомат, а не обработчик регулярных выражений потока. –

+0

http://en.wikipedia.org/wiki/Sed? – FrankieTheKneeMan

+0

Так, возможно, я могу использовать sed, вручную собрав в него поток? Звучит как план. Сед становится более мощным, чем больше вы его используете. –

ответ

0

Похоже, s2p - это пример того, что я могу использовать.

В частности, потенциал возможности установить $|, чтобы не выполнять буферизацию линии.

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

Смежные вопросы