Рубрики

Программа YACC, которая принимает строки, которые начинаются и заканчиваются 0 или 1

Проблема: Напишите программу YACC, которая принимает строки, начинающиеся и заканчивающиеся нулем или единицей.

Объяснение:
YACC (еще один компилятор-компилятор) — это стандартный генератор синтаксических анализаторов для операционной системы Unix. Программа с открытым исходным кодом, yacc генерирует код для синтаксического анализатора на языке программирования C. Аббревиатура обычно отображается в нижнем регистре, но иногда отображается как YACC или Yacc.

Примеры:

Input: 001100
Output: Sequence Accepted

Input: 1001001
Output: Sequence Accepted

Input: 0011101
Output: Sequence Rejected

Input: 100110
Output: Sequence Rejected 

Исходный код лексического анализатора:

%{

  / * Раздел определения * /

  extern int yylval;

%}

  
/ * Раздел правил * /
%%

  

0 {yylval = 0; return ZERO;}

  

1 {yylval = 1; return ONE;}

  

.|\n {yylval = 2; return 0;}

  
%%

Исходный код парсера:

%{

  / * Раздел определения * /

  #include<stdio.h>

  #include <stdlib.h>

  void yyerror(const char *str) 

  {

   printf("\nSequence Rejected\n");        

  }

  
%}

  
%token ZERO ONE

  
/ * Раздел правил * /
%%

  

r : s {printf("\nSequence Accepted\n\n");}

;

  
s : n
| ZERO a
| ONE b
;

  
a : n a
| ZERO
;

  
b : n b
| ONE
;

  
n : ZERO
| ONE
;

  
%%

  
#include"lex.yy.c"
// код драйвера

int main() 

 {

    printf("\nEnter Sequence of Zeros and Ones : ");

    yyparse();

    printf("\n");

    return 0;

 }

Выход:

Рекомендуемые посты:

Программа YACC, которая принимает строки, которые начинаются и заканчиваются 0 или 1

0.00 (0%) 0 votes