// This file is part of AceWiki.
// Copyright 2008-2013, AceWiki developers.
//
// AceWiki 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.
//
// AceWiki 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 AceWiki. If
// not, see http://www.gnu.org/licenses/.
package ch.uzh.ifi.attempto.chartparser;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Set;
/**
* This class stands for a terminal category. Terminal categories consists only of a name and
* cannot have features. The names of terminal categories correspond to the tokens in the text
* to be parsed.
*
* @author Tobias Kuhn
*/
public class Terminal extends Category {
/**
* Creates a new terminal category.
*
* @param name The name of the terminal category.
*/
public Terminal(String name) {
this.name = name;
}
protected String getType() {
return "term";
}
public void unify(Category c) throws UnificationFailedException {
if (!name.equals(c.name) || !getType().equals(c.getType())) {
throw new UnificationFailedException();
}
}
public void tryToUnify(Category c) throws UnificationFailedException {
if (!name.equals(c.name) || !getType().equals(c.getType())) {
throw new UnificationFailedException();
}
}
public boolean canUnify(Category c) {
if (!name.equals(c.name) || !getType().equals(c.getType())) {
return false;
} else {
return true;
}
}
public boolean isSimilar(Category c) {
if (!name.equals(c.name) || !getType().equals(c.getType())) {
return false;
} else {
return true;
}
}
public boolean subsumes(Category c) {
if (!name.equals(c.name) || !getType().equals(c.getType())) {
return false;
} else {
return true;
}
}
public void skolemize() {
}
public Set<String> getFeatureNames() {
return null;
}
public Collection<StringRef> getFeatureValues() {
return null;
}
String getIdentifier(List<Integer> mvars, String[] usedFeatureNames) {
return toString();
}
public Category deepCopy() {
return new Terminal(name);
}
Category deepCopy(HashMap<Integer, StringObject> stringObjs) {
return new Terminal(name);
}
public int hashCode() {
return name.hashCode();
}
public boolean equals(Object obj) {
if (!(obj instanceof Terminal)) return false;
return toString().equals(obj.toString());
}
public String toString() {
return "'" + name + "'";
}
}