Mercurial > jsparser
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(