📜  YACC程序可识别带有语法的字符串{anbn | n≥0}

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

问题:写YACC程序以识别字符串语法{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 

词法分析器源代码:

%{
   /* 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: S NL  { printf("valid string\n");
              exit(0); }
;
S: A S B |
;
%%
  
int yyerror(char *msg)
 {
  printf("invalid string\n");
  exit(0);
 }
  
//driver code 
main()
 {
  printf("enter the string\n");
  yyparse();
 }

输出: