Joomla портал
seo seo Subscribe
0
seo

::= {, }

Если же список может быть пустым, то его описание будет выглядеть так:

::= | {, }

Другой пример. Идентификатором является последовательность букв и цифр, начинающаяся с буквы:

::={|}

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

::=

procedure [()];

Использование круглых скобок иллюстрируется на примере описания процедуры или функции, которое является либо описанием процедуры, либо описанием функции, после чего следует точка с запятой:

::=(|);

Мы не будем давать полного описания синтаксиса Турбо Паскаля на языке БНФ, а приведем несколько фрагментов. Вот как описывается общая структура программы на Паскале в терминах языка БНФ:

::=

.

::=

program [ () ];

::={; }

::= | |

| |

::=

const {; }

::= [ : ] =

::= type {; }

::= =

::=

var {; }

::=

{, }:

::= label {, }

::= |

::= uses {, }

::= { }

::=

( | ) ;

::=

::=

procedure [()];

::=

{ ; }

::=

[var] {, }:

::=

::= function

[ () ] : ;

::=

begin ( | {; }) end

Для полноты картины необходимо добавить, что имена констант, типов, переменных, модулей, функций и процедур являются идентификаторами.

В качестве другого примера фрагмента синтаксиса Паскаля приведем описание спецификации типа:

::= | |

| | | |

|

::= ( {, } )

::= ..

::= array [ | ] of

::= record {; } end

::= :

::= set of ( | )

::= file of

4.13. Динамические структуры данных

До сих пор мы встречались с переменными, которые описывались в разделе объявления переменных программы или процедур и функций и которым в программе приписано определенное имя. Таким переменным приписан простой или составной тип, который однозначно определяет объем памяти, необходимой для хранения переменной. Память для поименованных переменных выделяется при компиляции программы. Такая память называется статической. В некоторых ситуациях статическая память имеет серьезные недостатки. Рассмотрим подробнее некоторые аспекты компиляции программы и структуру программного кода.

Код программы состоит из трех автономных частей. Первая часть представляет собой исполняемую часть программы и называется программной секцией. Она включает реализацию операторов программы и всех процедур и функций программы в виде машинных команд. Каждая процедура или функция задается смещением относительно начала программной секции.

Вторая часть называется секцией данных и содержит место для всех статических переменных как программы, так и всех процедур и функций. Переменная задается смещением положения переменной от начала секции данных. Это смещение используется в программном коде, чтобы извлечь значение переменной. Из сказанного понятно, почему необходимо заранее определить объем переменной. Это одна из причин использования в Паскале механизма типов переменных.

Наконец, третья секция программы называется стеком (вид очереди: последний вошел – первый вышел). Стек содержит информацию о вызовах процедур и функций. Пусть при выполнении программы мы обратились к некоторой процедуре. Так как процедуру можно вызвать из нескольких мест, необходимо указать, куда надо возвратиться после окончания работы процедуры. Эти данные вместе с некоторой технической информацией храниться в одной ячейке стека. Поскольку процедура может вызывать другую процедуру или функцию, стек может содержать информацию о нескольких вложенных вызовах. Если вспомнить рекурсию, вложенные вызовы могут содержать повторяющиеся вызовы. После окончании процедуры управление передается туда, куда указывает последний элемент стека, после чего он очищается. Так как память для стека выделяется при компиляции, длина цепочки вложенных вызовов ограничена, и при ее превышении происходит переполнение стека и аварийное завершение программы.

seo
8th Май 2011
Теги:
seo

Написать ответ

seo
 
seo
Все права защищены © 2023 Joomla портал
 
 
seo