LINUX.ORG.RU

YACC


0

1

Здравствуйте возникла проблема,нужно во входном тексте найти числа состоящие только либо из 0 или из 1

 %{ 
       #include <ctype.h>
       #include <stdio.h>
       int  yylex   (void);
       void yyerror (char const *);
     %}
     %token ONE  TWO 
     %% 
     input:  { printf("\n\tThis program expecting string as 0^n or 1^n\n");}
             | input line
     ;
     line:     '\n'          { printf ("empty line was introduced\n");}
             | exp '\n'		{printf("Right binary expression\n");}
		|exp1 '\n'    	{printf("Right binary expression\n");}
		//|exp2 '\n'    	{printf("Wrong binary expression\n");}
		;
        exp:   ONE 
		| exp ONE       
        ;
	exp1: TWO
		|exp1 TWO
	;
     %%
     int yylex (void)
     {
       int c;
       while ((c = getchar ()) == ' ' || c == '\t');
       if (c == '0')
         return ONE;
       else
         if (c == '1') 
           return TWO;
         else
         if (c == EOF)
           return 0;
       return c;
     }
     void yyerror (char const *s)
     {	
       fprintf (stderr, "Not a binary expression\nstderror: %s\n", s);      
     }
     int main (void)
     {
       return yyparse ();
     }

однако нужно что бы на записи 01010 нужно что бы выводилось сообщение пишу вот так exp2: TWO|ONE|exp2 ONE|exp2 TWO; однако выдается сообщение о конфликте, как это можно исправить?



Последнее исправление: mikemike (всего исправлений: 1)

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.