%{ #include #define YYSTYPE float extern char *yytext; %} %start function_defination %token OPEN,CLOSE,NUMBER, POWER, DIVIDE, MOD, MULTIPLY, PLUS, MINUS, TERMINATOR,IDENTIFIER,EQUAL, VOID, UNSIGNED, INT, CHAR, FLOAT, LONG, DOUBLE, COMMA,CURLY_OPEN,CURLY_CLOSE %right EQUAL %left PLUS,MINUS %left MULTIPLY,DIVIDE %% statement_block: CURLY_OPEN statement_set CURLY_CLOSE {printf("\n DONE %s",yytext);}; statement_set : statement_set statement TERMINATOR /*{printf("\n DONE %s",yytext);};*/ |statement_block; /* | TERMINATOR */ | ; statement : assignment {printf("\n assignment");}; | declaration /*| function_defination*/; /*| SQL_statement*/ | ; function_defination: prototype statement_block; prototype: type IDENTIFIER OPEN args_withvars CLOSE {printf("\n PROTO");}; declaration: type identifier_list; /*|function_defination*type IDENTIFIER OPEN args CLOSE*/; args_withvars: type star_list IDENTIFIER args1; |type IDENTIFIER args1; args_withoutvars: type args2; |type star_list args2; args: args_withvars; |args_withoutvars; |; args1: COMMA args_withvars; |; args2: COMMA args; |; identifier_list: star_list IDENTIFIER identifier1; | IDENTIFIER identifier1; identifier1: COMMA identifier_list; | ; /*| type assignment;*/ star_list: MULTIPLY star_list2; star_list2: star_list; |; type : UNSIGNED type2; |UNSIGNED ; |VOID; |type2; type2 :INT; |CHAR; |FLOAT; |LONG; |DOUBLE; |LONG DOUBLE; assignment : IDENTIFIER operator2 expr; | IDENTIFIER; /*| NUMBER;*/ operator2 : EQUAL /*{printf("\n EQUAL");} */; expr: OPEN expr CLOSE {$$=$2;printf("\nopen close %d",$$);}; |expr PLUS expr {$$=$1+$3; printf("\n plus%d",$$);}; |expr MINUS expr {$$=$1-$3; printf("\n minus%d",$$);}; |expr MULTIPLY expr {$$=$1*$3; printf("\n multiply%d",$$);}; |expr DIVIDE expr {$$=$1/$3; printf("\n divide %s","ABC");}; |NUMBER {$$=$1;printf("\n acc %s",yytext);}; |IDENTIFIER; %% int main() { return(yyparse()); } yyerror(char *s) { printf("\n ERROR:%s \n",s); }