diff options
Diffstat (limited to 'usr.bin/yacc/tests/calc3.y')
-rw-r--r-- | usr.bin/yacc/tests/calc3.y | 123 |
1 files changed, 0 insertions, 123 deletions
diff --git a/usr.bin/yacc/tests/calc3.y b/usr.bin/yacc/tests/calc3.y deleted file mode 100644 index 252faa9..0000000 --- a/usr.bin/yacc/tests/calc3.y +++ /dev/null @@ -1,123 +0,0 @@ -%pure-parser - -%parse-param { int regs[26] } -%parse-param { int *base } - -%lex-param { int *base } - -%{ -# include <stdio.h> -# include <ctype.h> - -#ifdef YYBISON -#define YYSTYPE int -#define YYLEX_PARAM base -#define YYLEX_DECL() yylex(YYSTYPE *yylval, int *YYLEX_PARAM) -#define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s) -int YYLEX_DECL(); -static void YYERROR_DECL(); -#endif - -%} - -%start list - -%token DIGIT LETTER - -%left '|' -%left '&' -%left '+' '-' -%left '*' '/' '%' -%left UMINUS /* supplies precedence for unary minus */ - -%% /* beginning of rules section */ - -list : /* empty */ - | list stat '\n' - | list error '\n' - { yyerrok ; } - ; - -stat : expr - { printf("%d\n",$1);} - | LETTER '=' expr - { regs[$1] = $3; } - ; - -expr : '(' expr ')' - { $$ = $2; } - | expr '+' expr - { $$ = $1 + $3; } - | expr '-' expr - { $$ = $1 - $3; } - | expr '*' expr - { $$ = $1 * $3; } - | expr '/' expr - { $$ = $1 / $3; } - | expr '%' expr - { $$ = $1 % $3; } - | expr '&' expr - { $$ = $1 & $3; } - | expr '|' expr - { $$ = $1 | $3; } - | '-' expr %prec UMINUS - { $$ = - $2; } - | LETTER - { $$ = regs[$1]; } - | number - ; - -number: DIGIT - { $$ = $1; (*base) = ($1==0) ? 8 : 10; } - | number DIGIT - { $$ = (*base) * $1 + $2; } - ; - -%% /* start of programs */ - -#ifdef YYBYACC -extern int YYLEX_DECL(); -#endif - -int -main (void) -{ - int regs[26]; - int base = 10; - - while(!feof(stdin)) { - yyparse(regs, &base); - } - return 0; -} - -static void -YYERROR_DECL() -{ - fprintf(stderr, "%s\n", s); -} - -int -YYLEX_DECL() -{ - /* lexical analysis routine */ - /* returns LETTER for a lower case letter, yylval = 0 through 25 */ - /* return DIGIT for a digit, yylval = 0 through 9 */ - /* all other characters are returned immediately */ - - int c; - - while( (c=getchar()) == ' ' ) { /* skip blanks */ } - - /* c is now nonblank */ - - if( islower( c )) { - *yylval = (c - 'a'); - return ( LETTER ); - } - if( isdigit( c )) { - *yylval = (c - '0') % (*base); - return ( DIGIT ); - } - return( c ); -} |