问题:编写用于二进制到十进制转换的YACC程序。
解释:
Yacc(表示“另一个编译器”。)是Unix操作系统的标准解析器生成器。 yacc是一个开源程序,它使用C编程语言为解析器生成代码。首字母缩略词通常用小写字母表示,但有时被视为YACC或Yacc。
例子:
Input: 0101
Output: 5
Input: 1101
Output: 13
Input: 111001
Output: 57
Input: 1111111
Output: 127
Input: 100111000
Output: 312
词法分析器源代码:
%{
/* Definition section */
#include
#include
#include"y.tab.h"
extern int yylval;
%}
/* Rule Section */
%%
0 {yylval=0;return ZERO;}
1 {yylval=1;return ONE;}
[ \t] {;}
\n return 0;
. return yytext[0];
%%
int yywrap()
{
return 1;
}
解析器源代码:
%{
/* Definition section */
#include
#include
void yyerror(char *s);
%}
%token ZERO ONE
/* Rule Section */
%%
N: L {printf("\n%d", $$);}
L: L B {$$=$1*2+$2;}
| B {$$=$1;}
B:ZERO {$$=$1;}
|ONE {$$=$1;};
%%
//driver code
int main()
{
while(yyparse());
}
yyerror(char *s)
{
fprintf(stdout, "\n%s", s);
}
输出: