基于antlr的表达式解析器——函数定义

来源:互联网 发布:易语言准星源码 编辑:程序博客网 时间:2024/06/05 18:25
/* * Copyright 2002-2007 Robert Breidecker. *  * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at *  *      http://www.apache.org/licenses/LICENSE-2.0 *  * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package formula.function;import formula.ActiveOperand;/** * This class is a function that executes within Evaluator. The function returns * the greater of two Integer values. See the Math.max(Integer) method in the JDK * for a complete description of how this function works. */public class Max implements Function {/** * Returns the name of the function - "max". *  * @return The name of this function class. */public String getName() {return "max";}@Overridepublic ActiveOperand execute(ActiveOperand[] arguments) throws FunctionException {// TODO Auto-generated method stubInteger result ;if (null==arguments || arguments.length != 2) {throw new FunctionException("Two numeric arguments are required.");}try {Integer argumentOne = ((Integer) arguments[0].getValue());Integer argumentTwo = ((Integer) arguments[1].getValue());result = new Integer(Math.max(argumentOne, argumentTwo));} catch (Exception e) {throw new FunctionException("Two numeric arguments are required.", e);}return new ActiveOperand(result.getClass(),result);}}
package daicy.formula.function;import daicy.formula.ActiveOperand;/** * @ClassName: IfElse * @Description: TODO(这里用一句话描述这个类的作用) * @author 代长亚 * @date 2013-11-3 下午7:34:19 */public class IfElse implements Function {/** * Returns the name of the function - "ifelse". *  * @return The name of this function class. */public String getName() {return "ifelse";}@Overridepublic ActiveOperand execute(ActiveOperand[] arguments)throws FunctionException {// TODO Auto-generated method stubObject result = null;if (null == arguments || arguments.length != 3) {throw new FunctionException("Three numeric arguments are required.");}try {Boolean argumentOne = ((Boolean) arguments[0].getValue());if (argumentOne) {result = arguments[1];} else {result = arguments[2];}} catch (Exception e) {throw new FunctionException("Two numeric arguments are required.",e);}return (ActiveOperand) result;}}