用Irony实现一个计算器附上源码
2016-12-15 10:19
267 查看
满足的功能如下:
加减乘除四则运算
括号优先级
比如:
[align=left]3+2*4 - 8/4 的结果是9[/align]
[align=left]2* (2 + 3) - 2的结果是8[/align]
[align=left]
[/align]
[align=left]Irony是.net平台下实现语言的开发工具箱。作者把C#这种强大的现代语言引入编译器解析领域,语法规则直接通过C#语言来描述。下面看看这个计算器的语法是怎么写的:[/align]
[align=left]
[/align]
[align=left]Terminal num = new NumberLiteral("Number");[/align]
[align=left]NonTerminal expr = new NonTerminal("Expr");[/align]
[align=left]NonTerminal binOp = new NonTerminal("BinOp");[/align]
[align=left]NonTerminal unOp = new NonTerminal("UnOp");[/align]
[align=left]NonTerminal exprLine = new NonTerminal("ExprLine");[/align]
[align=left]
[/align]
[align=left]expr.Rule = num | unOp + expr | expr + binOp + expr | "(" + expr + ")";[/align]
[align=left]binOp.Rule = ToTerm("+") | "-" | "*" | "/";[/align]
[align=left]unOp.Rule = "-";[/align]
[align=left]exprLine.Rule = expr + Eof;[/align]
[align=left]
[/align]
[align=left]this.Root = exprLine;[/align]
[align=left]
[/align]
[align=left]RegisterOperators(1, "+", "-");[/align]
[align=left]RegisterOperators(2, "*", "/");[/align]
[align=left]
[/align]
[align=left]MarkPunctuation("(", ")");[/align]
[align=left]MarkTransient(binOp, unOp);[/align]
[align=left]
[/align]
[align=left]完整代码[/align]
[align=left]https://github.com/booirror/codelab[/align]
[align=left]
[/align]
[align=left]想的太多,做的太少,这是我的毛病。跟人打交道方面更是一塌糊涂。我要改变这些毛病,不贪多,一点点慢慢来,多做多看,学好Lua,看看Lua的源码,看看编译原理,3d游戏开发。跟人对话时,尽量自信点, 反应敏捷点。一年又一年,时间啊,你慢点。[/align]
加减乘除四则运算
括号优先级
比如:
[align=left]3+2*4 - 8/4 的结果是9[/align]
[align=left]2* (2 + 3) - 2的结果是8[/align]
[align=left]
[/align]
[align=left]Irony是.net平台下实现语言的开发工具箱。作者把C#这种强大的现代语言引入编译器解析领域,语法规则直接通过C#语言来描述。下面看看这个计算器的语法是怎么写的:[/align]
[align=left]
[/align]
[align=left]Terminal num = new NumberLiteral("Number");[/align]
[align=left]NonTerminal expr = new NonTerminal("Expr");[/align]
[align=left]NonTerminal binOp = new NonTerminal("BinOp");[/align]
[align=left]NonTerminal unOp = new NonTerminal("UnOp");[/align]
[align=left]NonTerminal exprLine = new NonTerminal("ExprLine");[/align]
[align=left]
[/align]
[align=left]expr.Rule = num | unOp + expr | expr + binOp + expr | "(" + expr + ")";[/align]
[align=left]binOp.Rule = ToTerm("+") | "-" | "*" | "/";[/align]
[align=left]unOp.Rule = "-";[/align]
[align=left]exprLine.Rule = expr + Eof;[/align]
[align=left]
[/align]
[align=left]this.Root = exprLine;[/align]
[align=left]
[/align]
[align=left]RegisterOperators(1, "+", "-");[/align]
[align=left]RegisterOperators(2, "*", "/");[/align]
[align=left]
[/align]
[align=left]MarkPunctuation("(", ")");[/align]
[align=left]MarkTransient(binOp, unOp);[/align]
[align=left]
[/align]
[align=left]完整代码[/align]
[align=left]https://github.com/booirror/codelab[/align]
[align=left]
[/align]
[align=left]想的太多,做的太少,这是我的毛病。跟人打交道方面更是一塌糊涂。我要改变这些毛病,不贪多,一点点慢慢来,多做多看,学好Lua,看看Lua的源码,看看编译原理,3d游戏开发。跟人对话时,尽量自信点, 反应敏捷点。一年又一年,时间啊,你慢点。[/align]
相关文章推荐
- 一个通用的分页存储过程实现-SqlServer(附上sql源码,一键执行即刻搭建运行环境)
- java和jdom实现的一个地址簿源码
- 收藏的一个linux下proxy实现的源码
- 学GOOGLE的一个特酷的效果实现的源码
- 郭克华手机编程教学视频----我的练习源码(6)实战:实现一个简单的监听程序
- 1. 请用C#的面向对象语言 实现 一个计算器控制台程序,要求输入两个数和运算符号,得到结果
- J2ME应用实例——一个简单的计算器实现(附源代码)
- 一个下载SVN源码+http协议的java实现
- 用ASP.NET实现一个简单的计算器(适合入门者)
- 【原】HTML + XML + JAVASCIPT 实现翻页,跳页功能 ——一个小小英语学习小手册【有注释,有源码】
- 一个精简的计算器源码
- 用Visual studio2005的单元测试框架实现一个简单的计算器
- 盗QQ的密码软件模拟实现- -| 回首页 | 2005年索引 | - -用C写的一个扫描器源码
- 一个使用J2ME技术实现的计算器的代码
- 一个使用J2ME技术实现的计算器的代码
- 一个Ping的实现源码
- 一个显示地图数据,并实现简单浏览查询程序源码(SDK编写)
- 一个简单的用javascript实现的页面内容过滤显示小程序源码
- 用ASP.NET实现一个简单的计算器(适合入门者)
- 一个用wxpython编写的计算器源码