📜  YACC程序,用于二进制到十进制的转换

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

问题:编写用于二进制到十进制转换的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);
}
  

输出: