Вход/Регистрация
UNIX — универсальная среда программирования
вернуться

Керниган Брайан Уилсон

Шрифт:

return STRING;

 }

 switch (c) {

 case '>': return follow('=', GE, GT);

 case '<': return follow('=', LE, LT);

 case '=': return follow('=', EQ, '=');

 case '!': return follow('=', NE, NOT);

 case '|': return follow(' |', OR, '|');

 case '&': return follow('&', AND, '&');

 case '\n': lineno++; return '\n';

 default: return c;

 }

}

backslash(c) /* get next char with \'s interpreted */

 int c;

{

 char *index; /* 'strchr' in some systems */

 static char transtab[] = "b\bf\fn\nr\rt\t";

 if (c != '\\')

return c;

 с = getc(fin);

 if (islower(c) && index(transtab, c))

return index(transtab, с)[1];

 return c;

}

follow(expect, ifyes, ifno) /* look ahead for >=, etc. */

{

 int с = getc(fin);

 if (c == expect)

return ifyes;

 ungetc(c, fin);

 return ifno;

}

defnonly(s) /* warn if illegal definition */

 char *s;

{

 if (!indef)

execerror(s, "used outside definition");

}

yyerror(s) /* report compile-time error */

 char *s;

{

 warning(s, (char *)0);

}

execerror(s, t) /* recover from run-time error */

 char *s, *t;

{

 warning(s, t);

 fseek(fin, 0L, 2); /* flush rest of file */

 longjmp(begin, 0);

}

fpecatch /* catch floating point exceptions */

{

 execerror("floating point exception", (char*)0);

}

main(argc, argv) /* hoc6 */

 char *argv[];

{

 int i, fpecatch;

 progname = argv[0];

 if (argc == 1) { /* fake an argument list */

static char *stdinonly[] = { "-" };

gargv = stdinonly;

gargc = 1;

 } else {

gargv = argv+1;

gargc = argc-1;

 }

 init;

 while (moreinput)

run;

 return 0;

}

moreinput {

 if (gargc-- <= 0)

return 0;

 if (fin && fin != stdin)

fclose(fin);

 infile = *gargv++;

 lineno = 1;

 if (strcmp(infile, "-") == 0) {

fin = stdin;

infile = 0;

 } else if ((fin=fopen(infile, "r")) == NULL) {

fprintf (stderr, "%s: can't open %s\n", progname, infile);

return moreinput;

 }

 return 1;

}

run /* execute until EOF */

{

 setjmp(begin);

 signal(SIGFPE, fpecatch);

 for (initcode; yyparse; initcode)

  • Читать дальше
  • 1
  • ...
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: