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

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

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

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

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

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

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

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

Интервал:

Закладка:

Сделать

"print", PRINT,

0, 0,

};

static struct { /* Constants */

char *name;

double eval;

} consts[] = {

"PI", 3.14159265358979323846,

"E", 2.71828182845904523536,

"GAMMA", 0.57721566490153286060, /* Euler */

"DEG", 57.29577951308232087680, /* deg/radian */

"PHI", 1.61803398874989484820, /* golden ratio */

0, 0

};

static struct { /* Built-ins */

char *name;

double (*func)();

} builtins[] = {

"sin", sin,

"cos", cos,

"atan", atan,

"log", Log, /* checks argument */

"log10", Log10, /* checks argument */

"exp", exp,

"sqrt", Sqrt, /* checks argument */

"int", integer,

"abs", fabs,

0, 0

};

init() /* install constants and built-ins in table */

{

int i;

Symbol *s;

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

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

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

install(consts[i].name, VAR, consts[i].eval);

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

s = install(builtins[i].name, BLTIN, 0.0);

s->u.ptr = builtins[i].func;

}

}

3.6.7 makefile

YFLAGS = -d

OBJS = hoc.o code.o init.o math.o symbol.o

hoc5: $(OBJS)

cc $(OBJS) -lm -o hoc5

hoc.o code.o init.o symbol.o: hoc.h

code.o init.o symbol.o: x.tab.h

x.tab.h: y.tab.h

-cmp -s x.tab.h y.tab.h || cp y.tab.h x.tab.h

pr: hoc.y hoc.h code.c init.c math.c symbol.c

@pr $?

@touch pr

clean:

rm -f $(OBJS) [xy].tab.[ch]

3.6.8 math.c

#include

#include

extern int errno;

double errcheck();

double Log(x)

double x;

{

return errcheck(log(x), "log");

}

double Log10(x)

double x;

{

return errcheck(log10(x), "log10");

}

double Sqrt(x)

double x;

{

return errcheck(sqrt(x), "sqrt");

}

double Exp(x)

double x;

{

return errcheck(exp(x), "exp");

}

double Pow(x, y)

double x, y;

{

return errcheck(pow(x,y), "exponentiation");

}

double integer(x)

double x;

{

return (double)(long)x;

}

double errcheck(d, s) /* check result of library call */

double d;

char *s;

{

if (errno == EDOM) {

errno = 0;

execerror(s, "argument out of domain");

} else if (errno == ERANGE) {

errno = 0;

execerror(s, "result out of range");

}

return d;

}

3.6.9 symbol.c

#include "hoc.h"

#include "y.tab.h"

static Symbol *symlist =0; /* symbol table: linked list */

Symbol *lookup(s) /* find s in symbol table */

char *s;

{

Symbol *sp;

for (sp = symlist; sp != (Symbol*)0; sp = sp->next)

if (strcmp(sp->name, s) == 0)

return sp;

return 0; /* 0 ==> not found */

}

Symbol *install(s, t, d) /* install s in symbol table */

char *s;

int t;

double d;

{

Symbol *sp;

char *emalloc();

sp = (Symbol*)emalloc(sizeof(Symbol));

sp->name = emalloc(strlen(s)+1); /* +1 for '\0' */

strcpy(sp->name, s);

sp->type = t;

sp->u.val = d;

sp->next = symlist; /* put at front of list */

symlist = sp;

return sp;

}

char *emalloc(n) /* check return from malloc */

unsigned n;

{

char *p, *malloc();

p = malloc(n);

if (p == 0)

execerror("out of memory", (char*)0);

return p;

}

3.7 hoc6

3.7.1 ack

func ack() {

n = n+1

if ($1 == 0) return ($2+1)

if ($2 == 0) return (ack($1 - 1, 1))

return (ack($1 - 1, ack($1, $2 - 1)))

}

n=0

ack(3,3)

print n, "calls\n"

3.7.2 ack1

func ack() {

n = n+1

if ($1 == 0) return ($2+1)

if ($2 == 0) return (ack($1 - 1, 1))

return (ack($1 - 1, ack($1, $2 - 1)))

}

n=0

while (read(x)) {

read(y)

print ack(x,y), "\n"

}

print n,"\n"

3.7.3 code.c

#include "hoc.h"

#include "y.tab.h"

#include

#define NSTACK 256

static Datum stack[NSTACK]; /* the stack */

static Datum *stackp; /* next free spot on stack */

#define NPROG 2000

Inst prog[NPROG]; /* the machine */

Inst *progp; /* next free spot for code generation */

Inst *pc; /* program counter during execution */

Inst *progbase = prog; /* start of current subprogram */

int returning; /* 1 if return stmt seen */

typedef struct Frame { /* proc/func call stack frame */

Symbol *sp; /* symbol table entry */

Inst *retpc; /* where to resume after return */

Datum *argn; /* n-th argument on stack */

int nargs; /* number of arguments */

} Frame;

#define NFRAME 100

Frame frame[NFRAME];

Frame *fp; /* frame pointer */

initcode() {

progp = progbase;

stackp = stack;

fp = frame;

returning = 0;

}

push(d)

Datum d;

{

if (stackp >= &stack[NSTACK])

execerror("stack too deep", (char*)0);

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

Интервал:

Закладка:

Сделать

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

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


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

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

x