/** * Copyright (c) Cohesive Integrations, LLC * Copyright (c) Codice Foundation * * This is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation, either version 3 of the License, or any later version. * * This program 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 Lesser General Public License for more * details. A copy of the GNU Lesser General Public License is distributed along with this program and can be found at * <http://www.gnu.org/licenses/lgpl.html>. * **/ package net.di2e.ecdr.querylanguage.basic.keywordparser; import org.parboiled.trees.ImmutableBinaryTreeNode; /** * Abstract Syntax Tree Node </br> Abstract class that extends built-in Parboiled tree node class. * </br> </br> During the parsing of the keyword string, the parser creates and stores instances of * this class's subclasses on the processing stack. This allows the parser to build an Abstract * Syntax Tree from the keyword string. */ public abstract class ASTNode extends ImmutableBinaryTreeNode<ASTNode> { // Do not use this directly! protected ASTNode(ASTNode left, ASTNode right) { super(left, right); } public enum Operator { AND, OR, NOT; public static Operator getOperatorFromString(String operatorString) { if (operatorString.trim().equals(KeywordTextParser.AND_STRING)) { return Operator.AND; } else if (operatorString.trim().equals(KeywordTextParser.OR_STRING)) { return Operator.OR; } else if (operatorString.trim().equals(KeywordTextParser.NOT_STRING)) { return Operator.NOT; } else if (operatorString.contains(KeywordTextParser.SPACE_STRING) // if the string is // all spaces, it's // an AND && operatorString.trim().isEmpty()) { return Operator.AND; } else { return null; } } } public abstract String getKeyword(); public abstract Operator getOperator(); public abstract boolean isKeyword(); public abstract boolean isOperator(); public abstract boolean isPhraseStartDelimiter(); @Override public abstract String toString(); }