Рубрики

Программа YACC для распознавания строки с грамматикой {a <sup> n </ sup> b <sup> n </ sup> | n≥0}

Проблема: Напишите программу YACC для распознавания строки с грамматикой {a n b n | n≥0}.

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

Примеры:

Input: ab
Output: valid string

Input: aab
Output: invalid string

Input: aabb
Output: valid string

Input: abb
Output: invalid string

Input: aaabbb
Output: valid string 

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

%{

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

  #include "y.tab.h"

 %}

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

 %%

[aA] {return A;}

[bB] {return B;}

\n {return NL;}

.  {return yytext[0];}

%%

  

int yywrap() 

 

  return 1; 

 

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

%{

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

   #include<stdio.h>

   #include<stdlib.h>

%}

  
%token A B NL

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

stmt: S NL  { printf("valid string\n");

              exit(0); }

;
S: A S B |
;
%%

  

int yyerror(char *msg)

 {

  printf("invalid string\n");

  exit(0);

 }

  
// код драйвера
main()

 {

  printf("enter the string\n");

  yyparse();

 }

Выход:

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

Программа YACC для распознавания строки с грамматикой {a <sup> n </ sup> b <sup> n </ sup> | n≥0}

0.00 (0%) 0 votes