Прежде чем мы начнем
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 или с его местного зеркала.