UNIX — универсальная среда программирования
UNIX — универсальная среда программирования читать книгу онлайн
В книге американских авторов — разработчиков операционной системы UNIX — блестяще решена проблема автоматизации деятельности программиста, системной поддержки его творчества, выходящей за рамки языков программирования. Профессионалам открыт богатый "встроенный" арсенал системы UNIX. Многочисленными примерами иллюстрировано использование языка управления заданиями
shell.
Для программистов-пользователей операционной системы UNIX.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
;expr: NUMBER { code2(constpush, (Inst)$1); } | VAR { code3(varpush, (Inst)$1, eval); } | asgn | BLTIN '(' expr ')' { code2(bltin, (Inst)$1->u.ptr); } | '(' expr ')' | expr '+' expr { code(add); } | expr '-' expr { code(sub); } | expr '*' expr { code(mul); } | expr '/' expr { code(div); } | expr '^' expr { code(power); } | '-' expr %prec UNARYMINUS { code(negate); } ;%%/* end of grammar */#include <stdio.h>#include <ctype.h>char *progname;int lineno = 1;#include <signal.h>#include <setjmp.h>jmp_buf begin;main(argc, argv) /* hoc4 */ char *argv[];{ int fpecatch(); progname = argv[0]; init(); setjmp(begin); signal(SIGFPE, fpecatch); for (initcode(); yyparse(); initcode()) execute(prog); return 0;}static int c; /* global for use by warning() */yylex() /* hoc4 */{ while ((c=getchar()) == ' ' || с == 't') ; if (c == EOF) return 0; if (c == '.' || isdigit(c)) { /* number */ double d; ungetc(c, stdin); scanf ("%lf", &d); yylval.sym = install("", NUMBER, d); return NUMBER; } if (isalpha(c)) { Symbol *s; char sbuf[100], *p = sbuf; do { *p++ = c; } while ((c=getchar()) != EOF && isalnum(c)); ungetc(c, stdin); *p = ' '; if ((s=lookup(sbuf)) == 0) s = install(sbuf, UNDEF, 0.0); yylval.sym = s; return s->type == UNDEF ? VAR : s->type; } if (c == 'n') lineno++; return c;}yyerror(s) char *s;{ warning(s, (char *)0);}execerror(s, t) /* recover from run-time error */ char *s, *t;{ warning(s, t); longjmp(begin, 0);}fpecatch() /* catch floating point exceptions */{ execerror("floating point exception", (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 %dn", lineno); while (c != 'n' && с != EOF) с = getchar(); /* flush rest of input line */}3.5.4
init.c#include "hoc.h"#include "y.tab.h"#include <math.h>extern double Log(), Log10(), Exp(), Sqrt(), integer();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};
