КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Стадии и этапы разработки программы лексического анализатора средствами LEX. Квантификаторы регулярных выражений, поддерживаемые генератором LEX.Технологический процесс разработки лексического анализатора с использованием генератора LEX разделяется на три этапа:
· подготовка файла спецификаций лексем · генерация исходного кода лексического анализатора · компиляция объектного или выполняемого модуля лексического анализатора
На первом этапе необходимая спецификация лексем создается разработчиком лексического анализатора и сохраняется в текстовом файле с произвольным именем в любом доступном рабочем каталоге файловой системы OS UNIX. Обычно имя файла спецификации лексем сопровождается расширением .l, которое обозначает его предметную область. Базовое имя файла спецификации лексем часто выбирают по названию проектируемого лексического анализатора. Для формирования файла спецификации лексем может быть использован любой текстовый редактор OS UNIX. На втором этапе по файлу спецификации лексем формируется исходный код лексического анализатора на языке программирования C. Для решения этой задачи генератор LEX предоставляет одноименную команду lex, выполняемый модуль которой располагается в каталоге /usr/bin файловой системы OS UNIX. В простейшем варианте команда lex может быть вызвана с единственным аргументом, который обозначает имя файла спецификации лексем. В этом случае исходный код проектируемого лексического анализатора по умолчанию формируется в текстовом файле с предопределенным именем lex.yy.c, который создается в текущем каталоге файловой системы OS UNIX. Если, например, спецификация лексем сосредоточена в файле lexan.l, то его обработка генератором LEX для получения исходного кода в файле lex.yy.c может быть реализована следующей командной строкой: $ lex lexan.l
Когда требуется получить исходный код лексического анализатора в файле с заданным именем, командная строка вызова генератора LEX должна содержать опцию -t перед аргументом, который обозначает имя файла спецификации лексем. В этом случае исходный код лексического анализатора формируется в потоке стандартного вывода, который всегда можно перенаправить в файл с указанным именем средствами любого интерпретатора команд OS UNIX. Например, следующая командная строка обрабатывает спецификацию лексем в файле lexan.l и обеспечивает получение исходного кода лексического анализатора в файле lexan.c, куда перенаправляется поток стандартного вывода: $ lex -t lexan.l > lexan.c
Чтобы получить возможность практически использовать лексический анализатор, необходимо на третьем этапе преобразовать его исходный код, построенный генератором LEX по файлу спецификации лексем, в объектный или исполняемый модуль. Для этого могут быть использованы стандартные инструментальные средства компилирующей системы языка программирования C. Обращение к ней в OS UNIX обеспечивает команда cc (или gcc), результат выполнения которой зависит от опций и аргументов командной строки ее вызова. В частности, компиляцию исходного кода лексического анализатора, который сосредоточен, например, в файле lex.yy.c в объектный модуль обеспечивает следующая командная строка: $ cc -c lex.yy.c
В результате выполнения этой командной строки, образуется объектный файл lex.yy.o в текущем каталоге файловой системы OS UNIX. Он может компоноваться с другими объектными модулями при конструировании выполняемой программы, обеспечивая в ней чтение и требуемую лексическую обработку входного потока символьной информации. Например, при проектировании разнообразных трансляторов Обычно лексический анализатор обычно реализуется в формате объектного модуля, который компонуется с объектным модулем синтаксического анализатора, передавая ему коды типов и значения распознаваемых лексем входного потока. должен передавать на следующую стадию синтаксического анализа коды типов и значения распознанных лексем. При этом особенно просто осуществляется взаимодействие с объектным модулем синтаксического анализатора, который формируется генератором синтаксических анализаторов YACC. Во втором случае, когда требуется получить исполняемый модуль лексического анализатора, исходный код которого сосредоточен, например, в файле lexan.c, обращение к средствам компилирующей системы языка программирования C может быть реализовано следующей командной строкой: $ cc -o lexan lexan.c -ll
При выполнении этой командной строки исходный код лексического анализатора в файле lexan.c транслируется в указанный после ключа –o исполняемый файла lexan, который образуется в текущем каталоге файловой системы OS UNIX. Последний аргумент (–ll) этой командной строки гарантирует компоновку объектных модулей стандартной библиотеки libl.a или libl.so генератора LEX, которые обычно располагаются в каталоге /usr/lib файловой системы OS UNIX. Это необходимо, когда лексический анализатор использует стандартные варианты перегружаемой функции yywrap и основной функции main, которые явно не определены в секции подпрограмм файла спецификации лексем. Построение лексического анализатора в формате исполняемого файла целесообразно, когда он должен решать самостоятельные задачи, связанные с лексической обработкой входного потока символьных данных. Например, преобразование формата входного потока данных, контекстная замена, обработка комментариев в исходном тексте программы, исключение лишних пробелов, измерение количественных характеристик входного потока. В любом из перечисленных случаев лексический анализатор должен выполняться как индивидуальная программа, обеспечивая требуемую лексическую обработку входного потока.
|