C指针原理(11)-编译原理-小型计算器实现

我们接着完善这个计算器程序,让算式能显示出来,修改calculator.l

我们接着完善这个计算器程序,让算式能显示出来,修改calculator.l

通过加入printf语句,打印词法分析器解析到的字符。比如 :

..................

[0-9]+?{yylval=atoi(yytext);printf("%d",yylval);return?NUMBER;}

\n??{return?EOL;}

[?\t]?/blank/

.?/invalid?char/

%%

然后编译执行。

[email protected]:~/test/4#?make

bison?-d?calculator.y

flex?calculator.l

gcc?calculator.tab.c??lex.yy.c?-lfl

[email protected]:~/test/4#?./a.out

12+66

12+66=78

^C

[email protected]:~/test/4#?./a.out?mycpt1.cpt?mycpt2.cpt???

12*66/(10-5)=158

77/(10+1)-15=-8

接下来加上读取的行号,将结果的显示更加人性化

flex文件要改:

\n ?{printf("<line:%4d>",yylineno);yylineno++;return EOL;}

然后,bison文件也改:

calclist:/**/
? |calclist exp EOL{printf ("the result is:%d\n",$2);}
? ;

最后 ,编译运行测试一下。

[email protected]:~/test/4# make
bison -d calculator.y
flex calculator.l
gcc calculator.tab.c ?lex.yy.c -lfl
[email protected]:~/test/4# ./a.out mycpt1.cpt mycpt2.cpt
1266/(10-5)<line: ? 1>the result is:158
12/22-8<line: ? 2>the result is:-8
77
(6-2)<line: ? 3>the result is:308
77/(10+1)-15<line: ? 4>the result is:-8
[email protected]:~/test/4#?

原文地址:http://blog.51cto.com/13959448/2324502

时间: 2024-08-29 09:56:39

C指针原理(11)-编译原理-小型计算器实现的相关文章

C指针原理(10)-编译原理-小型计算器实现

.打开cygwin,进入home目录,home目录在WINDOWS系统的cygwin安装目录映射为home目录. 2.首先,在home目录中新建文件夹,在文件夹中放置如下内容的test1.l /*统计字数*/ %{ int?chars=0; int?words=0; int?lines=0; %} %% [a-zA-Z]+??{words++;chars+=strlen(yytext);} \n??{chars++;lines++;} .???{chars++;} %% main(int?arg

浅谈编译原理

什么是编译原理? 编译原理顾名思义,编译就是将源语言(高级程序语言)翻译成等价的目标语言(机器语言即计算机可以识别的语言即0和1或汇编语言)的过程.原理就是研究这一过程的思想方法.理论和技术.从本质上来讲编译是一个算法问题,但由于它的问题相当复杂,导致设计解决这个问题的算法也十分复杂.这里的算法和我们学习的数据结构和算法中的算法有些不同,后者讲述的是基础算法,是解决我们生活中遇到的问题,而编译中的算法则是在人与计算机交流时需要解决的“沟通”问题的算法,比较专注解决一种的算法.编译的过程包括:源程

0909走进编译原理

1.编译原理学什么? 编译原理这一学科,主要学习的是编译器方面的原理与技术,我们能从中学会各种算法与代码的原理,明白计算机是如何“听懂人话”,我们的代码是如何经过编译器转换成机器语言,这样不仅能实现自己去编写简单的小编译器,也能通过此学科去接触已有各编译器的思想,认识到编程方面更多要注意的问题以及解决的方向,站在本质的角度看代码,从而更能成就计算机专业人员的计算机逻辑思维. 2.为什么要学编译原理? 说到编译原理,人们喜欢把这门学科比作人体解剖和造轮子,是计算机中和代码作斗争的一门学科.据本人理

0909对编译原理的初了解

1.编译原理学什么? "编译原理":研究设计和构造编译程序原理和方法以及主要实现技术.其中蕴含着计算机科学中解决问题的思路.形式化问题和解决问题的方法.通过本课程的学习,使学生掌握编译理论和方法方面的基本知识,同时也获得设计.实现.分析和移植编译程序方面的初步能力. 编译原理(第3版)共10章,内容包括语言及文法的基本知识.词法分析.语法分析.语义分析及中间代码生成.符号表组织.运行时的存储组织与分配.代码优化及目标代码生成等.此外编译原理是一门实践性较强的课程,要联系实际,多看实验参

0909对编译原理的理解

1.编译原理学什么? 编译原理旨在让人们学习编译程序构造的一般原理和基本方法.内容包括语言和文法.词法分析.语法分析.语法制导翻译.中间代码生成.存储管理.代码优化和目标代码生成,而且这门课程关注的是编译器方面的产生原理和技术问题.回归到本质上,学习编译原理其实也就是学习一个相对复杂的算法. 2.为什么学编译原理? 编译原理这门课程实际蕴含着计算机学科中解决问题的思路.形式化问题和解决问题的方法,这些思路和方法除了对应用软件和系统软件的设计与开发有一定的启发和指导作用外,在提倡学科的交叉不断创新

0909 初遇编译原理

编译原理学什么?      编译原理是一门研究设计和构造编译程序原理和方法的课程,是计算机各专业的一门重要专业基础课.编译原理主要学习的是编译程序结构及各部分功能.文法和语言         的基本概念和表示.词法分析.语法分析.属性文法与语法制导翻译技术.符号表.运算时存储空间的组织.代码优化与目标代码生成.并行编译技术概述等. 为什么学编译原理?      编译原理这门课程实际蕴含蕴含着计算机学科中解决问题的思路.形式化问题和解决问题的方法,这些思路和方法除了对应用软件和系统软件的设计与开发

软考-程序设计语言基础(编译原理)

首先声明一下,本系列软考的文章是针对软件设计师(中级)的. 在软件设计师考试中,关于程序设计语言这一章节,前面的知识很基础,像一些控制结构和数据类型的知识我想大家都非常熟练就没有总结在图里. 本章节的重点内容在于编译原理,编译原理指的是编译器是将汇编或高级计算机语言翻译为二进制机器语言代码的计算机程序.内容主要包括文法.正规式.有限自动机.语法推导树. 好了,不多说,还是老规矩用图来介绍. 重点看一下编译原理,展开前三项看看. 文法,是描述语法结构的形式规则: 正规式是描述程序语言单词的表达式,

编译原理 141

什么是编译原理? 编译原理是计算机专业的一门重要专业课,旨在介绍编译程序构造的一般原理和基本方法.也是将程序语言进行翻译,生成可供用户直接执行的二进制代码,即可执行文件.这门课程关注的是编译器方面的产生原理和技术问题,似乎和计算机的基础领域不沾边,可是编译原理却一直作为大学本科的 必修课程,编译原理及技术从本质上来讲就是一个算法问题. 学习编译原理有什么好处? 这门课是一门真正与代码做斗争的课程,对于一个有至于追求技术的人是不容错过的课程,而且编译原理可以说是一个计算机科学的缩影.可以用语法分析

编译原理 词法分析

原文地址:编译原理 词法分析 编译原理 词法分析 词法分析的主要任务是从左至右逐个字符地对源程序进行扫描,产生一个个单词序列,用于语法分析. 1.正则表达式 对给定的字符集∑={c1,c2,...,cn},归纳定义: 1.空串ε是正则表达式 2.对于任意c∈∑,c是正则表达式 3.如果M和N是正则表达式,则下列表达式也是正则表达式 (1)选择 M|N={M,N} (2)连接 MN={mn|m∈M,n∈N} (3)闭包 M*={ε,M,MM,MMM,...} 2.正则表达式的扩展 (1)[c1-c