依托Bison强大的工具, 写编译器,先用编译原理搞个计算器玩玩。如下:
Bison工具:
http://coolshell.cn/articles/1547.html
http://www.gnu.org/software/bison/manual/index.html
http://baike.baidu.com/view/1137652.htm
1.1 Languages and Context-Free Grammars
文件:first.y
%{
#define YYSTYPE double
#include <math.h>
int yylex (void);
void yyerror (char const *);
%}
%token NUM
%%
input:
|input line
;
line: '\n'
| exp '\n' {printf("\t%.10g\n", $1);}
;
exp: NUM { $$ = $1; }
| exp exp '+' { $$ = $1 + $2; }
| exp exp '-' { $$ = $1 - $2; }
| exp exp '*' { $$ = $1 * $2; }
| exp exp '/' { $$ = $1 / $2; }
/* Unary minus */
| exp 'n' { $$ = -$1; }
;
%%
#include <stdio.h>
int yylex (void)
{
int c;
/* Skip white space. */
while ((c = getchar ()) == ' ' || c == '\t')
;
/* Process numbers. */
if (c == '.' || isdigit (c))
{
ungetc (c, stdin);
scanf ("%lf", &yylval);
return NUM;
}
/* Return end-of-input. */
if (c == EOF)
return 0;
/* Return a single char. */
return c;
}
void yyerror (char const * error)
{
}
int main()
{
return yyparse ();
}
在Ubuntu的linux下安装Bison2.5,运行:
bison first.y
gcc -o first first.tab.c
运行
./fisrt
1 4 +
5
3 10 *
30
OK。
分享到:
相关推荐
学习和理解这些源代码可以帮助开发者深入理解编译器的工作机制,甚至动手编写自己的编译器或解释器。 编写一个C语言编译器是一项复杂但极富挑战性的任务,涉及到编译原理、数据结构和算法等多个领域的知识。初学者...
本书讲述了一个真实编译器的开发过程源语言是以C语言为蓝本进行适当简化定义的一门新语言称之为SC语言(简化的C语言)目标语言是大家熟悉的Intelx86机器语言。在本书中读者将看到从 SC语言定义到SCC编译器开发的完整...
标题中的“一款用C语言写的C语言编译器”指的是使用C语言开发的源代码,用于编译其他C语言程序的工具。C语言编译器是将人类可读的C语言源代码转换为计算机可执行的机器代码的关键软件。这个项目可能是为了教学目的,...
这一资源集合旨在帮助用户深入理解编译器的工作原理,以及如何构建自己的C语言编译器。 【描述】:“一整套的c语言编译器的文档和代码资源”不仅包括了详尽的理论文档,也包含了实际的源代码,这对于学习编译原理...
这些知识对于深入理解计算机系统、提高编程技能,甚至自己动手编写编译器都大有裨益。 此外,了解9cc这样的小型编译器也有助于开发者在实际项目中优化性能。例如,对于特定场景下的嵌入式开发或者需要快速编译的...
对于这个C语言编译器,生成的可能是与C语言兼容的目标代码,便于进一步的链接和执行。 这个“伪编译器”可能并未实现完整的编译器功能,例如优化和错误处理。但它的价值在于提供了一个简化的编译过程模型,帮助初学...
动手编写一个C语言编译器是一项挑战性的任务,但也是一个深入了解计算机工作原理的绝佳途径。编译器将高级语言转化为机器可执行的指令,涉及语言学、计算机科学和软件工程等多个领域。以下是一些关键的知识点: 1. ...
《构建最简C语言编译器的探索与实践》 C语言是一种强大的、广泛应用的编程语言,它的简洁性、灵活性和高效性使得它在软件开发领域占有重要地位。然而,你知道C语言是如何被计算机理解并执行的吗?答案就是通过...
在哈工大的编译原理课程设计...总之,"简单的类C语言编译器的实现-电子商城例子" 是一个综合性的实践项目,涵盖了编译原理的多个重要方面,并将其应用于实际问题中,对于提高学生的理论知识和动手能力有着显著的帮助。
《简单C语言编译器(编译原理)》是一份关于编译技术的文档,它主要探讨了如何构建一个简单的C语言编译器。编译器是将高级编程语言(如C语言)转换为机器可执行代码的软件,这个过程涉及多个阶段,包括词法分析、语法...
通过研究这个C语言编译器的源代码,初学者可以了解到编译器内部的运作机制,并学习如何使用C语言实现这些功能。这不仅有助于提升编程技能,还能加深对计算机系统底层的理解。 此外,项目中的源代码提供了一个很好的...
"自己动手打造C语言IDE源码" 这个标题表明这是一个关于创建一个集成开发环境(IDE)的项目,专为C语言设计。IDE是程序员编写、调试和运行程序的软件平台,它通常包含代码编辑器、编译器、调试器等组件。在这个项目中...
这些实践环节有助于提高学生的动手能力和解决问题的能力,使他们更好地将理论知识应用于实际项目中。 综上所述,C语言课程设计具有基础性强、可移植性好、效率高、结构清晰、资源丰富和实践性强等优点。通过C语言的...
总结来说,这个简易C语言编译器项目为学习编译原理提供了一个实践平台。通过研究它的源代码,开发者可以理解编译器如何将高级语言翻译为机器语言,从而提升编程和软件工程的技能。同时,这个项目也鼓励动手实践,对...
这些实践环节有助于提高学生的动手能力和解决问题的能力,使他们更好地将理论知识应用于实际项目中。 综上所述,C语言课程设计具有基础性强、可移植性好、效率高、结构清晰、资源丰富和实践性强等优点。通过C语言的...
同时,提供的"Compiler"文件可能包含了编译器的源代码,通过阅读和研究这些代码,可以深入了解编译器的工作原理,并动手进行调试和改进,这对于提升编程和系统设计能力非常有益。 总的来说,这个项目旨在让开发者...
这些实践环节有助于提高学生的动手能力和解决问题的能力,使他们更好地将理论知识应用于实际项目中。 综上所述,C语言课程设计具有基础性强、可移植性好、效率高、结构清晰、资源丰富和实践性强等优点。通过C语言的...
在本项目中,"自己动手写CPU.rar" 是一个压缩包,其中包含了关于设计和实现CPU的源代码和相关资料。这个项目的核心是利用硬件描述语言Verilog进行CPU的开发,这是一种广泛应用于数字逻辑设计的语言,特别适用于创建...
基于C++的C语言小子集编译器实现,包含了词法分析、语法分析、语义分析、中间代码生成等,从中理解编译程序的构造原理,掌握编译程序的构造方法与技术。通过实习,既加深对编译原理基础理论的理解,又提高动手能力,...
对于想要深入学习PLO编译器工作原理或者想要自己动手实现一个简单编译器的人来说,这是一个宝贵的资源。 总的来说,PLO编译器为初学者提供了一个学习编程的友好环境,而其C语言的实现则保证了编译器的效率和兼容性...