Search in sources :

Example 1 with BooleanLiteral

use of org.eclipse.xtext.xtext.generator.parser.antlr.splitting.simpleExpressions.BooleanLiteral in project xtext-core by eclipse.

the class ConditionSimplifier method caseNotExpression.

@Override
public Expression caseNotExpression(NotExpression object) {
    if (object.getExpression() instanceof NotExpression)
        return doSwitch(((NotExpression) object.getExpression()).getExpression());
    Expression result = doSwitch(object.getExpression());
    if (result instanceof BooleanLiteral) {
        BooleanLiteral casted = (BooleanLiteral) result;
        casted.setValue(!casted.isValue());
        return casted;
    } else {
        object.setExpression(result);
        return object;
    }
}
Also used : AndExpression(org.eclipse.xtext.xtext.generator.parser.antlr.splitting.simpleExpressions.AndExpression) OrExpression(org.eclipse.xtext.xtext.generator.parser.antlr.splitting.simpleExpressions.OrExpression) NotExpression(org.eclipse.xtext.xtext.generator.parser.antlr.splitting.simpleExpressions.NotExpression) Expression(org.eclipse.xtext.xtext.generator.parser.antlr.splitting.simpleExpressions.Expression) BooleanLiteral(org.eclipse.xtext.xtext.generator.parser.antlr.splitting.simpleExpressions.BooleanLiteral) NotExpression(org.eclipse.xtext.xtext.generator.parser.antlr.splitting.simpleExpressions.NotExpression)

Example 2 with BooleanLiteral

use of org.eclipse.xtext.xtext.generator.parser.antlr.splitting.simpleExpressions.BooleanLiteral in project xtext-core by eclipse.

the class ConditionSimplifier method caseOrExpression.

@Override
public Expression caseOrExpression(OrExpression object) {
    if (object.getRight() == null)
        return doSwitch(object.getLeft());
    if (object.getLeft() == null)
        return doSwitch(object.getRight());
    Expression left = doSwitch(object.getLeft());
    Expression right = doSwitch(object.getRight());
    if (areSemanticallyEqual(left, right))
        return left;
    if (left instanceof BooleanLiteral) {
        if (((BooleanLiteral) left).isValue()) {
            return left;
        }
        return right;
    }
    if (right instanceof BooleanLiteral) {
        if (((BooleanLiteral) right).isValue()) {
            return right;
        }
        return left;
    }
    if (left instanceof AndExpression) {
        AndExpression leftAsAnd = (AndExpression) left;
        if (areSemanticallyEqual(leftAsAnd.getLeft(), right) || areSemanticallyEqual(leftAsAnd.getRight(), right))
            return right;
    } else if (right instanceof AndExpression) {
        AndExpression rightAsAnd = (AndExpression) right;
        if (areSemanticallyEqual(rightAsAnd.getLeft(), left) || areSemanticallyEqual(rightAsAnd.getRight(), left))
            return left;
    }
    if (left instanceof OrExpression) {
        OrExpression leftAsOr = (OrExpression) left;
        if (areSemanticallyEqual(leftAsOr.getLeft(), right) || areSemanticallyEqual(leftAsOr.getRight(), right))
            return left;
    } else if (right instanceof OrExpression) {
        OrExpression rightAsOr = (OrExpression) right;
        if (areSemanticallyEqual(rightAsOr.getLeft(), left) || areSemanticallyEqual(rightAsOr.getRight(), left))
            return right;
    }
    if (left instanceof NotExpression) {
        if (areSemanticallyEqual(((NotExpression) left).getExpression(), right)) {
            BooleanLiteral result = SimpleExpressionsFactory.eINSTANCE.createBooleanLiteral();
            result.setValue(true);
            return result;
        }
    } else if (right instanceof NotExpression) {
        if (areSemanticallyEqual(left, ((NotExpression) right).getExpression())) {
            BooleanLiteral result = SimpleExpressionsFactory.eINSTANCE.createBooleanLiteral();
            result.setValue(true);
            return result;
        }
    }
    object.setLeft(left);
    object.setRight(right);
    return object;
}
Also used : AndExpression(org.eclipse.xtext.xtext.generator.parser.antlr.splitting.simpleExpressions.AndExpression) AndExpression(org.eclipse.xtext.xtext.generator.parser.antlr.splitting.simpleExpressions.AndExpression) OrExpression(org.eclipse.xtext.xtext.generator.parser.antlr.splitting.simpleExpressions.OrExpression) NotExpression(org.eclipse.xtext.xtext.generator.parser.antlr.splitting.simpleExpressions.NotExpression) Expression(org.eclipse.xtext.xtext.generator.parser.antlr.splitting.simpleExpressions.Expression) BooleanLiteral(org.eclipse.xtext.xtext.generator.parser.antlr.splitting.simpleExpressions.BooleanLiteral) NotExpression(org.eclipse.xtext.xtext.generator.parser.antlr.splitting.simpleExpressions.NotExpression) OrExpression(org.eclipse.xtext.xtext.generator.parser.antlr.splitting.simpleExpressions.OrExpression)

Example 3 with BooleanLiteral

use of org.eclipse.xtext.xtext.generator.parser.antlr.splitting.simpleExpressions.BooleanLiteral in project xtext-core by eclipse.

the class ConditionSimplifier method caseAndExpression.

@Override
public Expression caseAndExpression(AndExpression object) {
    if (object.getRight() == null)
        return doSwitch(object.getLeft());
    if (object.getLeft() == null)
        return doSwitch(object.getRight());
    Expression left = doSwitch(object.getLeft());
    Expression right = doSwitch(object.getRight());
    if (areSemanticallyEqual(left, right))
        return left;
    if (left instanceof BooleanLiteral) {
        if (((BooleanLiteral) left).isValue()) {
            return right;
        }
        return left;
    }
    if (right instanceof BooleanLiteral) {
        if (((BooleanLiteral) right).isValue()) {
            return left;
        }
        return right;
    }
    if (left instanceof NotExpression) {
        if (areSemanticallyEqual(((NotExpression) left).getExpression(), right)) {
            BooleanLiteral result = SimpleExpressionsFactory.eINSTANCE.createBooleanLiteral();
            result.setValue(false);
            return result;
        }
    } else if (right instanceof NotExpression) {
        if (areSemanticallyEqual(left, ((NotExpression) right).getExpression())) {
            BooleanLiteral result = SimpleExpressionsFactory.eINSTANCE.createBooleanLiteral();
            result.setValue(false);
            return result;
        }
    }
    object.setLeft(left);
    object.setRight(right);
    return object;
}
Also used : AndExpression(org.eclipse.xtext.xtext.generator.parser.antlr.splitting.simpleExpressions.AndExpression) OrExpression(org.eclipse.xtext.xtext.generator.parser.antlr.splitting.simpleExpressions.OrExpression) NotExpression(org.eclipse.xtext.xtext.generator.parser.antlr.splitting.simpleExpressions.NotExpression) Expression(org.eclipse.xtext.xtext.generator.parser.antlr.splitting.simpleExpressions.Expression) BooleanLiteral(org.eclipse.xtext.xtext.generator.parser.antlr.splitting.simpleExpressions.BooleanLiteral) NotExpression(org.eclipse.xtext.xtext.generator.parser.antlr.splitting.simpleExpressions.NotExpression)

Aggregations

AndExpression (org.eclipse.xtext.xtext.generator.parser.antlr.splitting.simpleExpressions.AndExpression)3 BooleanLiteral (org.eclipse.xtext.xtext.generator.parser.antlr.splitting.simpleExpressions.BooleanLiteral)3 Expression (org.eclipse.xtext.xtext.generator.parser.antlr.splitting.simpleExpressions.Expression)3 NotExpression (org.eclipse.xtext.xtext.generator.parser.antlr.splitting.simpleExpressions.NotExpression)3 OrExpression (org.eclipse.xtext.xtext.generator.parser.antlr.splitting.simpleExpressions.OrExpression)3