Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лаба 5

.pdf
Скачиваний:
2
Добавлен:
04.03.2022
Размер:
261.67 Кб
Скачать

Федеральное агентство связи ордена Трудового Красного Знамени Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования Московский Технический Университет связи и информатики

Кафедра «Математической кибернетики и информационных технологий»

Лабораторная работа №5 Генератор лексических анализаторов Flex

Выполнила студентка группы БСТ1904 Пантелеева К.А.

Вариант №8

 

Оглавление

 

1

Задание ......................................................................................................................

3

2

Ход лабораторной работы .......................................................................................

3

 

2.1 Код программы...................................................................................................

3

 

2.2 Тестирование программы..................................................................................

5

3

Вывод.........................................................................................................................

7

Список использованных источников ........................................................................

7

2

1Задание

1)Написать программу на языке Flex, которая выполняет лексический анализ входного текста в соответствии с заданием и порождает таблицу лексем с указанием их типов. Программа должна выдавать сообщения о наличии во входном тексте ошибок, которые могут быть обнаружены на этапе лексического анализа.

2)Входной язык содержит логические выражения, разделённые символом ; (точка с запятой). Логические выражения состоят из идентификаторов, констант true и false, знака присваивания (:=), операций or, xor, and, not и круглых скобок.

2Ход лабораторной работы

2.1 Код программы

%option noyywrap yylineno %{

#include <stdio.h> #include <string.h> #define SIZE 6 char* filename;

char* keywords[SIZE] = {"not", "and", "or", "xor"}; %}

letter [a-zA-Z] digit [0-9] delim [;] t[True] f[False]

keyw [()] end[$] ws [ \t\n]

%%

{t} {

printf("%s:%d SYMBOL %s\n", filename, yylineno, yytext);

}

{f} {

printf("%s:%d SYMBOL %s\n", filename, yylineno, yytext);

}

({letter}|"_")({letter}|{digit}|"_")* { if(resWord(yytext))

{

printf("%s:%d KEYWORD %s\n", filename, yylineno, yytext); }else{

3

printf("%s:%d IDENTIFIER %s\n", filename, yylineno, yytext);

}

}

{digit}+ {

printf("%s:%d NUMBER %s\n", filename, yylineno, yytext);

}

":=" {

printf("%s:%d ASSIGN %s\n", filename, yylineno, yytext);

}

"$" {

printf("%s:%d END %s\n", filename, yylineno, yytext);

}

{delim} {

printf("%s:%d DELIMITER %s\n", filename, yylineno, yytext);

}

{keyw} {

printf("%s:%d KEYWORD %s\n", filename, yylineno, yytext);

}

{ws}+ ;

. {

printf("%s:%d Unknown character '%s'\n", filename, yylineno, yytext);

}

%%

int resWord(char* id)

{

int i;

for(i = 0; i < SIZE; i++)

{

if(strcmp(id, keywords[i]) == 0)

{

return 1;

}}

return 0;

4

}

int main(int argc, char** argv)

{

if(argc < 2)

{

perror("Input file name is not specified"); return 1;

}

yyin = fopen(argv[1], "r"); if(yyin == NULL)

{

perror(argv[1]); return 1;

}

filename = strdup(argv[1]); yylineno = 1;

yylex(); return 0;

}

2.2 Тестирование программы

Входные данные представлены на рисунке 1.

Рисунок 1 – Данные Результат работы программы представлен на рисунке 2.

5

Рисунок 2 – Результат работы

Теперь посмотрим, как работает программа, когда текст с ошибкой. Для этого изменим входные данные (рисунок 3).

Рисунок 3 – Данные с ошибкой

А результат работы приведен на рисунке 4.

6

Рисунок 4 – Результат работы

3 Вывод

В результате данной работы я научилась работать с лексическим анализатором

Flex.

Список использованных источников

1)ГОСТ 7.1-2001 СИБИД. Библиографическая запись. Библиографическое описание. Общие требования и правила составления [электронный ресурс] URL: https://internet-law.ru/gosts/gost/1560 (дата обращения 28.03.2020)

2)ГОСТ 7.32-2001 СИБИД. Отчет о научно-исследовательской работе. Структура и правила оформления (с Изменением N 1) [электронный ресурс]

URL: http://docs.cntd.ru/document/gost-7-32-2001-sibid (дата обращения 28.03.2020)

7

Соседние файлы в предмете Теория языков программирования