📜  YACC程序识别的{ANB字符串| n≥5}

📅  最后修改于: 2021-06-28 07:48:41             🧑  作者: Mango

问题:写YACC程序以识别{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 

词法分析器源代码:

%{
   /* Definition section */
  #include "y.tab.h"
 %}
  
/* Rule Section */
 %%
[aA] {return A;}
[bB] {return B;}
\n {return NL;}
.   {return yytext[0];}
 %%
  
int yywrap() 
 { 
   return 1; 
 } 

解析器源代码:

%{
   /* Definition section */
  #include
  #include
 %}
  
%token A B NL
  
/* Rule Section */
%%
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);
 }
  
  
//driver code 
main()
 {
  printf("enter the string\n");
  yyparse();
 }

输出: