changeset 14:95b27aa47788 default tip

parse tree now displays as html.
author Atul Varma <varmaa@toolness.com>
date Sun, 31 May 2009 03:57:37 -0700
parents 1b7ea033b3f6
children
files jsparser.css jsparser.html jsparser.js parser-demo.js
diffstat 4 files changed, 36 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/jsparser.css	Sat May 30 16:55:51 2009 -0700
+++ b/jsparser.css	Sun May 31 03:57:37 2009 -0700
@@ -23,3 +23,14 @@
 .tokenization {
     cursor: pointer;
 }
+
+.parse-tree span {
+    display: block;
+    float: left;
+}
+
+.expression {
+    margin: 0.25em;
+    padding: 0.25em;
+    border: 1px solid gray;
+}
--- a/jsparser.html	Sat May 30 16:55:51 2009 -0700
+++ b/jsparser.html	Sun May 31 03:57:37 2009 -0700
@@ -13,7 +13,7 @@
 <p>Tokenization</p>
 <pre class="tokenization"></pre>
 <p>Parse Tree</p>
-<pre class="parse-tree"></pre>
+<div class="parse-tree"></div>
 </body>
 <script src="jquery.js"></script>
 <script src="jsparser.js"></script>
--- a/jsparser.js	Sat May 30 16:55:51 2009 -0700
+++ b/jsparser.js	Sun May 31 03:57:37 2009 -0700
@@ -68,6 +68,14 @@
      parser.advance();
      return this;
    },
+   toHtml: function() {
+     var span = $('<span class="expression"></span>');
+     span.append(
+       $('<span class="unary operator"><span>').text(this.match),
+       $('<span class="operand"></span>').append(this.operand.toHtml())
+     );
+     return span;
+   },
    toString: function() {
      return "(" + this.match + this.operand + ")";
    }
@@ -84,6 +92,15 @@
      this.rightOperand = parser.expression(this.leftBindingPower);
      return this;
    },
+   toHtml: function() {
+     var span = $('<span class="expression"></span>');
+     span.append(
+       $('<span class="operand"></span>').append(this.leftOperand.toHtml()),
+       $('<span class="binary operator"><span>').text(this.match),
+       $('<span class="operand"></span>').append(this.rightOperand.toHtml())
+     );
+     return span;
+   },
    toString: function() {
      return ("(" + this.leftOperand + " " + this.match + " " +
              this.rightOperand + ")");
--- a/parser-demo.js	Sat May 30 16:55:51 2009 -0700
+++ b/parser-demo.js	Sun May 31 03:57:37 2009 -0700
@@ -28,6 +28,9 @@
 
   new Parsing.Symbol({name: 'number',
                       match: /^[0-9]+/,
+                      toHtml: function() {
+                        return document.createTextNode(this.value);
+                      },
                       nullDenotation: function() {
                         return this;
                       },
@@ -45,6 +48,9 @@
   $('.tokenization').empty();
   $('.parse-tree').empty();
 
+  if (!code)
+    return;
+  
   try {
     var tokens = Parsing.tokenize({lexicon: MyLexicon,
                                    text: code});
@@ -83,7 +89,7 @@
     throw e;
   }
 
-  $('.parse-tree').text(parseTree.toString());
+  $('.parse-tree').append(parseTree.toHtml());
 }
 
 $(window).ready(