/*
* (c) Copyright 2010-2011 AgileBirds
*
* This file is part of OpenFlexo.
*
* OpenFlexo is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* OpenFlexo is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with OpenFlexo. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.openflexo.antar.expr;
public class DefaultGrammar implements ExpressionGrammar {
private static final BinaryOperator[] allSupportedBinaryOperators = { BooleanBinaryOperator.AND, BooleanBinaryOperator.OR,
BooleanBinaryOperator.EQUALS, BooleanBinaryOperator.NOT_EQUALS, BooleanBinaryOperator.LESS_THAN,
BooleanBinaryOperator.LESS_THAN_OR_EQUALS, BooleanBinaryOperator.GREATER_THAN, BooleanBinaryOperator.GREATER_THAN_OR_EQUALS,
ArithmeticBinaryOperator.ADDITION, ArithmeticBinaryOperator.SUBSTRACTION, ArithmeticBinaryOperator.MULTIPLICATION,
ArithmeticBinaryOperator.DIVISION, ArithmeticBinaryOperator.POWER, };
private static final UnaryOperator[] allSupportedUnaryOperators = { BooleanUnaryOperator.NOT, ArithmeticUnaryOperator.UNARY_MINUS,
ArithmeticUnaryOperator.SIN, ArithmeticUnaryOperator.ASIN, ArithmeticUnaryOperator.COS, ArithmeticUnaryOperator.ACOS,
ArithmeticUnaryOperator.TAN, ArithmeticUnaryOperator.ATAN, ArithmeticUnaryOperator.EXP, ArithmeticUnaryOperator.LOG,
ArithmeticUnaryOperator.SQRT };
@Override
public BinaryOperator[] getAllSupportedBinaryOperators() {
return allSupportedBinaryOperators;
}
@Override
public UnaryOperator[] getAllSupportedUnaryOperators() {
return allSupportedUnaryOperators;
}
public String getSymbol(UnaryOperator operator) throws OperatorNotSupportedException {
if (operator == BooleanUnaryOperator.NOT) {
return "!";
}
if (operator == ArithmeticUnaryOperator.UNARY_MINUS) {
return "-";
}
if (operator == ArithmeticUnaryOperator.SIN) {
return "sin";
}
if (operator == ArithmeticUnaryOperator.ASIN) {
return "asin";
}
if (operator == ArithmeticUnaryOperator.COS) {
return "cos";
}
if (operator == ArithmeticUnaryOperator.ACOS) {
return "acos";
}
if (operator == ArithmeticUnaryOperator.TAN) {
return "tan";
}
if (operator == ArithmeticUnaryOperator.ATAN) {
return "atan";
}
if (operator == ArithmeticUnaryOperator.EXP) {
return "exp";
}
if (operator == ArithmeticUnaryOperator.LOG) {
return "log";
}
if (operator == ArithmeticUnaryOperator.SQRT) {
return "sqrt";
}
throw new OperatorNotSupportedException();
}
public String getAlternativeSymbol(UnaryOperator operator) throws OperatorNotSupportedException {
return null;
}
public String getSymbol(BinaryOperator operator) throws OperatorNotSupportedException {
if (operator == BooleanBinaryOperator.AND) {
return "&";
}
if (operator == BooleanBinaryOperator.OR) {
return "|";
}
if (operator == BooleanBinaryOperator.EQUALS) {
return "=";
}
if (operator == BooleanBinaryOperator.NOT_EQUALS) {
return "!=";
}
if (operator == BooleanBinaryOperator.LESS_THAN) {
return "<";
}
if (operator == BooleanBinaryOperator.LESS_THAN_OR_EQUALS) {
return "<=";
}
if (operator == BooleanBinaryOperator.GREATER_THAN) {
return ">";
}
if (operator == BooleanBinaryOperator.GREATER_THAN_OR_EQUALS) {
return ">=";
}
if (operator == ArithmeticBinaryOperator.ADDITION) {
return "+";
}
if (operator == ArithmeticBinaryOperator.SUBSTRACTION) {
return "-";
}
if (operator == ArithmeticBinaryOperator.MULTIPLICATION) {
return "*";
}
if (operator == ArithmeticBinaryOperator.DIVISION) {
return "/";
}
if (operator == ArithmeticBinaryOperator.POWER) {
return "^";
}
throw new OperatorNotSupportedException();
}
public String getAlternativeSymbol(BinaryOperator operator) throws OperatorNotSupportedException {
if (operator == BooleanBinaryOperator.AND) {
return "&&";
}
if (operator == BooleanBinaryOperator.OR) {
return "||";
}
if (operator == BooleanBinaryOperator.EQUALS) {
return "==";
}
if (operator == ArithmeticBinaryOperator.DIVISION) {
return ":";
}
return null;
}
@Override
public String getAlternativeSymbol(Operator operator) throws OperatorNotSupportedException {
if (operator instanceof UnaryOperator) {
return getAlternativeSymbol((UnaryOperator) operator);
}
if (operator instanceof BinaryOperator) {
return getAlternativeSymbol((BinaryOperator) operator);
}
throw new OperatorNotSupportedException();
}
@Override
public String getSymbol(Operator operator) throws OperatorNotSupportedException {
if (operator instanceof UnaryOperator) {
return getSymbol((UnaryOperator) operator);
}
if (operator instanceof BinaryOperator) {
return getSymbol((BinaryOperator) operator);
}
throw new OperatorNotSupportedException();
}
}