parser/calc/parser.y
changeset 39 46d7ec9d63bd
parent 38 48f6f3918b82
equal deleted inserted replaced
38:48f6f3918b82 39:46d7ec9d63bd
    19 %left MINUS PLUS MUL DIV
    19 %left MINUS PLUS MUL DIV
    20 %left UMINUS
    20 %left UMINUS
    21 %%
    21 %%
    22 
    22 
    23 list:
    23 list:
    24 	/* empty */
    24     /* empty */
    25 	| list stat '\n'
    25     | list stat '\n'
    26 	| list error '\n' { yyerrok; };
    26     | list error '\n' { yyerrok; };
    27 
    27 
    28 stat:
    28 stat:
    29 	expr { (void) printf( "RESULT: %d\n", $1 ); }
    29     expr { (void) printf( "RESULT: %d\n", $1 ); }
    30 	| LETTER '=' expr { regs[$1] = $3; }
    30     | LETTER '=' expr { regs[$1] = $3; }
    31 	;
    31     ;
    32 
    32 
    33 expr:
    33 expr:
    34 	'(' expr ')'
    34     '(' expr ')'
    35 	{
    35     {
    36 		$$ = $2;
    36         $$ = $2;
    37 	}
    37     }
    38 	| expr PLUS expr
    38     | expr PLUS expr
    39 	{
    39     {
    40 		$$ = $1 + $3;
    40         $$ = $1 + $3;
    41 	}
    41     }
    42 	| expr MINUS expr
    42     | expr MINUS expr
    43 	{
    43     {
    44 		$$ = $1 - $3;
    44         $$ = $1 - $3;
    45 	}
    45     }
    46 	| expr MUL expr
    46     | expr MUL expr
    47 	{
    47     {
    48 		$$ = $1 * $3;
    48         $$ = $1 * $3;
    49 	}
    49     }
    50 	| expr DIV expr
    50     | expr DIV expr
    51 	{
    51     {
    52 			$$ = $1 / $3;
    52             $$ = $1 / $3;
    53 	}
    53     }
    54 	| MINUS expr  %prec UMINUS
    54     | MINUS expr  %prec UMINUS
    55 	{
    55     {
    56 		$$ = -$2;
    56         $$ = -$2;
    57 	}
    57     }
    58 	| LETTER
    58     | LETTER
    59 	{
    59     {
    60 		$$ = regs[$1];
    60         $$ = regs[$1];
    61 	}
    61     }
    62 	|  number
    62     |  number
    63 	;
    63     ;
    64 
    64 
    65 number:
    65 number:
    66 	DIGIT
    66     DIGIT
    67 	{
    67     {
    68 		$$ = $1; base = ($1==0) ? 8 : 10;
    68         $$ = $1; base = ($1==0) ? 8 : 10;
    69 	}
    69     }
    70 	| number DIGIT
    70     | number DIGIT
    71 	{
    71     {
    72 		$$ = base * $1 + $2;
    72         $$ = base * $1 + $2;
    73 	}
    73     }
    74 	;
    74     ;
    75 %%
    75 %%
    76 
    76 
    77 int yyerror()
    77 int yyerror()
    78 {
    78 {
    79 	printf("ERROR\n");
    79     printf("ERROR\n");
    80 	return 0;
    80     return 0;
    81 }
    81 }
    82 
    82 
    83 int yywrap()
    83 int yywrap()
    84 {
    84 {
    85 	return 1;
    85     return 1;
    86 }
    86 }