From d44123cabaa730c778a0e2644c75dbfba6a7ab30 Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Fri, 12 Jun 2015 22:34:45 -0700 Subject: 1556 --- html/repl.mu.html | 186 +++++++++++++++++++++++++++--------------------------- 1 file changed, 93 insertions(+), 93 deletions(-) (limited to 'html/repl.mu.html') diff --git a/html/repl.mu.html b/html/repl.mu.html index 2a9f4d62..2ccd9f9b 100644 --- a/html/repl.mu.html +++ b/html/repl.mu.html @@ -13,14 +13,14 @@ pre { white-space: pre-wrap; font-family: monospace; color: #eeeeee; background-color: #080808; } body { font-family: monospace; color: #eeeeee; background-color: #080808; } * { font-size: 1em; } -.Delimiter { color: #c000c0; } .muScenario { color: #00af00; } +.Delimiter { color: #c000c0; } .Comment { color: #8080ff; } .Constant { color: #008080; } .Special { color: #ff6060; } -.Identifier { color: #008080; } -.muRecipe { color: #ff8700; } .CommentedCode { color: #6c6c6c; } +.muControl { color: #804000; } +.muRecipe { color: #ff8700; } --> @@ -35,7 +35,7 @@ body { font-family: monospace; color: #eeeeee; background-color: #080808; } # interactive prompt for mu recipe main [ - default-space:address:array:location <- new location:type, 30:literal + default-space:address:array:location <- new location:type, 30:literal switch-to-display msg:address:array:character <- new [ready! type in an instruction, then hit enter. ctrl-d exits. ] @@ -46,16 +46,16 @@ body { font-family: monospace; color: #eeeeee; background-color: #080808; } ] recipe color-session [ - default-space:address:array:location <- new location:type, 30:literal - keyboard:address <- next-ingredient - screen:address <- next-ingredient + default-space:address:array:location <- new location:type, 30:literal + keyboard:address <- next-ingredient + screen:address <- next-ingredient { inst:address:array:character, keyboard:address, screen:address <- read-instruction keyboard:address, screen:address - break-unless inst:address:array:character + break-unless inst:address:array:character run-interactive inst:address:array:character - loop + loop } - reply keyboard:address/same-as-ingredient:0, screen:address/same-as-ingredient:1 + reply keyboard:address/same-as-ingredient:0, screen:address/same-as-ingredient:1 ] # basic keyboard input; just text and enter @@ -90,45 +90,45 @@ body { font-family: monospace; color: #eeeeee; background-color: #080808; } # Most of the complexity is for the printing to screen, to highlight strings # and comments specially. Especially in the presence of backspacing. recipe read-instruction [ - default-space:address:array:location <- new location:type, 60:literal - k:address:keyboard <- next-ingredient - x:address:screen <- next-ingredient + default-space:address:array:location <- new location:type, 60:literal + k:address:keyboard <- next-ingredient + x:address:screen <- next-ingredient result:address:buffer <- init-buffer 10:literal # string to maybe add to trace [app], [read-instruction] # start state machine by calling slurp-regular-characters, which will return # by calling the complete continuation - complete:continuation <- current-continuation + complete:continuation <- current-continuation # If result is not empty, we've run slurp-regular-characters below, called # the continuation and so bounced back here. We're done. len:number <- get result:address:buffer/deref, length:offset completed?:boolean <- greater-than len:number, 0:literal - jump-if completed?:boolean, +completed:label + jump-if completed?:boolean, +completed:label # Otherwise we're just getting started. result:address:buffer, k:address:keyboard, x:address:screen <- slurp-regular-characters result:address:buffer, k:address:keyboard, x:address:screen, complete:continuation #? $print [aaa: ], result:address:buffer #? 1 #? move-cursor-down-on-display #? 1 trace [error], [slurp-regular-characters should never return normally] - +completed + +completed result2:address:array:character <- buffer-to-array result:address:buffer #? $print [bbb: ], result2:address:array:character #? 1 #? move-cursor-down-on-display #? 1 trace [app], [exiting read-instruction] - reply result2:address:array:character, k:address:keyboard/same-as-ingredient:0, x:address:screen/same-as-ingredient:1 + reply result2:address:array:character, k:address:keyboard/same-as-ingredient:0, x:address:screen/same-as-ingredient:1 ] # read characters from the keyboard, print them to the screen in *white*. # Transition to other routines for comments and strings. recipe slurp-regular-characters [ - default-space:address:array:location <- new location:type, 30:literal - result:address:buffer <- next-ingredient - k:address:keyboard <- next-ingredient - x:address:screen <- next-ingredient - complete:continuation <- next-ingredient + default-space:address:array:location <- new location:type, 30:literal + result:address:buffer <- next-ingredient + k:address:keyboard <- next-ingredient + x:address:screen <- next-ingredient + complete:continuation <- next-ingredient trace [app], [slurp-regular-characters] characters-slurped:number <- copy 0:literal #? $run-depth #? 1 { - +next-character + +next-character trace [app], [slurp-regular-characters: next] #? $print [a0 #? 1 #? ] #? 1 @@ -142,46 +142,46 @@ body { font-family: monospace; color: #eeeeee; background-color: #080808; } #? $print [aaa] #? 1 #? move-cursor-down-on-display #? 1 ctrl-d?:boolean <- equal c:character, 4:literal/ctrl-d/eof - break-unless ctrl-d?:boolean + break-unless ctrl-d?:boolean #? $print [ctrl-d] #? 1 #? move-cursor-down-on-display #? 1 trace [app], [slurp-regular-characters: ctrl-d] - reply 0:literal, k:address:keyboard/same-as-ingredient:1, x:address:screen/same-as-ingredient:2 + reply 0:literal, k:address:keyboard/same-as-ingredient:1, x:address:screen/same-as-ingredient:2 } { null?:boolean <- equal c:character, 0:literal/null - break-unless null?:boolean + break-unless null?:boolean trace [app], [slurp-regular-characters: null] - reply 0:literal, k:address:keyboard/same-as-ingredient:1, x:address:screen/same-as-ingredient:2 + reply 0:literal, k:address:keyboard/same-as-ingredient:1, x:address:screen/same-as-ingredient:2 } # comment? { comment?:boolean <- equal c:character, 35:literal/hash - break-unless comment?:boolean + break-unless comment?:boolean print-character x:address:screen, c:character, 4:literal/blue result:address:buffer <- buffer-append result:address:buffer, c:character result:address:buffer, k:address:keyboard, x:address:screen <- slurp-comment result:address:buffer, k:address:keyboard, x:address:screen, complete:continuation # continue appending to this instruction, whether comment ended or was backspaced out of - loop +next-character:label + loop +next-character:label } # string { string?:boolean <- equal c:character, 91:literal/open-bracket - break-unless string?:boolean + break-unless string?:boolean print-character x:address:screen, c:character, 6:literal/cyan result:address:buffer <- buffer-append result:address:buffer, c:character result:address:buffer, _, k:address:keyboard, x:address:screen <- slurp-string result:address:buffer, k:address:keyboard, x:address:screen, complete:continuation - loop +next-character:label + loop +next-character:label } # assignment { assign?:boolean <- equal c:character, 60:literal/less-than - break-unless assign?:boolean + break-unless assign?:boolean print-character x:address:screen, c:character, 1:literal/red trace [app], [start of assignment: <] result:address:buffer <- buffer-append result:address:buffer, c:character result:address:buffer, k:address:keyboard, x:address:screen <- slurp-assignment result:address:buffer, k:address:keyboard, x:address:screen, complete:continuation - loop +next-character:label + loop +next-character:label } # print print-character x:address:screen, c:character # default color @@ -196,7 +196,7 @@ body { font-family: monospace; color: #eeeeee; background-color: #080808; } #? ] #? 1 #? move-cursor-down-on-display #? 1 backspace?:boolean <- equal c:character, 8:literal/backspace - break-unless backspace?:boolean + break-unless backspace?:boolean #? $print [a3 #? 1 #? ] #? 1 #? move-cursor-down-on-display #? 1 @@ -205,8 +205,8 @@ body { font-family: monospace; color: #eeeeee; background-color: #080808; } #? $print [a4 #? 1 #? ] #? 1 #? move-cursor-down-on-display #? 1 - done?:boolean <- lesser-or-equal characters-slurped:number, -1:literal - break-unless done?:boolean + done?:boolean <- lesser-or-equal characters-slurped:number, -1:literal + break-unless done?:boolean #? $print [a5 #? 1 #? ] #? 1 #? move-cursor-down-on-display #? 1 @@ -214,9 +214,9 @@ body { font-family: monospace; color: #eeeeee; background-color: #080808; } #? $print [a6 #? 1 #? ] #? 1 #? move-cursor-down-on-display #? 1 - reply result:address:buffer, k:address:keyboard/same-as-ingredient:1, x:address:screen/same-as-ingredient:2 + reply result:address:buffer, k:address:keyboard/same-as-ingredient:1, x:address:screen/same-as-ingredient:2 } - loop +next-character:label + loop +next-character:label } #? $print [a9 #? 1 #? ] #? 1 @@ -225,14 +225,14 @@ body { font-family: monospace; color: #eeeeee; background-color: #080808; } characters-slurped:number <- add characters-slurped:number, 1:literal # done with this instruction? done?:boolean <- equal c:character, 10:literal/newline - break-if done?:boolean - loop + break-if done?:boolean + loop } # newline encountered; terminate all recursive calls #? xx:address:array:character <- new [completing!] #? 1 #? print-string x:address:screen, xx:address:array:character #? 1 trace [app], [slurp-regular-characters: newline encountered; unwinding stack] - continue-from complete:continuation + continue-from complete:continuation ] # read characters from keyboard, print them to screen in the comment color. @@ -240,30 +240,30 @@ body { font-family: monospace; color: #eeeeee; background-color: #080808; } # Simpler version of slurp-regular-characters; doesn't handle comments or # strings. Tracks an extra count in case we backspace out of it recipe slurp-comment [ - default-space:address:array:location <- new location:type, 30:literal - result:address:buffer <- next-ingredient - k:address:keyboard <- next-ingredient - x:address:screen <- next-ingredient - complete:continuation <- next-ingredient + default-space:address:array:location <- new location:type, 30:literal + result:address:buffer <- next-ingredient + k:address:keyboard <- next-ingredient + x:address:screen <- next-ingredient + complete:continuation <- next-ingredient trace [app], [slurp-comment] # use this to track when backspace should reset color characters-slurped:number <- copy 1:literal # for the initial '#' that's already appended to result { - +next-character + +next-character # read character c:character, k:address:keyboard <- wait-for-key k:address:keyboard # quit? { ctrl-d?:boolean <- equal c:character, 4:literal/ctrl-d/eof - break-unless ctrl-d?:boolean + break-unless ctrl-d?:boolean trace [app], [slurp-comment: ctrl-d] - reply 0:literal, k:address:keyboard/same-as-ingredient:1, x:address:screen/same-as-ingredient:2 + reply 0:literal, k:address:keyboard/same-as-ingredient:1, x:address:screen/same-as-ingredient:2 } { null?:boolean <- equal c:character, 0:literal/null - break-unless null?:boolean + break-unless null?:boolean trace [app], [slurp-comment: null] - reply 0:literal, k:address:keyboard/same-as-ingredient:1, x:address:screen/same-as-ingredient:2 + reply 0:literal, k:address:keyboard/same-as-ingredient:1, x:address:screen/same-as-ingredient:2 } # print print-character x:address:screen, c:character, 4:literal/blue @@ -272,25 +272,25 @@ body { font-family: monospace; color: #eeeeee; background-color: #080808; } # backspace? decrement { backspace?:boolean <- equal c:character, 8:literal/backspace - break-unless backspace?:boolean + break-unless backspace?:boolean characters-slurped:number <- subtract characters-slurped:number, 1:literal { reset-color?:boolean <- lesser-or-equal characters-slurped:number, 0:literal - break-unless reset-color?:boolean + break-unless reset-color?:boolean trace [app], [slurp-comment: too many backspaces; returning] - reply result:address:buffer, k:address:keyboard/same-as-ingredient:1, x:address:screen/same-as-ingredient:2 + reply result:address:buffer, k:address:keyboard/same-as-ingredient:1, x:address:screen/same-as-ingredient:2 } - loop +next-character:label + loop +next-character:label } # otherwise increment characters-slurped:number <- add characters-slurped:number, 1:literal # done with this instruction? done?:boolean <- equal c:character, 10:literal/newline - break-if done?:boolean - loop + break-if done?:boolean + loop } trace [app], [slurp-regular-characters: newline encountered; unwinding stack] - continue-from complete:continuation + continue-from complete:continuation ] # read characters from keyboard, print them to screen in the string color and @@ -301,36 +301,36 @@ body { font-family: monospace; color: #eeeeee; background-color: #080808; } # b) handles nested strings using recursive calls to itself. Tracks an extra # count in case we backspace out of it. recipe slurp-string [ - default-space:address:array:location <- new location:type, 30:literal - result:address:buffer <- next-ingredient - k:address:keyboard <- next-ingredient - x:address:screen <- next-ingredient - complete:continuation <- next-ingredient - nested-string?:boolean <- next-ingredient + default-space:address:array:location <- new location:type, 30:literal + result:address:buffer <- next-ingredient + k:address:keyboard <- next-ingredient + x:address:screen <- next-ingredient + complete:continuation <- next-ingredient + nested-string?:boolean <- next-ingredient trace [app], [slurp-string] # use this to track when backspace should reset color characters-slurped:number <- copy 1:literal # for the initial '[' that's already appended to result { - +next-character + +next-character # read character c:character, k:address:keyboard <- wait-for-key k:address:keyboard # quit? { ctrl-d?:boolean <- equal c:character, 4:literal/ctrl-d/eof - break-unless ctrl-d?:boolean + break-unless ctrl-d?:boolean trace [app], [slurp-string: ctrl-d] - reply 0:literal, 0:literal, k:address:keyboard/same-as-ingredient:1, x:address:screen/same-as-ingredient:2 + reply 0:literal, 0:literal, k:address:keyboard/same-as-ingredient:1, x:address:screen/same-as-ingredient:2 } { null?:boolean <- equal c:character, 0:literal/null - break-unless null?:boolean + break-unless null?:boolean trace [app], [slurp-string: null] - reply 0:literal, 0:literal, k:address:keyboard/same-as-ingredient:1, x:address:screen/same-as-ingredient:2 + reply 0:literal, 0:literal, k:address:keyboard/same-as-ingredient:1, x:address:screen/same-as-ingredient:2 } # string { string?:boolean <- equal c:character, 91:literal/open-bracket - break-unless string?:boolean + break-unless string?:boolean trace [app], [slurp-string: open-bracket encountered; recursing] print-character x:address:screen, c:character, 6:literal/cyan result:address:buffer <- buffer-append result:address:buffer, c:character @@ -338,7 +338,7 @@ body { font-family: monospace; color: #eeeeee; background-color: #080808; } result:address:buffer, tmp:number, k:address:keyboard, x:address:screen <- slurp-string result:address:buffer, k:address:keyboard, x:address:screen, complete:continuation, 1:literal/nested? # but if we backspace over a completed nested string, handle it in the caller characters-slurped:number <- add characters-slurped:number, tmp:number, 1:literal # for the leading '[' - loop +next-character:label + loop +next-character:label } # print print-character x:address:screen, c:character, 6:literal/cyan @@ -347,58 +347,58 @@ body { font-family: monospace; color: #eeeeee; background-color: #080808; } # backspace? decrement { backspace?:boolean <- equal c:character, 8:literal/backspace - break-unless backspace?:boolean + break-unless backspace?:boolean characters-slurped:number <- subtract characters-slurped:number, 1:literal { reset-color?:boolean <- lesser-or-equal characters-slurped:number, 0:literal - break-unless reset-color?:boolean + break-unless reset-color?:boolean trace [app], [slurp-string: too many backspaces; returning] - reply result:address:buffer/same-as-ingredient:0, 0:literal, k:address:keyboard/same-as-ingredient:1, x:address:screen/same-as-ingredient:2 + reply result:address:buffer/same-as-ingredient:0, 0:literal, k:address:keyboard/same-as-ingredient:1, x:address:screen/same-as-ingredient:2 } - loop +next-character:label + loop +next-character:label } # otherwise increment characters-slurped:number <- add characters-slurped:number, 1:literal # done with this instruction? done?:boolean <- equal c:character, 93:literal/close-bracket - break-if done?:boolean - loop + break-if done?:boolean + loop } { - break-unless nested-string?:boolean + break-unless nested-string?:boolean # nested string? return like a normal recipe - reply result:address:buffer, characters-slurped:number, k:address:keyboard, x:address:screen + reply result:address:buffer, characters-slurped:number, k:address:keyboard, x:address:screen } # top-level string call? recurse trace [app], [slurp-string: close-bracket encountered; recursing to regular characters] result:address:buffer, k:address:keyboard, x:address:screen <- slurp-regular-characters result:address:buffer, k:address:keyboard, x:address:screen, complete:continuation # backspaced back into this string trace [app], [slurp-string: backspaced back into string; restarting] - jump +next-character:label + jump +next-character:label ] recipe slurp-assignment [ - default-space:address:array:location <- new location:type, 30:literal - result:address:buffer <- next-ingredient - k:address:keyboard <- next-ingredient - x:address:screen <- next-ingredient - complete:continuation <- next-ingredient + default-space:address:array:location <- new location:type, 30:literal + result:address:buffer <- next-ingredient + k:address:keyboard <- next-ingredient + x:address:screen <- next-ingredient + complete:continuation <- next-ingredient { - +next-character + +next-character # read character c:character, k:address:keyboard <- wait-for-key k:address:keyboard # quit? { ctrl-d?:boolean <- equal c:character, 4:literal/ctrl-d/eof - break-unless ctrl-d?:boolean + break-unless ctrl-d?:boolean trace [app], [slurp-assignment: ctrl-d] - reply 0:literal, k:address:keyboard/same-as-ingredient:1, x:address:screen/same-as-ingredient:2 + reply 0:literal, k:address:keyboard/same-as-ingredient:1, x:address:screen/same-as-ingredient:2 } { null?:boolean <- equal c:character, 0:literal/null - break-unless null?:boolean + break-unless null?:boolean trace [app], [slurp-assignment: null] - reply 0:literal, k:address:keyboard/same-as-ingredient:1, x:address:screen/same-as-ingredient:2 + reply 0:literal, k:address:keyboard/same-as-ingredient:1, x:address:screen/same-as-ingredient:2 } # print print-character x:address:screen, c:character, 1:literal/red @@ -408,16 +408,16 @@ body { font-family: monospace; color: #eeeeee; background-color: #080808; } # backspace? return { backspace?:boolean <- equal c:character, 8:literal/backspace - break-unless backspace?:boolean + break-unless backspace?:boolean trace [app], [slurp-assignment: backspace; returning] - reply result:address:buffer/same-as-ingredient:0, k:address:keyboard/same-as-ingredient:1, x:address:screen/same-as-ingredient:2 + reply result:address:buffer/same-as-ingredient:0, k:address:keyboard/same-as-ingredient:1, x:address:screen/same-as-ingredient:2 } } trace [app], [slurp-assignment: done, recursing to regular characters] result:address:buffer, k:address:keyboard, x:address:screen <- slurp-regular-characters result:address:buffer, k:address:keyboard, x:address:screen, complete:continuation # backspaced back into this string trace [app], [slurp-assignment: backspaced back into assignment; restarting] - jump +next-character:label + jump +next-character:label ] scenario read-instruction-color-comment [ -- cgit 1.4.1-2-gfad0