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




НазваниеКонспект лекций доцента и. А. Волковой по курсу «системы программирования»
страница13/20
Дата публикации28.06.2013
Размер0.69 Mb.
ТипКонспект
lit-yaz.ru > Информатика > Конспект
1   ...   9   10   11   12   13   14   15   16   ...   20
^

Анализатор методом рекурсивного спуска для модельного языка.



class parser {

lex curr_lex;

scanner scan;

void P( ); void D1( ); … ; void F( );

void dec (const char *type);

void check_id( );

void check_op( );

void check_not( );

void eq_type( );

void eq_bool( );

void check_id_in_read( );

void gl( ) {curr_lex = scan.get_lex( ); }

public:

parser (char *program) : scan(program) { };

bool analyze( );

}

// “:” – передача параметра в конструктор вложенного объекта в языке Си
bool parser :: analyze( ) {

try {gl( ); P( ); return true; }

catch (char c) {cout << “unexpected symbol” << c << endl; return false;}

catch (lex l) {cout << “unexpected lexeme”; l.print( ); return false;}

catch (const char * source) {cout << source << endl; return false;}

}
Для метода РС осталось дописать процедуры, также нужно написать процедуры для итерационных правил.

^

Лекция 9. 09/04/2004.



Продолжение.
int c_val; //значение текущей лексемы

void gl( ) {

curr_lex = scan.getlex( );

c_val = curr_lex.get_value( );

}
Другие методы:

Каждый раз при чтении curr_lex будем изменять значение.

- левосторонний вывод

LL ( K ) - реализует анализ “сверху вниз”

LR ( K ) - “снизу вверх”

- используется К символов от текущего

- правосторонний вывод
LL – левосторонний вывод, входящие условия просматриваются слева направо 1 раз, при этом учитываются только отношения между соседними символами, определённые заранее.

LR – применяется как грамматика, допускающая правосторонний вывод. Их построить легче, чем левосторонний вывод.

На выбор способа анализа влияет, что мы собираемся делать с результатом.

^

Семантический анализ.



КС грамматики недостаточно для проверки контекстных условий.

Необходимо расширить грамматику и вставить необходимые действия.

Семантический анализ реализуется? МРС, и им же вводятся дополнительные действия.
Прежде чем вносить действия:

A -> a B | b C

B -> aB | bC
void A ( ) {

if (c == ‘a’) {gc( ); D1( ); B( );

D1( ); D2( ); }

else if (c == ‘b’) {gc( ); C( ); D3( ); }

else throw c;

}
Будем вставлять действия, результат будет проверкой контекстных условий.

Эти действия расширяют возможности.
Пример.

S -> A & //начальные присваивания для счётчика

A -> 0 A | 1 A | 0 |

1

- получили из S -> A &

A -> 0A | 1A | 0 | 1


Шаблоны



Параметрами шаблонов могут быть типы или объекты.

//Τ – имя любого типа

template // - шаблон класса
Существует таблица функций, типов и методов класса.
тип_рез имя (список_форм_парам) //шаблон функции

{ … … … … … }

- здесь можно использовать class T или переменную n
Обращение к функции шаблона:

имя <список_факт_парам_шаблона> (список_факт_парам_функций)
template

T sum (T array [ ], int size)

{T res = 0;

for (int i=0; int
return res;

}
Как используется этот шаблон для подсчёта элементов некоторого массива?

int iarray[10];

int i_sum;

//…

i_sum = sum (iarray,10)
Перепишем:

template

T sum (T array[ ])

{ T res = 0;

for (int i=0; int < size; i++) res += array[i];

return res;

}
Тогда:

int iarray[10];

int i_sum;

//…

i_sum = sum (iarray)
^ Шаблон классов (типа):

template

class имя_класса { … … … }

Нельзя делать шаблонной виртуальную функцию!

объект : имя_класса <список_факт_парам_шабл> объект;
Пример:

Шаблон класса с названием stack.
template class stack {

T S[max_size];

int top;

public:

stack ( ) { top=0; }

void reset ( ) { top=0; }

void push (T i);

T pop( );

bool is_empty( ) { return top==0; } //пустой стек

bool is_full( ) { return top==max_size;} //переполненный стек

}
template

void stack :: push (T i) { //функция push

if (!is_full( )) { s[top++] = i; }

else throw “stack is full”;

}
template

T stack :: pop( ) {

if (! is_empty( )) { top--; return s[top]; }

else throw “stack is empty”;

}
Дистанцирование шаблона - объявление функции вне шаблона.

Специализация - конкретная версия шаблона.
stack st_int; //стек для целых чисел

stack st_char; //стек для строк
Будем проверять, чтобы все переменные были описаны только 1 раз, проверяем соответствие типов в левой части и правой части от присваивания, тип операторов в проверке условий.
D -> I{,I} : [int|bool] (*)

Основная процедура для проверки будет называться dec. Понадобится стек целых чисел.
void parser :: dec (const char* type) {

int i;

while (!st_int, is_empty( )) {

i = st_int.pop( );

if (TID[i].get_declare( ))

throw “twice”;

else {

TID[i].put_declare( );

TID[i].put_type (type);

}

}
Вставляем в D (*) действия.

D -> I

{ , I } :

[ int | bool]
Приступим к контролю типов операций и операндов.

1   ...   9   10   11   12   13   14   15   16   ...   20

Похожие:

Конспект лекций доцента и. А. Волковой по курсу «системы программирования» iconКонспект лекций по курсу «Объектно-ориентированное программирование»
Б. Страуструп. Язык программирования C++, 3-е изд./Пер с англ. – Спб.; М.: «Невский диалект» – «Издательство бином», 1999 г. – 991...

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

Конспект лекций доцента и. А. Волковой по курсу «системы программирования» iconВ. Г. Баула Введение в архитектуру ЭВМ и системы программирования
Мгу им. М. В. Ломоносова. По данному курсу существует достаточно обширная литература, посвящённая программированию на Ассемблере,...

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

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

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

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

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

Конспект лекций доцента и. А. Волковой по курсу «системы программирования» iconКонспект лекций по дисциплине вгипу, 2009 Конспект лекций по дисциплине «Управление персоналом»
Крупица В. В., Яшкова Е. В., Егоров Е. Е. Управление персоналом: Конспект лекций по дисциплине – вгипу, 2009

Конспект лекций доцента и. А. Волковой по курсу «системы программирования» iconКонспект лекций. (Электронный учебник) Минск: бгэу, 2010. Тема 1...
Короленок Г. А. Менеджмент в торговле. Конспект лекций. (Электронный учебник) Минск: бгэу, 2010



Образовательный материал



При копировании материала укажите ссылку © 2013
контакты
lit-yaz.ru
главная страница