flex 和 bison 的计算机
来源:互联网 发布:怎么看天猫店铺数据 编辑:程序博客网 时间:2024/05/16 12:29
flex 和 Bison 的计算机
flex源代码
%{ #include <stdio.h> #include <stdlib.h> #include "simple.tab.h" %}%%"+"{return ADD;} "-"{return SUB;} "*"{return MUL;} "/"{return DIV;} "\n"{return CR; } ([1-9][0-9]*)|0|([0-9]+\.[0-9]+) {double temp;sscanf(yytext,"%lf",&temp);yylval.double_value = temp;return DOUBLE_LITERAL;}[\t];.{fprintf(stderr,"lexical error.\n");}%%int main(void) { yyparse(); return 0; } int yywrap(void) { return 0; }bison源代码
%{ #include <stdio.h> #include <stdlib.h> int yyerror(char* msg); int yylex(void); #define YYDEBUG 1%}%union{int int_value;double double_value;}%token <double_value> DOUBLE_LITERAL%token ADD SUB MUL DIV CR%type <double_value> expression term primary_expression%%line_list : line | line_list line ;line : expression CR { printf(">>%lf\n", $1); }expression : term | expression ADD term { $$ = $1 + $3; } | expression SUB term { $$ = $1 - $3; } ;term : primary_expression | term MUL primary_expression { $$ = $1 * $3 ; } | term DIV primary_expression { $$ = $1 / $3; } ;primary_expression:DOUBLE_LITERAL;%%int yyerror(char* msg){printf("error\n");return 0;}运行结果
举个例子来说明
3*2+5/2 \n
在lex 中会被转成
DOUBLE_LITERAL MUL DOUBLE_LITERAL ADD DOUBLE_LITERAL DIV DOUBLE_LITERAL CR
在bison中会被认为line :(expression CR)
expression发现有MUL和DIV执行,转为term,
term MUL primary_expression
用double_value来计算结果。
bison相关符号请查阅http://blog.csdn.net/sirouni2003/article/details/400672#SEC54
0 0
- flex 和 bison 的计算机
- bison和flex的基本原理
- bison和flex的例子
- Bison和Flex的学习
- 下载bison和flex的好地方
- WINDOWS下bison和flex的使用
- Flex和Bison
- 使用bison和flex工具
- flex和bison下载地址
- 如何debug flex和bison
- 用Lex(flex)和yacc(bison)写的简单计算器
- 用flex和bison来创建自己的语言
- 使用Flex Bison 和LLVM编写自己的编译器
- 使用Flex Bison 和 LLVM编写你自己的编译器
- 【转】使用Flex Bison 和LLVM编写自己的编译器
- 使用Flex Bison 和LLVM编写自己的编译器
- 使用Flex Bison 和LLVM编写自己的编译器
- 使用Flex Bison 和LLVM编写自己的编译器
- json在服务器与客户端之间传输的一篇文章
- 工欲善其事必先利其器—成绩登统系统
- 基础总结篇之二:Activity的四种launchMode
- jquery返回json的标准格式
- Python编程基础之五序列:字符串、列表和元组
- flex 和 bison 的计算机
- vs2010下C++调用lib或dll文件
- 关于java用jni调用 dll动态库Can't find dependent libraries错误的解决
- cdc 的部署 同步模式
- 图解Java 开发教程
- OA开发的基本流程——写在开始
- MySQL索引的创建、删除和查看
- Oracle 索引 详解
- NIO(二)--CS架构的非阻塞通信