Mercurial > jsparser
view parser-demo.js @ 10:8de776b8ed31
made the demo work on the web instead of the command line.
author | Atul Varma <varmaa@toolness.com> |
---|---|
date | Sat, 30 May 2009 16:08:25 -0700 |
parents | |
children | 49145e1db3e5 |
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() { function print(text) { var node = document.createTextNode(text.toString() + '\n'); $('.output').append(node); } var code = $('.input').text(); var tokens = Parsing.tokenize({lexicon: MyLexicon, text: code}); function printTokens(tokens) { tokens.forEach( function(token) { var repr = token.name; if (token.value) repr += ":" + token.value; repr += " @L" + token.lineNo + ":" + token.charNo; print(repr); }); } printTokens(tokens); var parser = new Parsing.Parser(tokens); print(parser.parse()); });