编译原理:用bison实现输入二进制数,输出十进制数
来源:互联网 发布:运动装 休闲装 知乎 编辑:程序博客网 时间:2024/05/17 17:16
输入二进制数,输出十进制数
G: N S1
.S { N.v=S1
.v+S.v*2-S.L }
SS1
B { S.v=S1
.v*2+B.v, S.L=S1
.L+1 }
SB { S.v=B.v, S.L=1 }
B0 { B.v=0 }
B1 { B.v=1 }
(1)ershi.lex的源程序如下:
%%0 { yylval.v =0;return BS;}1 { yylval.v =1;return BS;}\.|\n {return *yytext;}.;%%int yywrap(void){return 1;}
(2)ershi.h文件如下:
#ifndef BTOD_H_INCLUDED#define BTOD_H_INCLUDEDtypedef struct{ double v; int len;}eStruct;#endif
(3)ershi.y源程序如下:
%token BS%{ #include "ershi.h" #include <math.h> #define YYSTYPE eStruct void yyerror(char*);%}%%n:n s '.' s '\n'{ $$.v=$2.v+$4.v*pow(2.0,-(double)($4.len)); printf("s.s->n(%.3f)\n\n",$$);}|n s '\n' {printf("s->n(%.3f)\n\n",$2); }|;s:s BS{ $$.v = $1.v * 2 + $2.v; $$.len = $1.len + 1; printf("s BS->s(%.3f)\n",$$); } |BS { $$.v = $1.v; $$.len = 1; printf("BS->s(%.3f)\n",$$); } ;%%void yyerror(char* s){}#include "lex.yy.c"int main(void){ yyparse(); return 0;}
心得体会:
经过这次的实验,我学到了很多新的知识和好的学习方法。第一次实验做成功了给了我很大的信心,开始很顺利,后来遇到文法相关的知识,我就又收到了挫败。不断的失败不断的重复实验,不会的问同学内部是怎么传值的,看书看相关的文法知识,百度,总之就是不断重复。终于,修改了很多次,我做出来了。这离不开同学的耐心讲解和一直坚持的自己。有时候别人告诉我放弃,可我还是选择了坚持。我一定要坚守原则坚持下去。或许,有些事开始认为不可能,只有在自己坚持做了,才会取得成果!下次继续努力吧!
0 0
- 编译原理:用bison实现输入二进制数,输出十进制数
- 编译原理-用Bison构造语法分析程序-二进制转换十进制
- 输入十进制数,输出十六进制
- 将一个十进制数转换成二进制输出--递归实现
- 用顺序栈实现十进制数转换成二进制数
- 输入一个8位二进制数,将其转化为十进制数输出
- 输入一个8位二进制数,转换成十进制数输出
- java 输入一个二进制数,把它转换为十进制数并输出
- 输入一个十进制数,转化为二进制
- c/c++ 十进制数输出二进制
- 二进制数逆转,并以十进制输出
- 用c语言实现输入一个十进制数,计算其转换为二进制数后其中包含1的个数
- 使用do-while编程实现进制转换。输入一个十进制整数n,输出其二进制形式,并统计二进制数中1的个数。
- 将十进制数转换成二进制数输出
- 用位移法 输入一个十进制数,打印一个三十二位的二进制数
- 十进制数转二进制数
- 二进制数转十进制数
- 十进制数转二进制数
- Java直接(堆外)内存使用详解
- 解决/lib64/libc.so.6: version `GLIBC_2.14' not found
- 一招解决全局键盘遮挡输入框问题
- JavaScript DOM加载
- 使用python爬虫时,遇到多页,需要翻页,下一页时怎么处理
- 编译原理:用bison实现输入二进制数,输出十进制数
- Spark组件之SparkR学习2--使用spark-submit向集群提交R代码文件dataframe.R
- 小波分析: 一、一维小波级数
- LeetCode *** 69. Sqrt(x) 牛顿迭代法
- Excel Sheet Column Number
- Android自定义ViewGroup:实现简单的垂直方向线性布局(2)
- wc命令
- Laravel5.2多级一对多的实现
- [精]读览天下免费阅读平台