|
@@ -1,17 +1,17 @@
|
|
start = method
|
|
start = method
|
|
|
|
|
|
separator = [ \t\v\f\u00A0\uFEFF\n\r\u2028\u2029]+
|
|
separator = [ \t\v\f\u00A0\uFEFF\n\r\u2028\u2029]+
|
|
-comments = (["][^"]*["])+
|
|
|
|
|
|
+comments = ('"' [^"]* '"')+
|
|
ws = (separator / comments)*
|
|
ws = (separator / comments)*
|
|
identifier = first:[a-zA-Z] others:[a-zA-Z0-9]* {return first + others.join("");}
|
|
identifier = first:[a-zA-Z] others:[a-zA-Z0-9]* {return first + others.join("");}
|
|
-keyword = first:identifier last:[:] {return first + last;}
|
|
|
|
|
|
+keyword = first:identifier last:":" {return first + last;}
|
|
selector = first:[a-zA-Z] others:[a-zA-Z0-9\:]* {return first + others.join("");}
|
|
selector = first:[a-zA-Z] others:[a-zA-Z0-9\:]* {return first + others.join("");}
|
|
className = first:[A-Z] others:[a-zA-Z0-9]* {return first + others.join("");}
|
|
className = first:[A-Z] others:[a-zA-Z0-9]* {return first + others.join("");}
|
|
-string = ['] val:(("''" {return "'";} / [^'])*) ['] {
|
|
|
|
|
|
+string = "'" val:(("''" {return "'";} / [^'])*) "'" {
|
|
return globals.ValueNode._new()
|
|
return globals.ValueNode._new()
|
|
._position_((line()).__at(column()))
|
|
._position_((line()).__at(column()))
|
|
._source_(text())
|
|
._source_(text())
|
|
- ._value_(val.join("").replace(/\"/ig, '"'));
|
|
|
|
|
|
+ ._value_(val.join(""));
|
|
}
|
|
}
|
|
character = "$" char:.
|
|
character = "$" char:.
|
|
{
|
|
{
|
|
@@ -35,13 +35,13 @@ number = n:(numberExp / hex / float / integer) {
|
|
._value_(n);
|
|
._value_(n);
|
|
}
|
|
}
|
|
numberExp = n:((float / integer) "e" integer) {return parseFloat(n.join(""));}
|
|
numberExp = n:((float / integer) "e" integer) {return parseFloat(n.join(""));}
|
|
-hex = neg:[-]? "16r" num:[0-9a-fA-F]+ {return parseInt(((neg || '') + num.join("")), 16);}
|
|
|
|
-float = neg:[-]?digits:[0-9]+ "." dec:[0-9]+ {return parseFloat(((neg || '') + digits.join("") + "." + dec.join("")), 10);}
|
|
|
|
-integer = neg:[-]?digits:[0-9]+ {return (parseInt((neg || '') +digits.join(""), 10));}
|
|
|
|
|
|
+hex = neg:"-"? "16r" num:[0-9a-fA-F]+ {return parseInt(((neg || '') + num.join("")), 16);}
|
|
|
|
+float = neg:"-"? digits:[0-9]+ "." dec:[0-9]+ {return parseFloat(((neg || '') + digits.join("") + "." + dec.join("")), 10);}
|
|
|
|
+integer = neg:"-"? digits:[0-9]+ {return (parseInt((neg || '') + digits.join(""), 10));}
|
|
|
|
|
|
literalArray = "#(" rest:literalArrayRest {return rest;}
|
|
literalArray = "#(" rest:literalArrayRest {return rest;}
|
|
bareLiteralArray = "(" rest:literalArrayRest {return rest;}
|
|
bareLiteralArray = "(" rest:literalArrayRest {return rest;}
|
|
-literalArrayRest = ws lits:(lit:(parseTimeLiteral / bareLiteralArray / bareSymbol) ws {return lit._value();})* ws ")" {
|
|
|
|
|
|
+literalArrayRest = lits:(ws lit:(parseTimeLiteral / bareLiteralArray / bareSymbol) {return lit._value();})* ws ")" {
|
|
return globals.ValueNode._new()
|
|
return globals.ValueNode._new()
|
|
._position_((line()).__at(column()))
|
|
._position_((line()).__at(column()))
|
|
._source_(text())
|
|
._source_(text())
|
|
@@ -53,7 +53,7 @@ dynamicArray = "{" ws expressions:expressions? ws "."? "}" {
|
|
._source_(text())
|
|
._source_(text())
|
|
._nodes_(expressions || []);
|
|
._nodes_(expressions || []);
|
|
}
|
|
}
|
|
-dynamicDictionary = "#{" ws expressions: associations? ws "}" {
|
|
|
|
|
|
+dynamicDictionary = "#{" ws expressions:associations? ws "}" {
|
|
return globals.DynamicDictionaryNode._new()
|
|
return globals.DynamicDictionaryNode._new()
|
|
._position_((line()).__at(column()))
|
|
._position_((line()).__at(column()))
|
|
._source_(text())
|
|
._source_(text())
|
|
@@ -82,12 +82,12 @@ variable = identifier:identifier {
|
|
|
|
|
|
reference = variable
|
|
reference = variable
|
|
|
|
|
|
-keywordPair = key:keyword ws arg:binarySend ws {return {key:key, arg: arg};}
|
|
|
|
|
|
+keywordPair = ws key:keyword ws arg:binarySend {return {key:key, arg:arg};}
|
|
|
|
|
|
binarySelector = bin:[\\+*/=><,@%~|&-]+ {return bin.join("");}
|
|
binarySelector = bin:[\\+*/=><,@%~|&-]+ {return bin.join("");}
|
|
unarySelector = identifier
|
|
unarySelector = identifier
|
|
|
|
|
|
-keywordPattern = pairs:(ws key:keyword ws arg:identifier {return {key:key, arg: arg};})+ {
|
|
|
|
|
|
+keywordPattern = pairs:(ws key:keyword ws arg:identifier {return {key:key, arg:arg};})+ {
|
|
var keywords = [];
|
|
var keywords = [];
|
|
var params = [];
|
|
var params = [];
|
|
var i = 0;
|
|
var i = 0;
|
|
@@ -122,19 +122,19 @@ ret = '^' ws expression:expression ws '.'? {
|
|
._nodes_([expression]);
|
|
._nodes_([expression]);
|
|
}
|
|
}
|
|
|
|
|
|
-temps = "|" vars:(ws variable:identifier ws {return variable;})* "|" {return vars;}
|
|
|
|
|
|
+temps = "|" vars:(ws variable:identifier {return variable;})* ws "|" {return vars;}
|
|
|
|
|
|
blockParamList = params:((ws ":" ws param:identifier {return param;})+) ws "|" {return params;}
|
|
blockParamList = params:((ws ":" ws param:identifier {return param;})+) ws "|" {return params;}
|
|
|
|
|
|
subexpression = '(' ws expression:expression ws ')' {return expression;}
|
|
subexpression = '(' ws expression:expression ws ')' {return expression;}
|
|
|
|
|
|
-statements = ret:ret [.]* {return [ret];}
|
|
|
|
- / exps:expressions ws [.]+ ws ret:ret [.]* {
|
|
|
|
|
|
+statements = ret:ret "."* {return [ret];}
|
|
|
|
+ / exps:expressions ws "."+ ws ret:ret "."* {
|
|
var expressions = exps;
|
|
var expressions = exps;
|
|
expressions.push(ret);
|
|
expressions.push(ret);
|
|
return expressions;
|
|
return expressions;
|
|
}
|
|
}
|
|
- / expressions:expressions? [.]* {
|
|
|
|
|
|
+ / expressions:expressions? "."* {
|
|
return expressions || [];
|
|
return expressions || [];
|
|
}
|
|
}
|
|
|
|
|
|
@@ -150,7 +150,7 @@ stSequence = temps:temps? ws statements:statements? ws {
|
|
|
|
|
|
jsSequence = jsStatement
|
|
jsSequence = jsStatement
|
|
|
|
|
|
-block = '[' ws params:blockParamList? ws sequence:sequence? ws ']' {
|
|
|
|
|
|
+block = '[' params:blockParamList? ws sequence:sequence? ws ']' {
|
|
return globals.BlockNode._new()
|
|
return globals.BlockNode._new()
|
|
._position_((line()).__at(column()))
|
|
._position_((line()).__at(column()))
|
|
._source_(text())
|
|
._source_(text())
|
|
@@ -162,7 +162,7 @@ operand = literal / reference / subexpression
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-unaryMessage = ws selector:unarySelector ![:] {
|
|
|
|
|
|
+unaryMessage = ws selector:unarySelector !":" {
|
|
return globals.SendNode._new()
|
|
return globals.SendNode._new()
|
|
._position_((line()).__at(column()))
|
|
._position_((line()).__at(column()))
|
|
._source_(text())
|
|
._source_(text())
|
|
@@ -214,7 +214,7 @@ binarySend = receiver:unarySend tail:binaryTail? {
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
-keywordMessage = ws pairs:(pair:keywordPair ws {return pair;})+ {
|
|
|
|
|
|
+keywordMessage = pairs:keywordPair+ {
|
|
var selector = [];
|
|
var selector = [];
|
|
var args = [];
|
|
var args = [];
|
|
for(var i = 0; i < pairs.length; i++) {
|
|
for(var i = 0; i < pairs.length; i++) {
|
|
@@ -234,7 +234,7 @@ keywordSend = receiver:binarySend tail:keywordMessage {
|
|
|
|
|
|
message = binaryMessage / unaryMessage / keywordMessage
|
|
message = binaryMessage / unaryMessage / keywordMessage
|
|
|
|
|
|
-cascade = ws send:(keywordSend / binarySend) messages:(ws ";" ws mess:message ws {return mess;})+ {
|
|
|
|
|
|
+cascade = ws send:(keywordSend / binarySend) messages:(ws ";" ws mess:message {return mess;})+ {
|
|
var cascade = [];
|
|
var cascade = [];
|
|
cascade.push(send);
|
|
cascade.push(send);
|
|
for(var i = 0; i < messages.length; i++) {
|
|
for(var i = 0; i < messages.length; i++) {
|
|
@@ -254,7 +254,7 @@ jsStatement = "<" val:((">>" {return ">";} / [^>])*) ">" {
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
-method = ws pattern:(keywordPattern / binaryPattern / unaryPattern) ws sequence:sequence? ws {
|
|
|
|
|
|
+method = pattern:(keywordPattern / binaryPattern / unaryPattern) ws sequence:sequence? ws {
|
|
return globals.MethodNode._new()
|
|
return globals.MethodNode._new()
|
|
._position_((line()).__at(column()))
|
|
._position_((line()).__at(column()))
|
|
._source_(text())
|
|
._source_(text())
|
|
@@ -268,4 +268,3 @@ associationSend = send:binarySend & { return send._selector() === "->" } { r
|
|
|
|
|
|
associationList = ws "." ws expression:associationSend {return expression;}
|
|
associationList = ws "." ws expression:associationSend {return expression;}
|
|
associations = first:associationSend others:associationList* { return first.concat.apply(first, others); }
|
|
associations = first:associationSend others:associationList* { return first.concat.apply(first, others); }
|
|
-
|
|
|