UNIX — универсальная среда программирования
UNIX — универсальная среда программирования читать книгу онлайн
В книге американских авторов — разработчиков операционной системы UNIX — блестяще решена проблема автоматизации деятельности программиста, системной поддержки его творчества, выходящей за рамки языков программирования. Профессионалам открыт богатый "встроенный" арсенал системы UNIX. Многочисленными примерами иллюстрировано использование языка управления заданиями
shell.
Для программистов-пользователей операционной системы UNIX.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
$Если один файл изменится, достаточно единственной команды
make$ touch lex.l $ makelex lex.lcc -с lex.yy.crm lex.yy.cmv lex.yy.o lex.occ hoc.o lex.o init.o math.o symbol.o -ll -lm -o hoc3$Некоторое время мы дебатировали о том, следует ли считать обсуждение программы
lexlexhoclexСравните размеры двух версий
hoc3size(1)8.4 Этап 4: компиляция на машину
Мы постепенно приближаемся к созданию
hoc5hoc4hoc3hoc5hoc4hoc4Под простой машиной здесь подразумевается стековая машина: когда появляется операнд, он заносится в стек, точнее, создаются команды, заносящие операнд в стек). Большинство операций над операндами выполняется в вершине стека. Например, при обработке присваивания
x=2*yсоздаются следующие команды:
constpush 2varpush y eval mul varpush x assign pop STOP Когда выполняются команды, выражение вычисляется и результат записывается в
xpopСтековые машины обычно реализуются с помощью простых интерпретаторов, и наш интерпретатор тоже не является исключением: это просто массив, содержащий операции и операнды. Операции представляют собой машинные команды: каждая из них суть обращение к функции с параметрами, которые следуют за командой. Некоторые операнды могут уже находиться в стеке, как было показано в приведенном выше примере.
Структура таблицы имен для
hoc4hoc3init.cmath.choc4hoc3VARvarpusheval'*'mul$ cat hoc.y%{#include "hoc.h"#define code2(c1,c2) code(c1); code(c2)#define code3(c1,c2,c3) code(c1); code(c2); code(c3)%}%union { Symbol *sym; /* symbol table pointer */ Inst *inst; /* machine instruction */}%token <sym> NUMBER VAR BLTIN UNDEF%right '='%left '+'%left '*' '/'%left UNARYMINUS%right '^' /* exponentiation */%%list: /* nothing */ | list 'n' | list asgn 'n' { code2(pop, STOP); return 1; } | list expr 'n' { code2(print, STOP); return 1; } | list error 'n' { yyerrok; } ;asgn: VAR '=' expr { code3(varpush, (Inst)$1, assign); } ;expr: NUMBER { code2(constpush, (Inst)$1); }
