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

Тут можно читать бесплатно UNIX — универсальная среда программирования - Керниган Брайан Уилсон. Жанр: Компьютеры и Интернет / Интернет. Так же Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте 500book.ru или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
UNIX — универсальная среда программирования - Керниган Брайан Уилсон
  • Категория: Компьютеры и Интернет / Интернет
  • Автор: Керниган Брайан Уилсон
  • Страниц: 187
  • Добавлено: 2020-10-30 19:02:01
  • Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних просмотр данного контента СТРОГО ЗАПРЕЩЕН! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту pbn.book@yandex.ru для удаления материала


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

Прочтите описание перед тем, как прочитать онлайн книгу «UNIX — универсальная среда программирования - Керниган Брайан Уилсон» бесплатно полную версию:

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

UNIX — универсальная среда программирования - Керниган Брайан Уилсон - читать книгу онлайн бесплатно, автор Керниган Брайан Уилсон

}

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 <stdio.h>

#include <ctype.h>

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 <val> NUMBER

%token <index> VAR

%type <val> 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)

  execerror("division by zero", "");

  $$ = $1 / $3;

 }

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

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

 ;

%%

/* 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) /* hoc2 */

 char *argv[];

{

Перейти на страницу:
Вы автор?
Жалоба
Все книги на сайте размещаются его пользователями. Приносим свои глубочайшие извинения, если Ваша книга была опубликована без Вашего на то согласия.
Напишите нам, и мы в срочном порядке примем меры.
Комментарии / Отзывы
    Ничего не найдено.