--- /dev/null
+/*\r
+ * Symbol.java\r
+ *\r
+ * Copyright 1997 Massachusetts Institute of Technology.\r
+ * All Rights Reserved.\r
+ *\r
+ * Author: Ora Lassila\r
+ *\r
+ * $Id: Symbol.java,v 1.1 2010/06/15 12:27:51 smhuang Exp $\r
+ */\r
+\r
+package org.w3c.tools.sexpr;\r
+\r
+import java.io.PrintStream;\r
+import java.util.Dictionary;\r
+\r
+/**\r
+ * Base class for lisp-like symbols.\r
+ */\r
+public class Symbol implements SExpr {\r
+\r
+ private String name;\r
+\r
+ /**\r
+ * Creates a symbol and potentially interns it in a symbol table.\r
+ */\r
+ public static Symbol makeSymbol(String name, Dictionary symbols)\r
+ {\r
+ if (symbols == null)\r
+ return new Symbol(name);\r
+ else {\r
+ String key = name.toLowerCase();\r
+ Symbol s = (Symbol)symbols.get(key);\r
+ if (s == null) {\r
+ s = new Symbol(name);\r
+ symbols.put(key, s);\r
+ }\r
+ return s;\r
+ }\r
+ }\r
+\r
+ protected Symbol(String name)\r
+ {\r
+ this.name = name;\r
+ }\r
+\r
+ public String toString()\r
+ {\r
+ return name;\r
+ }\r
+\r
+ public void printExpr(PrintStream out)\r
+ {\r
+ out.print(toString());\r
+ }\r
+\r
+}\r