/*
* Copyright 2007-2013
* Licensed under GNU Lesser General Public License
*
* This file is part of EpochX: genetic programming software for research
*
* EpochX 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
* (at your option) any later version.
*
* EpochX 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.
*
* You should have received a copy of the GNU Lesser General Public License
* along with EpochX. If not, see <http://www.gnu.org/licenses/>.
*
* The latest version is available from: http://www.epochx.org
*/
package org.epochx.grammar;
import org.epochx.tools.StringUtils;
/**
* Grammar literals are a type of grammar node, that represent the terminals of
* a grammar. They are those nodes which are never found on the left-hand side
* of grammar rules and as such contain no productions. Instead,
* <code>GrammarLiterals</code> each have a value which is the string they
* represent in the grammar string. The final source of a program that is valid
* according to a grammar will be made up solely of these terminal values.
*/
public class GrammarLiteral implements GrammarNode {
// The literal value of this grammar terminal.
private String value;
/**
* Constructs a terminal symbol with the specified value.
*
* @param value snippet of source that this terminal represents.
*/
public GrammarLiteral(String value) {
this.value = value;
}
/**
* Returns the literal value of this grammar terminal.
*
* @return this grammar literal's value.
*/
public String getValue() {
return value;
}
/**
* Sets the literal value of this grammar terminal.
*
* @param value the new grammar literal value to set.
*/
public void setValue(String value) {
this.value = value;
}
/**
* Returns a <code>String</code> representation of this grammar literal.
*
* @return a string representation of this grammar literal.
*/
@Override
public String toString() {
return escape(value);
}
/*
* If the input string contains any illegal chars then the whole string is
* wrapped in quotes and returned. Otherwise the original string is
* returned unmodified.
*/
private String escape(String input) {
char[] escapeChars = {'>', '<', '|'};
if (StringUtils.containsAny(input, escapeChars)) {
StringBuilder buffer = new StringBuilder();
buffer.append('\"');
buffer.append(input);
buffer.append('\"');
input = buffer.toString();
}
return input;
}
}