fixed expression rules
This commit is contained in:
@ -195,58 +195,67 @@ rec_op :
|
|||||||
|
|
||||||
expression:
|
expression:
|
||||||
constant {printf("constant expression\n");} {$$ = $<words>1;}
|
constant {printf("constant expression\n");} {$$ = $<words>1;}
|
||||||
|
|
||||||
| SUB_OR_NEG expression %prec UMINUS {printf("negative expression\n");if(strcmp($2,"integer") != 0)
|
| SUB_OR_NEG expression %prec UMINUS {printf("negative expression\n");if(strcmp($2,"integer") != 0)
|
||||||
{printf("cant negate something not an integer at line %d and column %d\n",@2.first_line,@2.first_column);
|
{printf("cant negate something not an integer at line %d and column %d\n",@2.first_line,@2.first_column);
|
||||||
$$=strdup("undefined");}else{$$=$2;}}
|
$$=strdup("undefined");}else{$$=$2;}}
|
||||||
|
|
||||||
| NOT expression {printf("not expression\n"); if(strcmp($2,"Boolean")==0){$$=$2;}else{$$=strdup("undefined");
|
| NOT expression {printf("not expression\n"); if(strcmp($2,"Boolean")==0){$$=$2;}else{$$=strdup("undefined");
|
||||||
printf("mismatch at line %d and column %d\n",@1.first_line,@1.first_column);}}
|
printf("mismatch at line %d and column %d\n",@1.first_line,@1.first_column);}}
|
||||||
|
|
||||||
| expression ADD expression
|
| expression ADD expression
|
||||||
{printf("add expression\n");if(strcmp($1,$3)==0 && strcmp($1,"integer")==0){$$=strdup("Boolean");}
|
{printf("add expression\n");if(strcmp($1,$3)==0 && strcmp($1,"integer")==0){$$=strdup("integer");}
|
||||||
else{printf("mismatch at line %d and column %d\n",@2.first_line,@2.first_column);
|
else{printf("mismatch at line %d and column %d\n",@2.first_line,@2.first_column);
|
||||||
$$=strdup("Boolean");$$=strdup("undefined");}}
|
$$=strdup("undefined");}}
|
||||||
|
|
||||||
| expression SUB_OR_NEG expression
|
| expression SUB_OR_NEG expression
|
||||||
{printf("less than expression\n");if(strcmp($1,$3)==0 &&strcmp($1,"integer")==0){$$=strdup("Boolean");}
|
{printf("sub or neg expression\n");if(strcmp($1,$3)==0 &&strcmp($1,"integer")==0){$$=strdup("integer");}
|
||||||
else{printf("mismatch at line %d and column %d\n",@2.first_line,@2.first_column);
|
else{printf("mismatch at line %d and column %d\n",@2.first_line,@2.first_column);
|
||||||
$$=strdup("Boolean");$$=strdup("undefined");}}
|
$$=strdup("undefined");}}
|
||||||
|
|
||||||
| expression MUL expression
|
| expression MUL expression
|
||||||
{printf("multiply expression\n");
|
{printf("multiply expression\n");
|
||||||
printf("less than expression\n");if(strcmp($1,$3)==0 &&strcmp($1,"integer")==0){$$=strdup("Boolean");}
|
if(strcmp($1,$3)==0 &&strcmp($1,"integer")==0){$$=strdup("integer");}
|
||||||
else{printf("mismatch at line %d and column %d\n",@2.first_line,@2.first_column);
|
else{printf("mismatch at line %d and column %d\n",@2.first_line,@2.first_column);
|
||||||
$$=strdup("Boolean");$$=strdup("undefined");}}
|
$$=strdup("undefined");}}
|
||||||
|
|
||||||
| expression DIV expression
|
| expression DIV expression
|
||||||
{printf("less than expression\n");if(strcmp($1,$3)==0 && strcmp($1,"integer")==0){$$=strdup("Boolean");}
|
{printf("divide expression\n");if(strcmp($1,$3)==0 && strcmp($1,"integer")==0){$$=strdup("integer");}
|
||||||
else{printf("mismatch at line %d and column %d\n",@2.first_line,@2.first_column);
|
else{printf("mismatch at line %d and column %d\n",@2.first_line,@2.first_column);
|
||||||
$$=strdup("Boolean");$$=strdup("undefined");}}
|
$$=strdup("undefined");}}
|
||||||
|
|
||||||
| expression REM expression
|
| expression REM expression
|
||||||
{printf("less than expression\n");if(strcmp($1,$3)==0 && strcmp($1,"integer")==0){$$=strdup("Boolean");}
|
{printf("remainder expression\n");if(strcmp($1,$3)==0 && strcmp($1,"integer")==0){$$=strdup("integer");}
|
||||||
else{printf("mismatch at line %d and column %d\n",@2.first_line,@2.first_column);
|
else{printf("mismatch at line %d and column %d\n",@2.first_line,@2.first_column);
|
||||||
$$=strdup("Boolean");$$=strdup("undefined");}}
|
$$=strdup("undefined");}}
|
||||||
|
|
||||||
| expression AND expression
|
| expression AND expression
|
||||||
{printf("less than expression\n");if(strcmp($1,$3)==0 && strcmp($1,"integer")==0){$$=strdup("Boolean");}
|
{printf("AND expression\n");if(strcmp($1,$3)==0 && strcmp($1,"Boolean")==0){$$=strdup("Boolean");}
|
||||||
else{printf("mismatch at line %d and column %d\n",@2.first_line,@2.first_column);
|
else{printf("mismatch at line %d and column %d\n",@2.first_line,@2.first_column);
|
||||||
$$=strdup("Boolean");$$=strdup("undefined");}}
|
$$=strdup("undefined");}}
|
||||||
|
|
||||||
| expression OR expression
|
| expression OR expression
|
||||||
{printf("less than expression\n");if(strcmp($1,$3)==0 &&
|
{printf("OR\n");if(strcmp($1,$3)==0 &&
|
||||||
strcmp($1,"integer")==0){$$=strdup("Boolean");}
|
strcmp($1,"Boolean")==0){$$=strdup("Boolean");}
|
||||||
else{printf("mismatch at line %d and column %d\n",@2.first_line,@2.first_column);
|
else{printf("mismatch at line %d and column %d\n",@2.first_line,@2.first_column);
|
||||||
$$=strdup("Boolean");$$=strdup("undefined");}}
|
$$=strdup("undefined");}}
|
||||||
|
|
||||||
| expression LESS_THAN expression
|
| expression LESS_THAN expression
|
||||||
{printf("less than expression\n");if(strcmp($1,$3)==0 &&
|
{printf("less than expression\n");if(strcmp($1,$3)==0 &&
|
||||||
strcmp($1,"integer")==0){$$=strdup("Boolean");}
|
strcmp($1,"integer")==0){$$=strdup("Boolean");}
|
||||||
else{printf("mismatch at line %d and column %d\n",@2.first_line,@2.first_column);
|
else{printf("mismatch at line %d and column %d\n",@2.first_line,@2.first_column);
|
||||||
$$=strdup("Boolean");$$=strdup("undefined");}}
|
$$=strdup("undefined");}}
|
||||||
|
|
||||||
| expression EQUAL_TO expression {printf("equals check expression\n");
|
| expression EQUAL_TO expression {printf("equals check expression\n");
|
||||||
if(strcmp($1,$3)==0){$$=strdup("Boolean");}
|
if(strcmp($1,$3)==0){$$=strdup("Boolean");}
|
||||||
else if((strcmp($1,"array")==0||strcmp($1,"record")==0||
|
else if((strcmp($1,"array")==0||strcmp($1,"record")==0||
|
||||||
strcmp($1,"function type primitive")==0) && (strcmp($3,"address")==0)){$$=strdup("Boolean");}
|
strcmp($1,"function type primitive")==0) && (strcmp($3,"address")==0)){$$=strdup("Boolean");}
|
||||||
else{printf("mismatch at line %d and column %d\n",@2.first_line,@2.first_column);$$=strdup("undefined");}}
|
else{printf("mismatch at line %d and column %d\n",@2.first_line,@2.first_column);$$=strdup("undefined");}}
|
||||||
|
|
||||||
| assignable {printf("assignable expression\n");$$=$1;}
|
| assignable {printf("assignable expression\n");$$=$1;}
|
||||||
|
|
||||||
| L_PAREN expression R_PAREN {printf("paren expression\n");$$=$2;}
|
| L_PAREN expression R_PAREN {printf("paren expression\n");$$=$2;}
|
||||||
|
|
||||||
| memOp assignable {$$ = strdup("address");}
|
| memOp assignable {$$ = strdup("address");}
|
||||||
;
|
;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user