|
@ -56,18 +56,18 @@ function tokenizeNum(tokstream) { |
|
|
tokstream = tokstream.substr(1); |
|
|
tokstream = tokstream.substr(1); |
|
|
n++; |
|
|
n++; |
|
|
} |
|
|
} |
|
|
return [n, ["Float", parseFloat(number.join(''), 10)]]; |
|
|
return [n, ["float", parseFloat(number.join(''), 10)]]; |
|
|
} |
|
|
} |
|
|
if (!isFloat) |
|
|
if (!isFloat) |
|
|
return [n, ["Integer", parseInt(number.join(''), 10)]]; |
|
|
return [n, ["integer", parseInt(number.join(''), 10)]]; |
|
|
else |
|
|
else |
|
|
return [n, ["Float", parseFloat(number.join(''), 10)]]; |
|
|
return [n, ["float", parseFloat(number.join(''), 10)]]; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
function tokenizeIdent(tokstream) { |
|
|
function tokenizeIdent(tokstream) { |
|
|
var identifier = []; |
|
|
var identifier = []; |
|
|
var n = 0; |
|
|
var n = 0; |
|
|
while ((!isWhitespace(tokstream[0])) && isIdentifier(tokstream[0])) { |
|
|
while ((!isWhitespace(tokstream[0])) && (!isDigit(tokstream[0])) && isIdentifier(tokstream[0])) { |
|
|
identifier.push(tokstream[0]); |
|
|
identifier.push(tokstream[0]); |
|
|
tokstream = tokstream.substr(1); |
|
|
tokstream = tokstream.substr(1); |
|
|
n++; |
|
|
n++; |
|
@ -164,13 +164,15 @@ function tokenize(tokstream) { |
|
|
break; |
|
|
break; |
|
|
|
|
|
|
|
|
case 43: // '+'
|
|
|
case 43: // '+'
|
|
|
var result = tokenizeNum(tokstream); |
|
|
if (isDigit(tokstream[1])) { |
|
|
var num = result[1]; |
|
|
var result = tokenizeNum(tokstream); |
|
|
var i = result[0]; |
|
|
var num = result[1]; |
|
|
if (num[1] !== NaN) |
|
|
var i = result[0]; |
|
|
tokens.push(num); |
|
|
if (num[1] !== NaN) |
|
|
tokstream = tokstream.substr(i); |
|
|
tokens.push(num); |
|
|
break; |
|
|
tokstream = tokstream.substr(i); |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
case 45: // '-'
|
|
|
case 45: // '-'
|
|
|
var lambda = peek(tokstream, "arrow", "->"); |
|
|
var lambda = peek(tokstream, "arrow", "->"); |
|
|
if (lambda) { |
|
|
if (lambda) { |
|
@ -178,21 +180,25 @@ function tokenize(tokstream) { |
|
|
tokstream = tokstream.substr(2); |
|
|
tokstream = tokstream.substr(2); |
|
|
break; |
|
|
break; |
|
|
} |
|
|
} |
|
|
var result = tokenizeNum(tokstream); |
|
|
if (isDigit(tokstream[1])) { |
|
|
var num = result[1]; |
|
|
var result = tokenizeNum(tokstream); |
|
|
var i = result[0]; |
|
|
var num = result[1]; |
|
|
if (num[1] !== NaN) |
|
|
var i = result[0]; |
|
|
tokens.push(num); |
|
|
if (num[1] !== NaN) |
|
|
tokstream = tokstream.substr(i); |
|
|
tokens.push(num); |
|
|
break; |
|
|
tokstream = tokstream.substr(i); |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
case 46: // '.'
|
|
|
case 46: // '.'
|
|
|
var result = tokenizeNum(tokstream); |
|
|
if (isDigit(tokstream[1])) { |
|
|
var num = result[1]; |
|
|
var result = tokenizeNum(tokstream); |
|
|
var i = result[0]; |
|
|
var num = result[1]; |
|
|
if (num[1] !== NaN) |
|
|
var i = result[0]; |
|
|
tokens.push(num); |
|
|
if (num[1] !== NaN) |
|
|
tokstream = tokstream.substr(i); |
|
|
tokens.push(num); |
|
|
break; |
|
|
tokstream = tokstream.substr(i); |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
case 116: // 't'
|
|
|
case 116: // 't'
|
|
|
var result = tokenizeT(tokstream); |
|
|
var result = tokenizeT(tokstream); |
|
|
if (result) { |
|
|
if (result) { |
|
|