📌  相关文章
📜  YACC程序,该程序接受以0或1开头和结尾的字符串

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

问题:编写一个YACC程序,该程序接受以零或一开始和结束的字符串

解释:
YACC(还有另一个Compiler-Compiler)是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 

词法分析器源代码:

%{
  /* Definition section */
  extern int yylval;
%}
  
/* Rule Section */
%%
  
0 {yylval = 0; return ZERO;}
  
1 {yylval = 1; return ONE;}
  
.|\n {yylval = 2; return 0;}
  
%%

解析器源代码:

%{
  /* Definition section */
  #include
  #include 
  void yyerror(const char *str) 
  {
   printf("\nSequence Rejected\n");        
  }
  
%}
  
%token ZERO ONE
  
/* Rule Section */
%%
  
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"
//driver code
int main() 
 {
    printf("\nEnter Sequence of Zeros and Ones : ");
    yyparse();
    printf("\n");
    return 0;
 }

输出: