ch3-03.y | ch3-03.y | |||
---|---|---|---|---|
%{ | %{ | |||
/* For printf() */ | ||||
#include <stdio.h> | ||||
/* Proformas for functions we define below... */ | ||||
void yyerror(char *s); | ||||
int yylex(void); | ||||
/* Specific for here... */ | ||||
double vbltable[26]; | double vbltable[26]; | |||
%} | %} | |||
%union { | %union { | |||
double dval; | double dval; | |||
int vblno; | int vblno; | |||
} | } | |||
%token <vblno> NAME | %token <vblno> NAME | |||
%token <dval> NUMBER | %token <dval> NUMBER | |||
skipping to change at line 41 | skipping to change at line 49 | |||
yyerror("divide by zero"); | yyerror("divide by zero"); | |||
else | else | |||
$$ = $1 / $3; | $$ = $1 / $3; | |||
} | } | |||
| '-' expression %prec UMINUS { $$ = -$2; } | | '-' expression %prec UMINUS { $$ = -$2; } | |||
| '(' expression ')' { $$ = $2; } | | '(' expression ')' { $$ = $2; } | |||
| NUMBER | | NUMBER | |||
| NAME { $$ = vbltable[$1]; } | | NAME { $$ = vbltable[$1]; } | |||
; | ; | |||
%% | %% | |||
/* An optional but friendlier yyerror function... */ | ||||
void yyerror(char *s) | ||||
{ | ||||
extern int yylineno; // defined and maintained in lex | ||||
extern char *yytext; // defined and maintained in lex | ||||
fprintf(stderr, "ERROR: %s at symbol '%s' on line %d\n", s, yytext, yylineno); | ||||
} | ||||
End of changes. 2 change blocks. | ||||
0 lines changed or deleted | 8 lines changed or added | |||
This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |