编译原理:用flex和bison实现一个简单的计算器
来源:互联网 发布:超级基因优化液萧若雨 编辑:程序博客网 时间:2024/05/29 10:10
运用flex和bison工具实现一个简单的计算器,可以进行+、-、*、/等运算。
flex源代码格式:
declarations
%%
translation rules
%%
auxiliary functions
语法分析器的自动构造:
bison源代码格式:
declarations
%%
translation rules
%%
supporting C routines
Translation Rule:
calc.l
%{# include "calc.tab.h"int lexerror(char *s);%}%%"+" { return ADD; }"-" { return SUB; }"*" { return MUL; }"/" { return DIV; }"(" { return LP; }")" { return RP; }[0-9]+ { yylval = atoi(yytext); return NUM; }\n { return EOL; }[ \t] { /* ignore white space */ }. { lexerror(yytext); }%%int lexerror(char *s){ fprintf(stderr, "lexical error: %s\n", s);}
calc.y:
%{# include <stdio.h>int yyerror(char *s);int yylex();%}//set attribute type%define api.value.type {int}/* declare tokens (terminal symbols) */%token NUM 256%token ADD 257%token SUB 258%token MUL 259%token DIV 260%token LP 261%token RP 262%token EOL 263%%start: | start expr EOL { printf("= %d\n> ", $2); };expr: term | expr ADD term { $$ = $1 + $3; } | expr SUB term { $$ = $1 - $3; } ;term: factor { $$ = $1; } | term MUL factor { $$ = $1 * $3; } | term DIV factor { $$ = $1 / $3; } ;factor: NUM { $$ = $1; } | LP expr RP { $$ = $2; } ;%%int main(){ printf("> "); yyparse();}int yyerror(char *s){ fprintf(stderr, "error: %s\n", s);}
在Unix终端输入命令:
先用bison编译calc.y
再使用flex编译calc.l
使用gcc命令将上述的文件编译在一起
运行截图:
阅读全文
0 0
- 编译原理:用flex和bison实现一个简单的计算器
- 编译原理—(从零开始)用flex、bison实现一个简单的计算器
- 编译原理:用Flex和 Bison实现一个功能更为强大的计算器
- 编译原理利用Flex+Bison实现简单计算器
- 编译原理--计算器Flex+Bison实现
- 用Lex(flex)和yacc(bison)写的简单计算器
- 编译原理—Lex和Bison实现计算器
- 编译原理:使用flex和bison工具实现语法分析树的建立
- 编译原理-用Bison构造语法分析程序-小小计算器
- 编译原理 - 在 Windows 平台下使用 Flex 和 Bison
- 用Flex写的一个简单计算器
- 用Flex写的一个简单计算器
- 使用flex和bison编写计算器
- 用antlr4来实现《按编译原理的思路设计的一个计算器》中的计算器
- 用cmake 编译 bison和flex
- bison和flex的基本原理
- bison和flex的例子
- flex 和 bison 的计算机
- MarkDown背景色
- 【PAT】1042 字符统计
- 程序设计实习MOOC / 程序设计与算法(一)第三周测验(2017冬季)9:乘方计算
- 对于线性表,栈与队列,串的读书笔记《大话数据结构》
- 12.2题目总结
- 编译原理:用flex和bison实现一个简单的计算器
- MyBatis 中使用 Collection 嵌套查询
- knn邻近算法
- 02 我是如何获得微软工作机会的?
- Excel在统计分析中的应用—第八章—假设检验-总体比例之差假设检验
- HDOJ1163 Eddy's digital Roots
- 并发编程的一些问题
- LINTCODE—— 3个不同的因子
- vue中使用bootstrap框架