changeset 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 35d2cc193d99
children 7e313849ab41
files parser.js
diffstat 1 files changed, 1 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/parser.js	Mon Aug 26 17:27:17 2013 -0700
+++ b/parser.js	Mon Aug 26 17:46:47 2013 -0700
@@ -102,7 +102,7 @@
 'array = "#[" ws els:expr* "]" { return new arraylit(els); };' +
 'list = "[" ws els:expr* "]" { return new listlit(els); };' +
 'opsym = name:("&&" / "||" / "<=" / ">=" / "<" / ">" / "=" / "!=" / "+" / "-" / "." / "*" / "/" / "%" / "|") { return new symbol(name); };' +
-'assignment = ws sym:(symbol / opsym) hws "<-" expr:expr ws { return new assignment(sym, expr); }' +
+'assignment = ws sym:(opsym / symbol) hws "<-" expr:expr ws { return new assignment(sym, expr); }' +
 'lambda = args:((& ":") argname+  )? "{" ws exprs:(assignment / expr)* "}" { return new lambda(args[1], exprs); };' +
 'argname = init:":"? chars:[a-zA-Z_!?@]+ trailing:[a-zA-Z_!?@0-9]* hws { return new symbol(init + chars.join("") + trailing.join("")); };' +
 'funexpr = f: funcall ws { return f; };' +