001 // This file is part of AceWiki.
002 // Copyright 2008-2012, AceWiki developers.
003 //
004 // AceWiki is free software: you can redistribute it and/or modify it under the terms of the GNU
005 // Lesser General Public License as published by the Free Software Foundation, either version 3 of
006 // the License, or (at your option) any later version.
007 //
008 // AceWiki is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
009 // even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
010 // Lesser General Public License for more details.
011 //
012 // You should have received a copy of the GNU Lesser General Public License along with AceWiki. If
013 // not, see http://www.gnu.org/licenses/.
014
015 package ch.uzh.ifi.attempto.chartparser;
016
017 import java.util.Collection;
018 import java.util.HashMap;
019 import java.util.List;
020 import java.util.Set;
021
022 /**
023 * This class stands for a terminal category. Terminal categories consists only of a name and
024 * cannot have features. The names of terminal categories correspond to the tokens in the text
025 * to be parsed.
026 *
027 * @author Tobias Kuhn
028 */
029 public class Terminal extends Category {
030
031 /**
032 * Creates a new terminal category.
033 *
034 * @param name The name of the terminal category.
035 */
036 public Terminal(String name) {
037 this.name = name;
038 }
039
040 protected String getType() {
041 return "term";
042 }
043
044 public void unify(Category c) throws UnificationFailedException {
045 if (!name.equals(c.name) || !getType().equals(c.getType())) {
046 throw new UnificationFailedException();
047 }
048 }
049
050 public void tryToUnify(Category c) throws UnificationFailedException {
051 if (!name.equals(c.name) || !getType().equals(c.getType())) {
052 throw new UnificationFailedException();
053 }
054 }
055
056 public boolean canUnify(Category c) {
057 if (!name.equals(c.name) || !getType().equals(c.getType())) {
058 return false;
059 } else {
060 return true;
061 }
062 }
063
064 public boolean isSimilar(Category c) {
065 if (!name.equals(c.name) || !getType().equals(c.getType())) {
066 return false;
067 } else {
068 return true;
069 }
070 }
071
072 public boolean subsumes(Category c) {
073 if (!name.equals(c.name) || !getType().equals(c.getType())) {
074 return false;
075 } else {
076 return true;
077 }
078 }
079
080 public void skolemize() {
081 }
082
083 public Set<String> getFeatureNames() {
084 return null;
085 }
086
087 public Collection<StringRef> getFeatureValues() {
088 return null;
089 }
090
091 String getIdentifier(List<Integer> mvars, String[] usedFeatureNames) {
092 return toString();
093 }
094
095 public Category deepCopy() {
096 return new Terminal(name);
097 }
098
099 Category deepCopy(HashMap<Integer, StringObject> stringObjs) {
100 return new Terminal(name);
101 }
102
103 public int hashCode() {
104 return name.hashCode();
105 }
106
107 public boolean equals(Object obj) {
108 if (!(obj instanceof Terminal)) return false;
109 return toString().equals(obj.toString());
110 }
111
112 public String toString() {
113 return "'" + name + "'";
114 }
115
116 }