问题:编写一个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;
}
输出: