package edu.stanford.nlp.sempre;
import fig.basic.LispTree;
/**
* Utilities for Value.
*
* @author Percy Liang
*/
public final class Values {
private Values() { }
// Try to parse the LispTree into a value.
// If it fails, just return null.
public static Value fromLispTreeOrNull(LispTree tree) {
if (tree.isLeaf())
return null;
String type = tree.child(0).value;
if ("name".equals(type)) return new NameValue(tree);
if ("boolean".equals(type)) return new BooleanValue(tree);
if ("number".equals(type)) return new NumberValue(tree);
if ("string".equals(type)) return new StringValue(tree);
if ("list".equals(type)) return new ListValue(tree);
if ("table".equals(type)) return new TableValue(tree);
if ("description".equals(type)) return new DescriptionValue(tree);
if ("url".equals(type)) return new UriValue(tree);
if ("context".equals(type)) return new ContextValue(tree);
if ("date".equals(type)) return new DateValue(tree);
if ("error".equals(type)) return new ErrorValue(tree);
if ("time".equals(type)) return new TimeValue(tree);
return null;
}
// Try to parse. If it fails, throw an exception.
public static Value fromLispTree(LispTree tree) {
Value value = fromLispTreeOrNull(tree);
if (value == null)
throw new RuntimeException("Invalid value: " + tree);
return value;
}
public static Value fromString(String s) { return fromLispTree(LispTree.proto.parseFromString(s)); }
}