added better parser
[lambda.git] / code / sample.html
diff --git a/code/sample.html b/code/sample.html
new file mode 100644 (file)
index 0000000..0f44885
--- /dev/null
@@ -0,0 +1,91 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html><head>
+<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
+
+
+    <title>Top Down Operator Precedence</title>
+    <style>
+th {background-color: thistle; border: black solid 1px; text-align: left;
+    padding-left: 10px; padding-right: 10px; vertical-align: top;}
+td {background-color: white; border: black solid 1pt; padding-left: 10px;
+    padding-right: 10px; vertical-align: top;}
+table {width: 90%; border: 0px; cellpadding: 0px;}
+    </style>
+</head><body bgcolor="linen">
+<h1>Top Down Operator Precedence</h1>
+
+<p><a href="http://www.crockford.com/">Douglas Crockford</a></p>
+
+<p>2007-08-05</p>
+
+<h2>Demonstration</h2>
+<p>The text that follows is the parse tree that the parser generated by
+  parsing itself. </p>
+<textarea id="INPUT" style="border: 2px solid black; color: black; font-family: monospace; height: 3in; overflow: auto; padding: 0.5em; width: 100%;"></textarea>
+<input id="PARSE" value="parse" type="button">
+<noscript><p>You may not see it because you have JavaScript turned off. Uffff!</p></noscript>
+<script src="tokens.js"></script>
+<script src="parse.js"></script>
+<script src="lambda2.js"></script>
+<script src="json2.js"></script>
+<pre id="OUTPUT">
+</pre>
+<script>
+/*jslint evil: true */
+
+/*members create, error, message, name, prototype, stringify, toSource,
+    toString, write
+*/
+
+/*global JSON, make_parse, parse, source, tree */
+
+// Make a new object that inherits members from an existing object.
+
+if (typeof Object.create !== 'function') {
+    Object.create = function (o) {
+        function F() {}
+        F.prototype = o;
+        return new F();
+    };
+}
+
+// Transform a token object into an exception object and throw it.
+
+Object.prototype.error = function (message, t) {
+    t = t || this;
+    t.name = "SyntaxError";
+    t.message = message;
+    throw t;
+};
+
+
+(function () {
+    var parse = make_parse();
+
+    function go(source) {
+        var string, tree;
+        try {
+            tree = parse(source);
+//             string = JSON.stringify(tree, ['key', 'name', 'message', 'value', 'arity', 'first', 'second', 'third', 'fourth'], 4);
+//             string = JSON.stringify(tree.handler(), ['key', 'name', 'message', 'value', 'arity', 'first', 'second', 'tag', 'variable', 'left', 'right', 'bound', 'body' ], 4);
+                       string = tree.handler().to_string();
+        } catch (e) {
+            string = JSON.stringify(e, ['name', 'message', 'from', 'to', 'key',
+                    'value', 'arity', 'first', 'second', 'third', 'fourth'], 4);
+        }
+        document.getElementById('OUTPUT').innerHTML = string
+            .replace(/&/g, '&amp;')
+            .replace(/[<]/g, '&lt;');
+    }
+
+//     go("var make_parse = " + (make_parse.toSource ?
+//             make_parse.toSource() : make_parse.toString()) + ";");
+
+    document.getElementById('PARSE').onclick = function (e) {
+        go(document.getElementById('INPUT').value);
+    };
+}());
+
+</script>
+
+</body></html>