前缀表达式转函数表达式
2016-01-21 20:51
239 查看
简介
![](https://images2015.cnblogs.com/blog/796547/201601/796547-20160121210437547-866710267.png)
算法非常简单。状态机模式,逐个扫描字符,将字符串转换成树,再将树转换回字符串。
复用性还可以,只是输出的代码很丑。要把转换出的代码拿到Eigenmath上运行,可能要写几个函数包装中缀运算符(plus,minus,pow……)。
源码
<meta charset='utf-8'> <style type="text/css"> table, textarea { width: 100%; height: 100%; } </style> <table> <tr> <td> <textarea onkeydown='if(event.keyCode==13)enter(this.value, document.getElementById("o"))'>前缀表达式转函数表达式。在这里输入表达式,按回车,结果会出现在右边。21Jau2016</textarea> </td> <td> <textarea id='o' disabled='disabled'></textarea> </td> </tr> </table> <script type="text/javascript"> function enter(r, o) { var root='me'; function Node(m) { this.ma = m; this.v = []; this.toString = function(){ var s = this.v.shift(); s += '('; for (var i in this.v) { if (i != 0) s += ','; s += this.v[i].toString(); } s += ')'; return s; }; } var node=new Node(root); var s=''; r=r.split(''); for (var i in r) { switch (r[i]) { case '(': var n = new Node(node); node.v.push(n); node = n; break; case ')': if (s != '') { node.v.push(s); s = ''; } node = node.ma; break; case '\n': case '\t': case ' ': if (s != '') { node.v.push(s); s = ''; } break; default: s = s + r[i]; } } node = node.v[0]; o.value = node.toString(); } </script>
相关文章推荐
- hdu 4842(NOIP 2005 过河)之 动态规划(距离压缩)
- Android属性动画欣赏——ObjectAnimator与动画监听事件
- 如何用Maven创建web项目(具体步骤)
- 几种基本的数字正则表达式[转]
- 记录——《C Primer Plus (第五版)》第十二章编程练习第1-8题
- Java EE 配置Tomcat 不能显示3个小猫图标
- BZOJ 2276: [Poi2011]Temperature|单调队列
- 理解和使用Linux的硬件抽象层HAL
- 虚拟机中Hadoop分布式环境搭建
- python_轻量级爬虫开发2
- 利用HTML5定位功能,实现在百度地图上定位
- Python入门
- Android大图片裁剪终极解决方案(中:从相册截图)
- Elasticsearch中使用ik分词器 java api
- 难道冬泳都会断子绝孙?
- Qt中用正則表達式来推断Text的语种,主要通过推断unicode的编码范围
- 冒泡排序java
- Linux_定制自己的vim
- 2016 系统设计第一期 (档案一)MVC 控制器接收表单数据
- 78. Subsets && 90. Subsets II