Брайан Керниган - UNIX — универсальная среда программирования

Здесь есть возможность читать онлайн «Брайан Керниган - UNIX — универсальная среда программирования» — ознакомительный отрывок электронной книги совершенно бесплатно, а после прочтения отрывка купить полную версию. В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Москва, Год выпуска: 1992, ISBN: 1992, Издательство: Финансы и статистика, Жанр: ОС и Сети, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

UNIX — универсальная среда программирования: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «UNIX — универсальная среда программирования»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

В книге американских авторов — разработчиков операционной системы UNIX — блестяще решена проблема автоматизации деятельности программиста, системной поддержки его творчества, выходящей за рамки языков программирования. Профессионалам открыт богатый "встроенный" арсенал системы UNIX. Многочисленными примерами иллюстрировано использование языка управления заданиями
.
Для программистов-пользователей операционной системы UNIX.

UNIX — универсальная среда программирования — читать онлайн ознакомительный отрывок

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «UNIX — универсальная среда программирования», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

}

}

Функция follow"смотрит" на один символ вперед и возвращает символ назад во входной поток с помощью ungetc, если он оказался не тем, который требовался:

follow(expect, ifyes, ifno) /* look ahead for >=, etc. */

{

int с = getchar();

if (c == expect)

return ifyes;

ungetc(c, stdin);

return ifno;

}

В файле hoc.hстало больше описаний функций, например всех отношений, но в общем его структура такая же, как и в hoc4. Ниже приведено несколько последних строк грамматики:

$ cat hoc.h

...

typedef int (*Inst)(); /* machine instruction */

#define STOP (Inst)0

extern Inst prog[], *progp, *code();

extern eval(), add(), sub(), mul(), div(), negate(), power();

extern assign(), bltin(), varpush(), constpush(), print();

extern prexpr();

extern gt(), lt(), eq(), ge(), le(), ne(), and(), or(), not();

extern ifcode(), whilecode();

$

Большая часть файла code.cтакже не изменилась, хотя, очевидно, здесь появилось много новых процедур для обработки операций отношений. Типичным примером может служить функция le("less than equal to" меньше или равно).

le() {

Datum d1, d2;

d2 = pop();

d1 = pop();

d1.val = (double)(d1.val <= d2.val);

push(d1);

}

He совсем тривиальными являются функции whilecodeи ifcode. Чтобы понять их, необходимо уяснить, что функция executeпоследовательно обрабатывает команды до тех пор, пока не будет найдена команда STOP, после чего происходит возврат из execute. Процесс разбора построен таким образом, что команда STOPзавершает каждую последовательность команд, которую нужно обработать за одно обращение к execute. Тело цикла while, а также условие и фрагменты оператора ifпосле thenи elseобрабатываются с помощью рекурсивных обращений к execute, возврат из которых по завершении обработки осуществляется в функцию executeна один уровень вложенности выше. Управление этими рекурсивными обращениями обеспечивается в whilecodeи ifcode. Последние и предназначены для обработки соответствующих операторов.

whilecode() {

Datum d;

Inst *savepc = pc; /* loop body */

execute(savepc+2); /* condition */

d = pop();

while (d.val) {

execute(*((Inst **)(savepc))); /* body */

execute(savepc+2);

d = pop();

}

pc = *((Inst **)(savepc+1)); /* next statement */

}

Как уже отмечалось ранее, после операции whilecodeразмещается указатель на тело цикла, затем указатель на следующий оператор, а за ним команды условия. Когда вызывается whilecode, значение указателя pcуже увеличено, так что он содержит указатель на тело цикла. Таким образом, pc+1настроен на следующий оператор, а pc+2на команды условия.

Функция ifcodeаналогична предыдущей: при входе в нее pcссылается на фрагмент посте then, pc+1на фрагмент посте else, pc+2на следующий оператор, а pc+3на условие.

ifcode()

{

Datum d;

Inst *savepc = pc; /* then part */

execute(savepc+3); /* condition */

d = pop();

if (d.val)

execute(*((Inst **)(savepc)));

else if (*((Inst **)(savepc+1))) /* else part? */

execute(*((Inst **)(savepc+1)));

pc = *((Inst**)(savepc+2)); /* next stmt */

}

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

$ cat init.с

...

static struct { /* Keywords */

char *name;

int kval;

} keywords [] = {

"if", IF,

"else", ELSE,

"while", WHILE,

"print", PRINT,

0, 0,

};

...

Для занесения в таблицу имен ключевых слов нужно организовать еще один цикл в функции init:

...

for (i = 0; keywords[i].name; i++)

install(keywords[i].name, keywords[i].kval, 0.0);

...

Изменения в функциях, управляющих таблицей имен, не требуются; в файле code.cесть функция prexpr, которая вызывается при выполнении оператора вида print выраж .

prexpr() /* print numeric value */

{

Datum d;

d = pop();

printf ('"%.8g\n", d.val);

}

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

Теперь hoc5представляет собой вполне полезный калькулятор, хотя для серьезного программирования необходимы дополнительные средства. В приведенных ниже упражнениях предлагаются возможные решения.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «UNIX — универсальная среда программирования»

Представляем Вашему вниманию похожие книги на «UNIX — универсальная среда программирования» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «UNIX — универсальная среда программирования»

Обсуждение, отзывы о книге «UNIX — универсальная среда программирования» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x