
%{
#include <stdio.h>
float value=0;
float length=1.0;
float value1=0;
float num=0;
int flag =0;
int argc;
char *argv[];
FILE *in;
%}

%%
 lines: 
        | lines line 
        ;
line: '\n' {printf(" \n ************\n ");}
    | expr { flag =0; value=0; value1=0;length=1.0;} ';'
    ;
expr:  L '.' { flag = 1;} L  { printf ("%g     \n", value+ value1);}
   | L { printf("%g  \n", value);}
    ;
L   : L B { if (flag ==0) value = 2 * value + num; else value1 = value1 + num; }
      | B { if (flag ==0) value = num; else value1= num; }
     ;
     B : '0' { if (flag==0)num = 0; else length= length*2.0;num=0.0;}
       | '1' { if (flag==0) num = 1; else {length = length*2.0; num=1/length;}}
      ;

%%
main(argc,argv)
{

   yyparse();
 }
/*yyerror(s)
char *s;
{ fprintf(stderr, "line no. %d \n", lineno);
}
*/
yylex()
{ char c;
        c = getchar();
    return(c);
}

