Хомский - Chomski

pep, виртуальная машина pep
Парадигмаязык сценариев
Разработаноmj епископ
Впервые появился2007; 13 лет назад (2007)
Печатная дисциплинаникто; все данные обрабатываются как строка
Операционные системыКроссплатформенность
Интернет сайтболтать.sourceforge.сеть/ книги/ pars/
Основной реализации
болтать.sourceforge.сеть/ книги/ pars/
Под влиянием
Сед, Awk

виртуальная машина с анализом паттернов (ранее назывался "хомски" после Ноам Хомский ) и взбодриться относятся как к командная строка компьютерный язык и служебная программа (интерпретатор для этого языка), которые могут использоваться для анализа и преобразования текстовых шаблонов и (формально-математический ) языков. Утилита считывает входные файлы посимвольно (последовательно), применяя операцию, указанную через командная строка или pep скрипт, а затем выводит строку. Он был разработан с 2006 года на языке C. Пеп заимствовал ряд идей и синтаксических элементов из Сед, редактор текстового потока командной строки.

Функции

Язык анализатора шаблонов использует множество идей, взятых из sed, редактор потоков Unix. Например, sed включает две виртуальные переменные или буферы данных, известное как «пространство шаблонов» и «пространство удержания». Эти две переменные составляют чрезвычайно простой виртуальная машина. На языке pep эта виртуальная машина была дополнена несколькими новыми буферами или регистры вместе с рядом команд для управления этими буферами.

Виртуальная машина синтаксического анализа включает Лента структура данных также как и стек (структура данных), наряду с «рабочей областью» (которая является эквивалентом «пространства шаблонов» sed и ряда других менее важных буферов. Эта виртуальная машина разработана специально для анализа формальные языки. Этот разбор процесс традиционно включает две фазы; то лексический анализ фаза и формальная грамматика фаза. На этапе лексического анализа в виде ряда жетоны генерируются. Эти токены затем используются в качестве входных данных для набора формальных правил грамматики. Виртуальная машина Chomski использует стек для хранения этих токенов и использует структуру ленты для хранения атрибутов этих токенов синтаксического анализа. В сценарии pep эти две фазы, лексирование и синтаксический анализ, объединены в одном файле сценария. Ряд командных слов используется для управления различными структурами данных виртуальной машины.

Цель и мотивация

Цель инструмента pep - анализировать и преобразовывать текстовые шаблоны. Текстовые шаблоны соответствуют правилам формального языка и включают множество контекстно-свободных языков. В то время как традиционные инструменты Unix (такие как awk, sed, grep и т. д.) обрабатывать текст по одной строке за раз и использовать регулярные выражения для поиска или преобразования текста, инструмент pep обрабатывает текст по одному символу за раз и может использовать контекстно-свободные грамматики преобразовать (или компилировать ) текст. Однако, как и Философия Unix, инструмент поддержки работает на простом текстовые потоки, закодированный в соответствии с локалью локального компьютера, и создает в качестве вывода другой простой текстовый поток, позволяя использовать инструмент pep как часть стандартного конвейера.

Мотивация к созданию инструмента pp и виртуальной машины заключалась в том, чтобы позволить писать сценарии синтаксического анализа, а не прибегать к традиционным инструментам синтаксического анализа, таким как Lex и Yacc, или их многочисленным вариантам и улучшениям, таким как Antlr.

использование

В следующем примере показано типичное использование синтаксического анализатора шаблона pep, где -e указывает, что выражение синтаксического анализа шаблона следующее:

$ pep -e 'читать; "/"{ читать; "*"{ до того как "*/"; Чисто; }} Распечатать; Чисто;' input.c> output.c

В приведенном выше скрипте многострочные комментарии C (/* ... */) удаляются из входного потока.

Инструмент парсера шаблонов был разработан для использования в качестве фильтр в трубопровод: Например,

$ generate.data | pep -e '"x" {clear; add "y";} print; clear;'

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

Несколько команд можно объединить в файл с именем, например, replace.pss а затем наносить с помощью -f возможность читать команды из файла:

$ pep -f файл substitute.pss> вывод

Помимо замены возможны и другие формы простой обработки. Например, ниже используется команда аккумулятор-инкремент а + и считать команды для подсчета количества строк в файле:

$ pep -e '"" {a +;} ясно; (eof) {count; print;} ' текстиль

Возможны сложные конструкции «pep», что позволяет использовать его в качестве простого, но узкоспециализированного, язык программирования. pep имеет два оператора управления потоком (помимо тестовых структур (eof), [учебный класс], == и т. д.), а именно .reparse и .перезапуск команды, которые возвращаются к анализировать> метка (другие метки не допускаются).

История

Идея pep-машины и языка возникла из-за ограничений движков регулярных выражений и sed, который использует построчно парадигма и ограничения на синтаксический анализ вложенных текстовых шаблонов с помощью регулярных выражений. Пеп развился как естественное продолжение grep и sed команда. Разработка началась примерно в 2006 году и продолжается.[1]

Ограничения

Язык сценариев анализа шаблонов не является языком программирования общего назначения. Как и sed, он предназначен для ограниченного использования. Интерпретация и исполняемый файл в настоящее время не поддерживают юникод строки, поскольку в реализации используются стандартные C массивы символов. Однако скрипты также могут быть переведены на другие языки (например, java и javascript), которые поддерживают текст в Юникоде. Поскольку виртуальная машина, стоящая за языком анализатора шаблонов, значительно сложнее, чем виртуальная машина sed надо уметь отлаживать скрипты. Эта возможность в настоящее время предоставляется в исполняемом файле 'pep'.

Смотрите также

Рекомендации

  1. ^ Личные воспоминания разработчика (М.Дж. Бишопа)

внешняя ссылка