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>
  • 相关阅读:
    Linux shell 常用命令记录
    [Bat]批量重命名文件
    【转】java术语(PO/POJO/VO/BO/DAO/DTO)
    TesseractOCR3.0语言库训练步骤
    关于Delphi Rtti对应TDatetime的一些启示
    Ubuntu Server 12.04 安装mysql 5.6.10
    Delphi透明 圆角 窗体 【转】
    奇怪的~用法
    很有用的VS2005插件——SlickEdit
    还不习惯Office 2007
  • 原文地址:https://www.cnblogs.com/jt2001/p/js_scheme2eigenmath.html
Copyright © 2011-2022 走看看