zoukankan      html  css  js  c++  java
  • 前缀表达式转函数表达式

    简介

    算法非常简单。状态机模式,逐个扫描字符,将字符串转换成树,再将树转换回字符串。

    复用性还可以,只是输出的代码很丑。要把转换出的代码拿到Eigenmath上运行,可能要写几个函数包装中缀运算符(plus,minus,pow……)。

    源码

    <meta charset='utf-8'>
    <style type="text/css">
    	table, textarea {
    		 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 '
    ':
    				case '	':
    				case ' ':
    					if (s != '') {
    						node.v.push(s);
    						s = '';
    					}
    					break;
    				default:
    					s = s + r[i];
    			}
    		}
    		node = node.v[0];
    
    		o.value = node.toString();
    	}
    </script>
  • 相关阅读:
    分享微云普通用户不限速下载方法
    PS基础之移动工具和分布对齐
    操作系统的概念、功能和目标
    又拍云+PicGo搭建图床教程
    05 数组
    04 循环结构
    02 数据类型_变量_运算符_表达式
    03 流程控制
    05 方法_递归
    win7下使用telnet的方法
  • 原文地址:https://www.cnblogs.com/jt2001/p/js_scheme2eigenmath.html
Copyright © 2011-2022 走看看