русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Область действия и передача параметров


Дата добавления: 2013-12-23; просмотров: 716; Нарушение авторских прав


Пример.

YACC

yacc - программа синтаксического анализа (yet another compile of compiles).

Также как и lex– ‘она начально была написана, как команда для ОС UNIX.

Часто эти команды используются совместно.

% token CONST VAR ZN EQ

%%

pr: VAR EQ vyr ((выражение)) {printf(“prog\n”);}

vyr : CONST ZN vyr {printf(“CONST ZN vyr\n”);}

VAR ZN vyr {printf(“VAR ZN vyr\n”);}

CONST {printf(“CONST\n”);}

VAR {printf(“VAR\n”);}

Работа над примером : а1 = а1 + с3 - 13

выдала :

CONST

VAR ZN vyr

VAR ZN vyr

prog

Для обработки ошибок есть стандартная функция ERROR.

 

flex - fast lexical analyzer generator

раздел деклараций

%%

раздел правил

%%

пользовательский код

 

Раздел деклараций :

имя значение

Раздел правил :

шаблон действие

 

Шаблоны :

x символ ‘x’

. любой символ кроме ‘\n’

[abj-oZ] любой из ‘a’,’b’,’Z’ и диапазона от ‘j’ до ‘o’

r* любое количество выражений “r”

r+ одно или более выражений “r”

r|s или “r”, или “s”

(r|s)* любое количество выражений “r” или “s”

<<EOF>> конец файла

 

Пример :

 

int num_lint=0;

digit [0-9]

%%

{digit}+”L” { num_lint ++;printf( “longconst\n”); }

%%

main()

{

yylex();

printf( “Number of long int is %d\n”,num_lint);

}

 

 

Существует шестьосновных способа передачи параметров:

1. by value (значением). В вызываемой процедуре выделяется место (память) для параметров и туда помещаются их значения.

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



2. by result (результатом). Память для хранения значения параметра выделяется в вызывающей программе. Это достаточно экзотический способ. Он может иметь место, например, при вызове программы генерации случайных чисел

3. by value-result (значением-результатом). Сочетание первых двух способов.

4. by reference (ссылкой). Память выделяется в вызывающей программе, а в качестве параметра передается ссылка (указатель) на эту память. Это наиболее часто используемый способ.

5. by name (именем) . При этом способе производится текстовая замена формального параметра фактически переданным. Этот способ прежде всего используется в различных претрансляторах и макроассемблерах.

6.by stack (стеком) Это "неклассический" способ, который получил распространение в связи с появлением "нестандартных" языков типа Форт.

 

Весьма условный (позаимствованный) пример. Их обычно приводят, чтобы поразить воображение.

 

Пример :

prog P(x); - фрагмент вызванной процедуры.

B[1]:=1; I:=1;

B[2]:=1; x:=x+2;

I:=1; B[I]:=10;

(*) P(B[I]); I:=2;

x:=x+2;

Фрагмент

вызывающей

программы.

 

Процедура вызывается в точке (*).

 

А поражает то, что при пяти основных способах передачи параметров получаются разные результаты вычислений:

 

Способ передачи B[1] B[2]
- -

 

 



<== предыдущая лекция | следующая лекция ==>
Атрибутные грамматики | Польская инверсная запись


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.26 сек.