%{
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef union {
int ival;
char *string;
} YYSTYPE;
YYSTYPE yylval;
%token IF ELSE LPAREN RPAREN LBRACE RBRACE SEMICOLON ASSIGN PLUS MINUS TIMES DIVIDE GT LT GE LE EQ NE AND OR
%token NUMBER IDENTIFIER
%}
%%
statement: if_statement
| assignment
| other_statement // For other statements
if_statement: IF LPAREN condition RPAREN LBRACE statement_list RBRACE
| IF LPAREN condition RPAREN LBRACE statement_list RBRACE ELSE LBRACE statement_list RBRACE
;
statement_list: statement
| statement_list statement
;
condition: expression relational_operator expression { $$ = ($1 $2 $3); }
relational_operator: GT | LT | GE | LE | EQ | NE | AND | OR;
assignment: IDENTIFIER ASSIGN expression SEMICOLON {
printf("Assigning %d to %s\n", $3, $1); // Placeholder action
}
expression: expression PLUS expression { $$ = $1 + $3; }
| expression MINUS expression { $$ = $1 - $3; }
| expression TIMES expression { $$ = $1 * $3; }
| expression DIVIDE expression { $$ = $1 / $3; }
| IDENTIFIER { $$ = 0; } // Placeholder
| LPAREN expression RPAREN { $$ = $2; } // Parentheses for grouping
;
other_statement: /* Empty or other statements */
;
%%
int yyerror(char *s) {
fprintf(stderr, "Error: %s\n", s);
return 1;
}
int main() {
printf("Enter code (Ctrl+D to finish):\n");
yyparse();
return 0;
}
JXsKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKdHlwZWRlZiB1bmlvbiB7CiAgICBpbnQgaXZhbDsKICAgIGNoYXIgKnN0cmluZzsKfSBZWVNUWVBFOwoKWVlTVFlQRSB5eWx2YWw7CgoldG9rZW4gSUYgRUxTRSBMUEFSRU4gUlBBUkVOIExCUkFDRSBSQlJBQ0UgU0VNSUNPTE9OIEFTU0lHTiBQTFVTIE1JTlVTIFRJTUVTIERJVklERSBHVCBMVCBHRSBMRSBFUSBORSBBTkQgT1IKJXRva2VuIE5VTUJFUiBJREVOVElGSUVSCgolfQoKJSUKCnN0YXRlbWVudDogIGlmX3N0YXRlbWVudAogICAgICAgIHwgYXNzaWdubWVudAogICAgICAgIHwgb3RoZXJfc3RhdGVtZW50ICAvLyBGb3Igb3RoZXIgc3RhdGVtZW50cwoKaWZfc3RhdGVtZW50OiBJRiBMUEFSRU4gY29uZGl0aW9uIFJQQVJFTiBMQlJBQ0Ugc3RhdGVtZW50X2xpc3QgUkJSQUNFCiAgICAgICAgICAgIHwgSUYgTFBBUkVOIGNvbmRpdGlvbiBSUEFSRU4gTEJSQUNFIHN0YXRlbWVudF9saXN0IFJCUkFDRSBFTFNFIExCUkFDRSBzdGF0ZW1lbnRfbGlzdCBSQlJBQ0UKICAgICAgICAgICAgOwoKc3RhdGVtZW50X2xpc3Q6IHN0YXRlbWVudAogICAgICAgICAgICB8IHN0YXRlbWVudF9saXN0IHN0YXRlbWVudAogICAgICAgICAgICA7Cgpjb25kaXRpb246ICBleHByZXNzaW9uIHJlbGF0aW9uYWxfb3BlcmF0b3IgZXhwcmVzc2lvbiB7ICQkID0gKCQxICQyICQzKTsgfQoKcmVsYXRpb25hbF9vcGVyYXRvcjogR1QgfCBMVCB8IEdFIHwgTEUgfCBFUSB8IE5FIHwgQU5EIHwgT1I7Cgphc3NpZ25tZW50OiBJREVOVElGSUVSIEFTU0lHTiBleHByZXNzaW9uIFNFTUlDT0xPTiB7CiAgICAgICAgICAgICAgcHJpbnRmKCJBc3NpZ25pbmcgJWQgdG8gJXNcbiIsICQzLCAkMSk7IC8vIFBsYWNlaG9sZGVyIGFjdGlvbgogICAgICAgICAgfQoKZXhwcmVzc2lvbjogZXhwcmVzc2lvbiBQTFVTIGV4cHJlc3Npb24gICAgeyAkJCA9ICQxICsgJDM7IH0KICAgICAgICAgIHwgZXhwcmVzc2lvbiBNSU5VUyBleHByZXNzaW9uICAgeyAkJCA9ICQxIC0gJDM7IH0KICAgICAgICAgIHwgZXhwcmVzc2lvbiBUSU1FUyBleHByZXNzaW9uICAgeyAkJCA9ICQxICogJDM7IH0KICAgICAgICAgIHwgZXhwcmVzc2lvbiBESVZJREUgZXhwcmVzc2lvbiAgeyAkJCA9ICQxIC8gJDM7IH0KICAgICAgICAgIHwgTlVNQkVSICAgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9ICQxOyB9CiAgICAgICAgICB8IElERU5USUZJRVIgICAgICAgICAgICAgICAgICAgIHsgJCQgPSAwOyB9IC8vIFBsYWNlaG9sZGVyCiAgICAgICAgICB8IExQQVJFTiBleHByZXNzaW9uIFJQQVJFTiAgICAgICB7ICQkID0gJDI7IH0gLy8gUGFyZW50aGVzZXMgZm9yIGdyb3VwaW5nCiAgICAgICAgICA7CgpvdGhlcl9zdGF0ZW1lbnQ6ICAvKiBFbXB0eSBvciBvdGhlciBzdGF0ZW1lbnRzICovCiAgICAgICAgICAgICAgICA7CgolJQoKaW50IHl5ZXJyb3IoY2hhciAqcykgewogICAgZnByaW50ZihzdGRlcnIsICJFcnJvcjogJXNcbiIsIHMpOwogICAgcmV0dXJuIDE7Cn0KCmludCBtYWluKCkgewogICAgcHJpbnRmKCJFbnRlciBjb2RlIChDdHJsK0QgdG8gZmluaXNoKTpcbiIpOwogICAgeXlwYXJzZSgpOwogICAgcmV0dXJuIDA7Cn0=