基于JavaScript的公式解释器 - 4 【操作符基类型的实现】
2010-10-18 22:20
399 查看
操作符优先级定义
文件:OperatorBase.js
操作符类型定义
文件:OperatorBase.js
OperatorBase 操作符基类型定义
文件:OperatorBase.js
文件:OperatorBase.js
// JScript source code var $OperatorPriority = { // Logic "||": 0, "&&": 0, // Compare ">": 1, ">=": 1, "<": 1, "<=": 1, // Logic compute "|": 2, "&": 2, "^": 2, // Mathematic "+": 3, "-": 3, "*": 4, "/": 4, "%": 4, // Func "function": 5, "unary": 6 };
操作符类型定义
文件:OperatorBase.js
/***************************** Operator Type *****************************/ function UnknownType(sign, argsNum) { this.DeriveFrom(new Object()); this.set_ClassName("UnknownType"); this._sign = sign; this._requiredArgsNum = argsNum; }; UnknownType.prototype = { get_RequiredArgumentsNum: function() { return this._requiredArgsNum; }, get_Sign: function() { return this._sign; } }; function UnaryType(sign) { this.DeriveFrom(new UnknownType(sign, 1)); this.set_ClassName("UnaryType"); }; function BinaryType(sign) { this.DeriveFrom(new UnknownType(sign, 2)); this.set_ClassName("BinaryType"); }; function ParenthesesType(sign) { this.DeriveFrom(new UnknownType(sign, 1)); this.set_ClassName("ParentthesesType"); }; function FunctionType(name) { this.DeriveFrom(new UnknownType(name, -1)); this.set_ClassName("FunctionType"); };
OperatorBase 操作符基类型定义
文件:OperatorBase.js
// ----------- OperatorBase -------------- function OperatorBase() { this.set_ClassName("OperatorBase"); this._type = new UnknownType("undefined", -1); }; OperatorBase.prototype = { // Properties get_Type: function() { return this._type; }, get_Sign: function() { return this._type.get_Sign(); }, set_Sign: function(sign) { this._type._sign = sign; }, get_RequiredArgumentsNum: function() { return this._type.get_RequiredArgumentsNum(); }, get_Priority: function() { if (!(this.IsFunction() || this.IsUnary())) return $OperatorPriority[this.get_Sign()]; else { if (this.IsFunction()) return $OperatorPriority["function"]; else return $OperatorPriority["unary"]; } }, IsPreceding: function(anotherOperator) { if (this.IsUnary()) { if (anotherOperator.IsUnary()) return false; else return true; } else { if (anotherOperator.IsUnary()) return false; else return this.get_Priority() > anotherOperator.get_Priority(); } }, // IsPreceding IsUnary: function() { return $T(this._type) == "UnaryType"; }, IsBinary: function() { return $T(this._type) == "BinaryType"; }, IsFunction: function() { return $T(this._type) == "FunctionType"; }, IsParentheses: function() { return $T(this._type) == "ParenthesesType"; }, Evaluate: function(operandArray) { throw new Exception(this, "Evaluate", "Not implemented"); } // Evaluate };
相关文章推荐
- 基于JavaScript的公式解释器 - 3 【操作数类型的实现】
- 基于JavaScript的公式解释器 - 5 【一元操作符的实现】
- 基于JavaScript的公式解释器 - 6 【二元操作符基类的实现】
- 基于JavaScript的公式解释器 - 7 【算术操作符的实现】
- 基于JavaScript的公式解释器 - 11 【函数的实现】
- 基于JavaScript的公式解释器 - 8 【比较操作符的实现】
- 基于JavaScript的公式解释器 - 9 【逻辑操作符的实现】
- 基于JavaScript的公式解释器 - 10 【位操作符的实现】
- 基于JavaScript的公式解释器 - 2 【完善自己的类型系统】
- 基于JavaScript的公式解释器 - 13 【公式估值器的实现】
- 基于JavaScript的公式解释器 - 1 【设计】
- JavaScript基于自定义函数判断变量类型的实现方法
- 基于JavaScript的公式解释器 - 14 【单元格对象】
- 基于JavaScript的公式解释器 - 12 【公式解析器】
- 基于JavaScript的公式解释器 - 15 【单元格范围对象】
- 基于JavaScript的公式解释器 - 16 【MailStone,测试】
- 基于JavaScript实现弹出框效果
- 基于javascript实现的搜索时自动提示功能
- JavaScript实现清空(重置)文件类型INPUT元素值的方法
- 基于JavaScript实现继承机制之调用call()与apply()的方法详解