@@ -43,6 +43,13 @@ namespace microcode {
4343 progToStringRet = res . map ( ( ps , i ) => `Page ${ i + 1 } \n${ ps } ` ) . join ( "\n" )
4444 }
4545
46+ enum Phase {
47+ Sensor ,
48+ Filter ,
49+ Actuator ,
50+ Modifier ,
51+ }
52+
4653 export let parseProgRet : ProgramDefn = undefined
4754 //% shim=TD_NOOP
4855 export function parseProg ( str : string ) : void {
@@ -57,13 +64,19 @@ namespace microcode {
5764 return tid
5865 }
5966 }
60- const addTile = ( rule : RuleDefn , tile : Tile ) => {
67+ let phase : Phase = Phase . Sensor
68+ const addTile = ( rule : RuleDefn , tile : Tile , phase : Phase ) => {
6169 control . assert ( rule != undefined , `No Rule definition` )
62- const tid = getTid ( tile )
63- if ( isSensor ( tid ) ) rule . push ( tile , "sensors" , false )
64- else if ( isFilter ( tid ) ) rule . push ( tile , "filters" , false )
65- else if ( isModifier ( tid ) ) rule . push ( tile , "modifiers" , false )
66- else rule . push ( tile , "actuators" , false )
70+ if ( phase == Phase . Sensor ) {
71+ rule . push ( tile , "sensors" , false )
72+ phase = Phase . Filter
73+ } else if ( phase == Phase . Filter ) rule . push ( tile , "filters" , false )
74+ else if ( phase == Phase . Modifier )
75+ rule . push ( tile , "modifiers" , false )
76+ else {
77+ rule . push ( tile , "actuators" , false )
78+ phase = Phase . Modifier
79+ }
6780 }
6881 // tokenizer
6982 let cursor = 0
@@ -132,11 +145,13 @@ namespace microcode {
132145 control . assert ( currPage != undefined , `No Page defined` )
133146 if ( currRule ) currPage . rules . push ( currRule )
134147 currRule = new RuleDefn ( )
148+ phase = Phase . Sensor
135149 } else if ( tok == "Do" ) {
136150 control . assert ( currRule != undefined , `No When defined` )
151+ phase = Phase . Actuator
137152 } else {
138153 currTile = token2tile ( tok )
139- addTile ( currRule , currTile )
154+ addTile ( currRule , currTile , phase )
140155 }
141156 }
142157 if ( currRule ) currPage . rules . push ( currRule )
0 commit comments