tweaked reporterize infixParser

pull/29/head
jmoenig 2016-12-23 14:59:13 +01:00
rodzic b920624c4a
commit e5b7559247
2 zmienionych plików z 16 dodań i 8 usunięć

Wyświetl plik

@ -3211,6 +3211,10 @@ http://snap.berkeley.edu/run#cloud:Username=jens&ProjectName=rotation
* Objects: simplified reporterize>>blockFromAST
* Threads: prevented color slots from flashing. Good catch, thanks, Joan!
161223
------
* Objects: tweaked reporterize infixParser
== v4.10 === (in development)
Features:

Wyświetl plik

@ -82,7 +82,7 @@ SpeechBubbleMorph, RingMorph, isNil, FileReader, TableDialogMorph,
BlockEditorMorph, BlockDialogMorph, PrototypeHatBlockMorph, localize,
TableMorph, TableFrameMorph, normalizeCanvas, BooleanSlotMorph*/
modules.objects = '2016-December-22';
modules.objects = '2016-December-23';
var SpriteMorph;
var StageMorph;
@ -2642,7 +2642,7 @@ SpriteMorph.prototype.reporterize = function (expressionString) {
function parseInfix(expression, operator, already) {
// very basic diadic infix parser for arithmetic expressions
// with strict left-to-right operator precedence (like in Smalltalk)
// with strict left-to-right operator precedence (as in Smalltalk)
// which can be overriden by - nested - parentheses.
// assumes well-formed expressions, no graceful error handling yet.
@ -2702,13 +2702,17 @@ SpriteMorph.prototype.reporterize = function (expressionString) {
case '&':
case '|':
if (!operator && !inputs[0].length) {
inputs[0] += ch;
inputs[0] = ch;
} else if (operator) {
return parseInfix(
expression.slice(idx),
ch,
[operator, already, format(inputs[1])]
);
if (!inputs[1].length) {
inputs[1] = ch;
} else {
return parseInfix(
expression.slice(idx),
ch,
[operator, already, format(inputs[1])]
);
}
} else {
operator = ch;
already = format(inputs[0]);