All pastes #47440 Raw Edit

Unnamed

public text v1 · immutable
#47440 ·published 2006-03-29 14:20 UTC
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);
}