Mercurial > jsparser
view parser-demo.js @ 11:49145e1db3e5
added an interactive tokenization display.
author | Atul Varma <varmaa@toolness.com> |
---|---|
date | Sat, 30 May 2009 16:38:20 -0700 |
parents | 8de776b8ed31 |
children | 1b7ea033b3f6 |
line wrap: on
line source
var MyLexicon = [ new Parsing.BinaryOrUnaryOp({name: 'plus', match: '+', leftBindingPower: 60}), new Parsing.BinaryOrUnaryOp({name: 'minus', match: '-', leftBindingPower: 60}), new Parsing.Symbol({name: 'left parenthesis', match: '(', nullDenotation: function(parser) { var contents = parser.expression(0); parser.advance('right parenthesis'); return contents; }}), new Parsing.Symbol({name: 'right parenthesis', match: ')'}), new Parsing.BinaryOp({name: 'multiply', match: '*', leftBindingPower: 70}), new Parsing.BinaryOp({name: 'divide', match: '/', leftBindingPower: 70}), new Parsing.Symbol({name: 'number', match: /^[0-9]+/, nullDenotation: function() { return this; }, toString: function() { return this.value; }}), new Parsing.Symbol({name: 'whitespace', match: /^\s+/, ignore: true}) ]; $(window).ready( function() { var code = $('.input').text(); var tokens = Parsing.tokenize({lexicon: MyLexicon, text: code}); jQuery.each( tokens, function() { var token = this; var node = $('<span class="token"></span>'); node.text(token.value); node.hover( function onIn() { var overlay = $('<div class="overlay"></div>'); overlay.text(token.name); overlay.css({left: $(this).position().left}); $(this).append(overlay); $(this).addClass("highlight"); }, function onOut() { $(".overlay", this).remove(); $(this).removeClass("highlight"); }); $('.tokenization').append(node); }); var parser = new Parsing.Parser(tokens); $('.parse-tree').text(parser.parse().toString()); });