Перейти к тексту

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

Профиль создается, когда вы в первый раз заходите в developerWorks. Выберите данные в своем профиле (имя, страна/регион, компания) которые будут общедоступными и будут отображаться, когда вы публикуете какую-либо информацию. Вы можете изменить данные вашего ИБМ аккаунта в любое время.

Вся введенная информация защищена.

  • Закрыть [x]

При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

Вся введенная информация защищена.

  • Закрыть [x]

Создание анализаторов текста при помощи yacc и lex

Мартин Браун, внештатный автор, консультант
Мартин Браун (Martin Brown) пишет статьи уже более семи лет. Он является автором многочисленных книг и статей по различным темам. Его квалификация охватывает множество платформ и языков разработки - Perl, Python, Java™, JavaScript, Basic, Pascal, Modula-2, C, C++, Rebol, Gawk, Shellscript, Windows®, Solaris, Linux, BeOS, Mac OS X и т.д., а также Web-программирование, системное управление и интеграция. Мартин является внутренним экспертом (SME) компании Microsoft® и регулярно пишет для ServerWatch.com, LinuxToday.com и IBM developerWorks. Он также принимает участие в блогах Computerworld, The Apple Blog и на других сайтах. Связаться с ним можно через его Web-сайт.

Описание:  В этой статье на примере создания простого калькулятора показано, как создать анализатор при помощи инструментов lex/flex и yacc/bison, а затем более подробно рассмотрено, как применить эти принципы к синтаксическому разбору текста. Синтаксический разбор текста - анализ и извлечение ключевых частей текста - важная часть многих приложений. В UNIX® многие элементы операционной системы зависят от синтаксического анализа текста: оболочка, которая используется для взаимодействия с системой, распространенные утилиты и команды типа awk или Perl, вплоть до компилятора Си, используемого для разработки приложений. Анализаторы собственной разработки можно использовать в UNIX-программах (и не только UNIX) для создания простых анализаторов конфигурации или даже для создания своего собственного языка программирования.

Дата:  03.12.2008
Уровень сложности:  средний

Активность:  40181 просмотров

Прежде чем мы начнем

UNIX®-программистам часто требуется гибкий, но стандартизируемый формат для анализа текста и других структур данных. Используя инструменты lex и yacc, можно создать механизм синтаксического разбора текста (далее - анализатор), который будет анализировать текст согласно заданным правилам. Для достижения различных целей этот анализатор можно интегрировать в приложения, начиная с анализа задаваемой конфигурации и заканчивая созданием собственного языка программирования. К концу этого учебного курса читатель узнает, как выполнять распознавание лексем, как написать yacc-правила и как использовать механизм правил для создания и описания различных анализаторов и приложений.

Об этом учебном курсе

Для поиска и распознавания текста в UNIX существует много различных способов. Можно использовать grep, awk, Perl, и другие решения. Но иногда может возникнуть необходимость распознавать и извлекать данные в структурированном, но не строгом формате. В этом случае могут оказаться полезными UNIX-инструменты lex и yacc. Вышеупомянутые инструменты, awk, Perl, сама оболочка и множество других языков программирования используют lex и yacc для анализаторов, которые будут проводить синтаксический разбор текста и конвертировать его в информацию или структуру данных, которые нам нужны.

Lex - это инструмент для лексического анализа, который может использоваться для выделения из исходного текста определенных строк заранее заданным способом. Yacc - это инструмент для грамматического разбора; он читает текст и может использоваться для конвертирования последовательности слов в структурированный формат для дальнейшей обработки.

Вначале в этом учебном курсе объясняется использование lex и yacc для создания калькулятора. Далее, используя этот калькулятор в качестве примера, подробно рассмотрена информация, создаваемая и выводимая системами lex и yacc, и показано, как использовать эту информацию для анализа других типов информации.


Предварительные требования

Чтобы работать с примерами в этом учебном курсе, понадобятся следующие утилиты:

  • Lex: эта утилита является стандартным компонентом большинства ОС UNIX. Инструмент GNU flex обеспечивает такую же функциональность.
  • Yacc: эта утилита является стандартным компонентом большинства ОС UNIX. Инструмент GNU bison обеспечивает такую же функциональность.
  • Компилятор языка C: подойдет любой стандартный компилятор языка C, включая Gnu CC.
  • Утилита Make: этот инструмент требуется для использования обычного Makefile (чтобы упростить сборку приложения).

GNU-инструменты могут быть загружены с Web-сайта GNU или с его местного зеркала.

1 из 8 | следующая

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=AIX и UNIX
ArticleID=356111
TutorialTitle=Создание анализаторов текста при помощи yacc и lex
publish-date=12032008
author1-email=mc@mcslp.com
author1-email-cc=