Конспект лекций доцента и. А. Волковой по курсу «системы программирования»




НазваниеКонспект лекций доцента и. А. Волковой по курсу «системы программирования»
страница10/20
Дата публикации24.05.2014
Размер0.69 Mb.
ТипКонспект
literature-edu.ru > Лекции > Конспект
1   ...   6   7   8   9   10   11   12   13   ...   20

Лекция 7. 12/03/2004.



Нам осталось определить класс фиксированных лексем, т.е. таблиц, которые заполнены заранее до начала работы программы.
class table_fixed {

char ** p;

int size; //закрытое поле класса, размер массива

public:

table_fixed (char * words[ ], int size) //size – формальный параметр конструктора

{ p=words; this -> size = size;}

//- указатель на текущий объект

// this -> size = size - всё это обозначает размер текущего объекта

char * operator [ ] (int k) {return p[k];}

int look (const char * buf);

};
//в предыдущих таблицах была функция put – класть в таблицу значение.

//теперь напишем функцию поиска значения в таблице
int tabl_fixed :: look (const char * buf) {

for (int j=1; j<=size; t++)

{if (!strcmp (buf,p[j])) return j;}

//-это номер строки в массиве – индеек массива

return 0;}
//слова и числовые константы располагаются в массиве начиная с некоторого номера
char * keywords [ ] = {NULL, “and”, “begin”, …. “or”, ….. “read”, “!”, “!F”};

// - операции; - эл-ты ПОЛИЗа

// ----- служебные слова ----------------------
char * dlms [ ] = {NULL, “;”, “,”, “@”, …………, “>=”}

// - ограничители

// @ - имеет смысл символа конца цепочки, т.к. его нет в языке

Итак, мы ввели общий класс для двух классов лексем
Ввели все необходимые таблицы:

tabl_ident TID (100);

//ранее был конструктор с одним int параметром – числом

//ожидающегося количества идентификаторов - max

tabl_number TNUM (20);

tabl_fixed TW (keywords,20);

tabl_fixed TD (dlms,17);
Осталось определить класс – сканер – лексический анализатор.
class scanner {

enum state {H,ID,NUM,COM,ALE,DLM,NEQ}; //перечисление типов

state cs;

FILE * fp; char c; //файл и переменная, куда считывается следующий символ

char buf [80];

/* - некоторая строка. В буфере накапливаются литеры, пока не дошли до некоторого разделителя*/

int index;

/*указатель на свободное место для буфера, увеличивается при записи данных в буфер*/

void clear ( ) { //-очищает буфер

index = 0;

for (int j=0; j<80; j++) buf[j]=’\0’;}

//- заполняем строку нулями и символом конца строки
void add( ) { buf [index] = c; index++; }

//- добавляем символ в буфер
void gc( ) {c=fgetc(fp);}

//- получает очередной символ из класса
public:

scanner (char * program)

{ fp = fopen (program, “r”);

CS = H; //встать в начальное состояние

gc( ); //считать первый символ

}

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

lex get_lex( );

/* - это главная функция, она открытая, фактически является анализатором */

};
lex scanner :: get_lex( ) {

int d.j;

CS = H;

do {switch(cs) {

case H: if (c==’_’ || c==’\n’ || c==’r’ || c==’\t’)

gc( );

else ………………………………….

………………………………….

case DLM: clear( ); add( );

if (j=TD.look(buf)) {gc( ); return lex (2.j);}

else //когда встретили запрещённый комментарий

throw c; break;

}

}while (true);

}
//throw – функция аппарата извлечения и удаления ошибок в С++


Диаграмма состояний с действиями – схема лексического анализатора:



- этот случай учитывает различия в количестве пробелов при анализе

'-' gc( ); //считывание очередного символа, сокращенно getchar

H add( ); gc( );



(буква)

ID

clear( ); add( ); gc( ); j=TW.look(buf); lex(1.j);

j=TID.put(buf); lex(4.j);

//1-служ. слово, 4-идентификатор

это как бы означает return lex; =>

результат функции lex – лексема.

ID - буква, цифра

смотрим, есть ли слово в буфере, т.е. служебное ли оно. Если да, то

выводим индекс, если нет, тогда это – идентификатор.


по схеме Горнера

d=d*10+(c-‘0’); gc( );

цифра

(цифра)

NUM

d=c-‘0’; gc( ); j=TNUM.put(d); lex(3.j);

- заносим в таблицу числовых

констант

начало комментария, внутри

недопустим другой комментарий

| gc( );

|

|

{ }

COM

gc( );

- не должен встречаться

& ранее закрытый комментарий

=> ошибка

ER

:, <, >

ALE

clear( ); add( ); gc( ); j=TD.look(buf); lex(2.j);

=



add( ); gc( ); j=TD.look(buf); lex(2.j);

- находим номер j

&



lex(2,N&);

- номер лексемы

! =

NEQ

gc( ); gc( ); lex(2,N!=);

после ! надо = , по другому в нашем

языке быть не может

ER

- все остальные символы

+,-,*,/,=,;,,,(,),

DLM

clear( ); add( ); j=TD.look(buf); lex(2.j);

ER
По такой диаграмме легко написать программу лексического анализатора.

1   ...   6   7   8   9   10   11   12   13   ...   20

Похожие:

Конспект лекций доцента и. А. Волковой по курсу «системы программирования» iconРеспублики Беларусь Учреждение образования «белорусский государственный...
Конспект лекций по курсу «Основы алгоритмизации и программирования» для студентов всех специальностей и всех форм обучения. Мн.:...

Конспект лекций доцента и. А. Волковой по курсу «системы программирования» iconКонспект лекций «Логистика. Конспект лекций»
Конспект лекций соответствует требованиям Государственного образовательного стандарта высшего профессионального образования

Конспект лекций доцента и. А. Волковой по курсу «системы программирования» iconКонспект лекций по курсу "Информатика и использование компьютерных...
Конспект лекций предназначен для студентов филологического факультета и факультета гуманитарных и социальных наук рудн. Конспект...

Конспект лекций доцента и. А. Волковой по курсу «системы программирования» iconРабочая программа по курсу «основы Программирования на языке ассемблер»
Программа предназначена для обучения основам программирования на языке низкого уровня Ассемблере учащихся средних школ, учреждений...

Конспект лекций доцента и. А. Волковой по курсу «системы программирования» iconОсновы информатики и вычислительной техники системы программирования
Рассматриваются основные понятия языков программирования. Излагаются процедурный и объектный подходы в программировании. Более подробно...

Конспект лекций доцента и. А. Волковой по курсу «системы программирования» iconКонспект лекций для студентов специальности 1-25 01 04 «Финансы и...
...

Конспект лекций доцента и. А. Волковой по курсу «системы программирования» iconКонспект лекций для студентов специальности 1-54 01 01-04 «Метрология,...
Конспект лекций предназначен для студентов специальности 1-54 01 01-04 «Метрология, стандартизация и сертификация (лёгкая промышленность)»...

Конспект лекций доцента и. А. Волковой по курсу «системы программирования» iconАвтор: Медведева Г. В
Курс лекций содержит основные разделы языка программирования t-pascal, предусмотренные образовательным стандартом

Конспект лекций доцента и. А. Волковой по курсу «системы программирования» iconКонспект лекций для студентов пятого курса специальности 220400 Программное...
Данный конспект лекций составлен для студентов четвёртого курса специальности “Программное обеспечение вычислительной техники и автоматизированных...

Конспект лекций доцента и. А. Волковой по курсу «системы программирования» iconУчебник Толубеевой Т. И., доцента кафедры пти «Основы проектирования крупноузорчатых тканей»
Особенность Декады – 25- летие выхода в свет стандартов исо серии 9000 на системы менеджмента качества

Литература


При копировании материала укажите ссылку © 2015
контакты
literature-edu.ru
Поиск на сайте

Главная страница  Литература  Доклады  Рефераты  Курсовая работа  Лекции