comparison parser.js @ 187:810edf474f86

Fix parse precedence problem between opsyms and symbols in assignments
author Mike Pavone <pavone@retrodev.com>
date Mon, 26 Aug 2013 17:46:47 -0700
parents ab204751d1e7
children e01137a97654
comparison
equal deleted inserted replaced
186:35d2cc193d99 187:810edf474f86
100 'escape = "\\\\" char:[nt\\"r\\\\] { if (char == "n") { return "\\n"; } if (char == "r") { return "\\r"; } return char; };' + 100 'escape = "\\\\" char:[nt\\"r\\\\] { if (char == "n") { return "\\n"; } if (char == "r") { return "\\r"; } return char; };' +
101 'object = "#{" ws messages:(assignment / funexpr)* "}" { return new object(messages); };' + 101 'object = "#{" ws messages:(assignment / funexpr)* "}" { return new object(messages); };' +
102 'array = "#[" ws els:expr* "]" { return new arraylit(els); };' + 102 'array = "#[" ws els:expr* "]" { return new arraylit(els); };' +
103 'list = "[" ws els:expr* "]" { return new listlit(els); };' + 103 'list = "[" ws els:expr* "]" { return new listlit(els); };' +
104 'opsym = name:("&&" / "||" / "<=" / ">=" / "<" / ">" / "=" / "!=" / "+" / "-" / "." / "*" / "/" / "%" / "|") { return new symbol(name); };' + 104 'opsym = name:("&&" / "||" / "<=" / ">=" / "<" / ">" / "=" / "!=" / "+" / "-" / "." / "*" / "/" / "%" / "|") { return new symbol(name); };' +
105 'assignment = ws sym:(symbol / opsym) hws "<-" expr:expr ws { return new assignment(sym, expr); }' + 105 'assignment = ws sym:(opsym / symbol) hws "<-" expr:expr ws { return new assignment(sym, expr); }' +
106 'lambda = args:((& ":") argname+ )? "{" ws exprs:(assignment / expr)* "}" { return new lambda(args[1], exprs); };' + 106 'lambda = args:((& ":") argname+ )? "{" ws exprs:(assignment / expr)* "}" { return new lambda(args[1], exprs); };' +
107 'argname = init:":"? chars:[a-zA-Z_!?@]+ trailing:[a-zA-Z_!?@0-9]* hws { return new symbol(init + chars.join("") + trailing.join("")); };' + 107 'argname = init:":"? chars:[a-zA-Z_!?@]+ trailing:[a-zA-Z_!?@0-9]* hws { return new symbol(init + chars.join("") + trailing.join("")); };' +
108 'funexpr = f: funcall ws { return f; };' + 108 'funexpr = f: funcall ws { return f; };' +
109 'funcall = hws parts: funcallpart+ { var fun = ""; var args = []; for (var i = 0; i < parts.length; i++) { fun += parts[i].name; args = args.concat(parts[i].args); } return new funcall(fun, args); };' + 109 'funcall = hws parts: funcallpart+ { var fun = ""; var args = []; for (var i = 0; i < parts.length; i++) { fun += parts[i].name; args = args.concat(parts[i].args); } return new funcall(fun, args); };' +
110 'funcallpart = fun:funpart args:opexpr* hws { return { name: fun, args: args}; };' + 110 'funcallpart = fun:funpart args:opexpr* hws { return { name: fun, args: args}; };' +