UNIX — универсальная среда программирования
UNIX — универсальная среда программирования читать книгу онлайн
В книге американских авторов — разработчиков операционной системы UNIX — блестяще решена проблема автоматизации деятельности программиста, системной поддержки его творчества, выходящей за рамки языков программирования. Профессионалам открыт богатый "встроенный" арсенал системы UNIX. Многочисленными примерами иллюстрировано использование языка управления заданиями
shell.
Для программистов-пользователей операционной системы UNIX.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Определение
%token NUMBER
yacc
#defin
y.tab.c
NUMBER
Yacc
При наличии синтаксической ошибки
yyparse
yyerror
yyerror
warning
hoc
warning
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 %dn", lineno);
}
Этим завершаются процедуры файла
hoc.y
yacc
$ yacc hoc.y
$ сс y.tab.c -о hoc1
$ hoc1
2/3
0.66666667
-3-4
hoc1: syntax error near line 1
$
Исследуйте структуру файла
y.tab.c
hoc1
Ранее мы утверждали, что, работая с
yacc
hoc1
-3-4
вычислялись, а не отвергались как синтаксические ошибки. Всего две строки нужно дополнительно включить в
hoc.y
UNARYMINUS
%left '+' '-'
%left '*' '/'
%left UNARYMINUS /* новая лексема */
Грамматика увеличивается на одно правило для
expr
expr: NUMBER ($$= $1;}
| '-' expr %prec UNARYMINUS {$$=- $2} /* новое */
Определение
%prec
"-"
UNARYMINUS
Добавьте операции
%
hoc1
frexp(3)
make
Обидно, что приходится вводить две команды для компиляции
hoc1
make
make
yacc
Особенно полезно обращаться к
make
hoc1
make
hoc1
make
makefile
$ cat makefile
hoc1: hoc.o
cc hoc.o -o hoc1
$
Здесь сообщается, что
hoc1
hoc.o
hoc1
hoc.o
сс
hoc1
make
yacc
hoc.y
hoc.o
$ make
yacc hoc.y
сс -с y.tab.c
rm y.tab.c
mv y.tab.o hoc.о
сс hoc.о -о hoc1
$ make