Parser Generator
Инструментарий для построения компиляторов.
   

Главная

О сайте

Документация

Download

Ссылки

Библиография

О нас


Введение

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

В начале своего развития теория анализа текста применялась в узких областях, таких как создание компиляторов и интерпретаторов, т.е. для языков программирования. Однако потом появились специализированные языки, которые напрямую не имели отношения к программированию: SGML, RTF, HTML и конечно же XML. Как оказалось, данная теория успешно применяется и для хранения и организации информации- для того чтобы сохранить информацию- необходимо разработать формат ее хранения в виде последовательного набора байт, а затем создать алгоритмы "воссоздающие" по этому набору байт исходную структуру данных (сериализация/десериализация).

Рассмотрим конкретные задачи, с которыми сталкивается практически любой программист:

  • анализ введенных данных (число, дата, номер телефона)
  • поиск и замена подстрок
  • С такими простыми задачами легко справляются регулярные выражения, которые используются также и для множества других приложений.

  • Сохранение структуры данных в файле, или передача по сети.
  • Создание "сценариев" (макросов) работы пользователя.
  • Работа с математическими формулами и выражениями.
  • Для таких- более сложных задач анализа используют синтаксический анализ. Для синтаксического анализа существует большая и мощная теория, позволяющая строить эффективные алгоритмы. Разработаны пакеты для автоматизации решения подобных задач- автоматические построители компиляторов. Например YACC, Bizon или JavaCC.

    Однако существующие пакеты ориентированы для создания компиляторов, как самого первого "потребителя" теории анализа текста. Однако это не всегда бывает удобно- использовать подобные инструменты в других целях. Например, может возникнуть задача, создать автомат, для имитации поведения какого-либо объекта.

    Также эти системы не ориентированы на работу с формальными грамматиками (ФГ)- основным математическим инструментом для описания языков. Такое "невнимание" к формальным грамматикам не вполне оправдано, так как сами по себе ФГ представляют интерес для многих инженеров.

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

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

    Каждый преподаватель стремится объяснить свой предмет на различных примерах, рисунках, схемах. Продемонстрировать различные варианты использования того или иного подхода. Для формальных грамматик очень сложно объяснить, поскольку все примеры трудны для восприятия и понимания. Разрабатываемая программа- попытка преодолеть эту сложность.

    При разработке программы мы стремились создать инструмент, который станет легким в использовании, и будет обладать следующей функциональностью и возможностями:

  • Визуальный и легкий в понимании итерфейс, для применения в учебных целях.
  • Работа с формальными грамматиками: ввод, преобразование, проверку принадлежности к различным типам (LL1, LR1, SLR0, предшествования, слабого предшествования, операторного предшествования).
  • Создание, моделирование ДКА (детерминированного конечного автомата) по определению принадлежности входной цепочки языку.
  • Работа с атрибутными транслирующими грамматиками: ввод, проверка (постфиксная).
  • Создание, моделирование ДМП (детерминированного преобразователя с магазинной памятью) преобразователя.
  • Построение алгоритма (таблиц) для грамматик LL1, LR1, SLR0, предшествования, слабого предшествования, операторного предшествования.
  • Генерация кода на языке C++, для синтаксического анализа, с проверкой семантики входной цепочки (контекстный анализ) с помощью минимального стандартного набора семантических процедур (проверка существования, проверка типа, построение таблиц идентификаторов), с возможностью расширения.

  •  
       
    © С. Григорчук 2001, Содержание, дизайн

    ukman@yandex.ru
    Hosted by uCoz