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

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

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

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

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

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

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

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

Интервал:

Закладка:

Сделать

Отношение факториала к приближению Стирлинга:

i = 9

while ((i = i + 1) <= 20) {

print i, " ", fac(i)/stirl(i), "\n"

}

10 1.0000318

11 1.0000265

12 1.0000224

13 1.0000192

14 1.0000166

15 1.0000146

16 1.0000128

17 1.0000114

18 1.0000102

19 1.0000092

20 1.0000083

Приложение 3

Исходные тексты калькулятора hoc

These files contain all the code from "The Unix Programming Environment", by Brian Kernighan and Rob Pike (Prentice Hall, 1984, ISBN 0-13-937681-X). A separate hoc6 distribution contains any fixes that we have applied to that; the version in this file is from the book.

Copyright © Lucent Technologies, 1997. All Rights Reserved

Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both the copyright notice and this permission notice and warranty disclaimer appear in supporting documentation, and that the name of Lucent Technologies or any of its entities not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission.

LUCENT TECHNOLOGIES DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

3.1 hoc1

3.1.1 makefile

hoc1: hoc.o

cc hoc.o -o hoc1

3.1.2 hoc.y

%{

#define YYSTYPE double /* data type of yacc stack */

%}

%token NUMBER

%left '+' /* left associative, same precedence */

%left '*' '/' /* left assoc., higher precedence */

%%

list : /* nothing */

| list '\n'

| list expr '\n' { printf("\t%.8g\n", $2); }

;

expr: NUMBER { $$ = $1; }

| expr '+' expr { $$ = $1 + $3; }

| expr '-' expr { $$ = $1 - $3; }

| expr '*' expr { $$ = $1 * $3; }

| expr '/' expr { $$ = $1 / $3; }

| '(' expr ')' { $$ = $2; }

;

%%

/* end of grammar */

#include

#include

char *progname; /* for error messages */

int lineno = 1;

main(argc, argv) /* hoc1 */

char *argv[];

{

progname = argv[0];

yyparse();

}

yylex() /* hoc1 */

{

int c;

while ((c=getchar()) == ' ' || c == '\t')

;

if (c == EOF)

return 0;

if (c == '.' || isdigit(c)) { /* number */

ungetc(c, stdin);

scanf("%lf", &yylval);

return NUMBER;

if (c == '\n')

lineno++;

return c;

}

yyerror(s) /* called for yacc syntax error */

char *s;

{

warning(s, (char*)0);

}

warning(s, t) /* print warning message */

char *s, *t;

{

fprintf(stderr, "%s: %s", progname, s);

if (t)

fprintf(stderr, " %s", t);

fprintf(stderr, " near line %d\n", lineno);

}

3.1.3 hoc1.y, версия 1.5

%{

#define YYSTYPE double /* data type of yacc stack */

%}

%token NUMBER

%left '-' '+'

%left '*' '/'

%left UNARYMINUS

%%

list: /* nothing */

| list '\n'

| list expr '\n' { printf("\t%.8g\n", $2); }

;

expr: NUMBER { $$ = $1; }

| expr '+' expr { $$ = $1 + $3; }

| expr '-' expr { $$ = $1 - $3; }

| expr '*' expr { $$ = $1 * $3; }

| expr '/' expr { $$ = $1 / $3; }

| '-' expr %prec UNARYMINUS { $$ = -$2; } /* new */

| '(' expr ')' { $$ = $2; }

;

%%

/* end of grammar */

#include

#include

char *progname; /* for error messages */

int lineno = 1;

main(argc, argv) /* hoc1 */

char *argv[];

{

progname = argv[0];

yyparse();

}

yylex() /* hoc1 */

{

int c;

while ((c=getchar()) == ' ' || с == '\t')

;

if (c == EOF)

return 0;

if (c == '.' || isdigit(c)) { /* number */

ungetc(c, stdin);

scanf("%lf", &yylval);

return NUMBER;

}

if (c == '\n')

lineno++;

return c;

}

yyerror(s)

char *s;

{

warning(s, (char *)0);

}

warning(s, t)

char *s, *t;

{

fprintf(stderr, "%s: %s", progname, s);

if (t && *t)

fprintf(stderr, "%s", t);

fprintf(stderr, " near line %d\n", lineno);

}

3.2 hoc2

3.2.1 hoc.y

%{

double mem[26]; /* memory for variables 'a'..'z' */

%}

%union { /* stack type */

double val; /* actual value */

int index; /* index into mem[] */

}

%token NUMBER

%token VAR

%type expr

%right '='

%left '+' '-'

%left '*' '/'

%left UNARYMINUS

%%

list: /* nothing */

| list '\n'

| list expr '\n' { printf("\t%.8g\n\ $2); }

| list error '\n' { yyerrok; }

;

expr: NUMBER

| VAR { $$ = mem[$1]; }

| VAR '=' expr { $$ = mem[$1] = $3; }

| expr '+' expr { $$ = $1 + $3; }

| expr '-' expr { $$ = $1 - $3; }

| expr '*' expr { $$ = $1 * $3; }

| expr '/' expr {

if ($3 == 0.0)

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

Интервал:

Закладка:

Сделать

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

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


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

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

x