|================================| |==| Constants. |==| |================================| |-----------------------| | r0 <- 0, r0 | r0 <- 0 , | r0 <- 0 | , |-----------------------| |-----------------------| | r1 <- 0, r1 | r1 <- 0 , | r1 <- 0 | , |-----------------------| |-------------------------------| | r1 <- 1 | r1 , | r1 <- 2 | r1 <- 1, r1 <- 1 , | r1 <- 4 | r1 <- 2, r1 <- 2 , | r1 <- 8 | r1 <- 4, r1 <- 4 , | r1 <- 9 | r1 <- 8, r1 <- 1 , | r1 <- 10 | r1 <- 9, r1 <- 1 , | r1 <- 16 | r1 <- 8, r1 <- 8 , | r1 <- 32 | r1 <- 16, r1 <- 16 , | r1 <- 40 | r1 <- 32, r1 <- 8 , | r1 <- 44 | r1 <- 40, r1 <- 4 , |-------------------------------| |===============================| |==| Movement. |==| |===============================| |-----------------------------| | r2 <- r0, r0 | r2, r2 <- r0 , | r2 <- r0 | , |-----------------------------| |--------------------------------| | r1 = r2, r2 | r1, r2*, r1 = r2 , | r1 = r2 | r2 <- r2* , |--------------------------------| |--------------------------------| | r0 <- r0*, r0* | r0, r0 <- r0* , | r0 <- r0* | , |--------------------------------| |--------------------------------| | r2 <- r2*, r2* | r2, r2 <- r2* , | r2 <- r2* | , |--------------------------------| |============================| |==| Input. |==| |============================| |----------------------------------------------| | go to the next character | @io-read , , , r0 <- 0 , , , r0 <- @io-read-in , |----------------------------------------------| |--------------------------------------------------------| | r0 <- @io-read-in, @io-read-in | r0, r0 <- @io-read-in , | r0 <- @io-read-in | , |--------------------------------------------------------| |--------------------| | @io-read-end | EOF , |--------------------| |===============================| |==| Equality. |==| |===============================| |-----------------------------------------| | r0 == r1?, r0, r1 | r0*, r0 == r1? , |-----------------------------------------| | r0 == r1?, r1 | r0 <- r0* , , , r1 <- 0 , , , r0 != r1 , |-----------------------------------------| | r0 == r1?, r0 | r0 , , , r0 <- r0* , , , r0 != r1 , |-----------------------------------------| | r0 == r1? | r0 <- r0* , , , r0 == r1 , |-----------------------------------------| |--------------------------------| | r0 <- r0*, r0* | r0, r0 <- r0* , | r0 <- r0* | , |--------------------------------| |--------------------------------| | r2 <- r2*, r2* | r2, r2 <- r2* , | r2 <- r2* | , |--------------------------------| |==========================================| |==| Whitespace handling. |==| |==========================================| |------------------------------| | space?, r0 != r1 | ~space , | space?, r0 == r1 | space , |------------------------------| | space? | r1 <- 32 , , , r0 == r1? , , , space? , |------------------------------| |----------------------------| | tab?, r0 != r1 | ~tab , | tab?, r0 == r1 | tab , |----------------------------| | tab? | r1 <- 9 , , , r0 == r1? , , , tab? , |----------------------------| |--------------------------------| | newline?, r0 != r1 | ~newline , | newline?, r0 == r1 | newline , |--------------------------------| | newline? | r1 <- 10 , , , r0 == r1? , , , newline? , |--------------------------------| |---------------------------------------------------| | whitespace?, space | whitespace , | whitespace?, tab | whitespace , | whitespace?, newline | whitespace , | whitespace?, ~space, ~tab, ~newline | ~whitespace , |---------------------------------------------------| | whitespace? | space? , , , tab? , , , newline? , , , whitespace? , |---------------------------------------------------| |-----------------------------------| | whitespace, ~space | whitespace , | whitespace, ~tab | whitespace , | whitespace, ~newline | whitespace , |-----------------------------------| |------------------------------------------| | delimiter?, r0 == r1 | delimiter , | delimiter?, r0 != r1 | ~delimiter , |------------------------------------------| | delimiter? | r1 = r2 , , , r0 == r1? , , , delimiter? , |------------------------------------------| |------------------------------| | comma?, r0 != r1 | ~comma , | comma?, r0 == r1 | comma , |------------------------------| | comma? | r1 <- 44 , , , r0 == r1? , , , comma? , |------------------------------| |------------------------------------------------------------------------------------------------| | go to the next non-whitespace character, whitespace | go to the next non-whitespace character , | go to the next non-whitespace character, ~whitespace | , |------------------------------------------------------------------------------------------------| | go to the next non-whitespace character | go to the next character , , , whitespace? , , , go to the next non-whitespace character , |------------------------------------------------------------------------------------------------| |===================================| |==| Main program. |==| |===================================| |-------------------------------------------------| || start, left , |-------------------------------------------------| | start | go to the next non-whitespace character , , , store delimiter , , , parse , |-------------------------------------------------| |-----------------------------------------------------------| | store delimiter | r2 <- r0 , , , go to the next non-whitespace character , |-----------------------------------------------------------| |-------------------------------------------------------------| | parse, EOF | append token to side, stop , |-------------------------------------------------------------| | parse, delimiter | append token to side , , , switch sides , , , go to the next non-whitespace character , , , parse , |-------------------------------------------------------------| | parse, ~delimiter | comma? , , , parse , |-------------------------------------------------------------| | parse, comma | append token to side , , , go to the next non-whitespace character , , , parse , |-------------------------------------------------------------| | parse, ~comma | append character to token , , , go to the next non-whitespace character , , , parse , |-------------------------------------------------------------| | parse | delimiter?, , , parse , |-------------------------------------------------------------|