Рубрики

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

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

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

Примеры:

Input: ab
Output: invalid string

Input: aaaaab
Output: valid string

Input: aabb
Output: invalid string

Input: aaaaaaab
Output: valid string

Input: aaaaaabb
Output: invalid 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: A A A A A S B NL {printf("valid string\n");

             exit(0);}

;
S: S A
|
;
%%

  

int yyerror(char *msg)

 {

  printf("invalid string\n");

  exit(0);

 }

  

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

 {

  printf("enter the string\n");

  yyparse();

 }

Выход:

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

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

0.00 (0%) 0 votes