rendered paste body%{
#include<stdio.h>
#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);
}