-+-+-+-+-+-+-+-+ START OF PART 3 -+-+-+-+-+-+-+-+ X`09`20*`09Finish`20this`20line`20by`20then`20appending`20a`20newline`20charact Ver. X`09`20* X`09`20*`09This`20label`20will`20be`20the`20destination`20for`20any`20next`20st Vatements. X`09`20*/ X`09emitstring("$`20"); X`09emitlabel(lab2); X`09if`20(rstring`5B0`5D) X`09`09emitstring(rstring); X`09emitstring("`5Cn"); X`09/* X`09`20*`09Build`20the`20statement`20to`20transfer`20back`20to`20the`20beginnin Vg X`09`20*`09of`20the`20conditional`20test,`20output`20it,`20then`20insert`20the V X`09`20*`09target`20label`20for`20when`20the`20condition`20fails.`20`20This`20l Vast`20target X`09`20* X`09`20*/ X`09emitstring("$`20goto`20"); X`09emittarget(lab1); X`09emitstring("`5Cn"); X`09emitstring("$`20"); X`09emitlabel(lab3); X`09emitstring("`5Cn"); X X`09pop(`26looptype,`20`26lab1); X`20`20`20`20`7D X Xvoid`20initialize(beginning) X/* X`20*`09Parses`20the`20initialization`20section`20of`20a`20for`20statement.`20 V`20All X`20*`09that`20is`20necessary`20is`20to`20scan`20until`20a`20SEMICOLON`20is`20f Vound. X`20* X`20*`09While`20parsing`20pass`20on`20any`20non-SEMICOLON`20tokens`20to`20the X`20*`09output`20stream.`20`20After`20a`20SEMICOLON`20has`20been`20found`20flus Vh X`20*`09the`20output`20buffer`20by`20appending`20a`20newline`20character`20to X`20*`09the`20output`20stream. X`20*/ X`20`20`20`20`7B X`09if`20(beginning)`20emitstring("$`20"); X`09while`20(tokencode`20!=`20SEMICOLON`20`26`26`20tokencode`20!=`20FILEEND`20) V`20`7B X`09`09emitstring(token); X`09`09tokencode`20=`20lex(token); X`09`7D X`09emitstring("`5Cn"); X`20`20`20`20`7D X Xvoid`20reinitialize(str) X`20`20`20`20char`20*str; X/* X`20*`09Parses`20the`20reinitialization`20section`20of`20a`20for`20statement. V`20`20All X`20*`09that`20is`20necessary`20is`20to`20scan`20until`20the`20last`20CPAREN`20 Vis`20found. X`20*`09For`20the`20code`20generation`20all`20tokens`20must`20be`20saved`20in V`20the X`20*`09input`20character`20string,`20str.`20`20So`20for`20each`20token`20found V,`20add X`20*`09it`20to`20str. X`20*/ X`20`20`20`20`7B X`09short`20i`20=`200,`20j,`20paren_count`20=`200`20; X X`09/* X`09**`20Make`20sure`20that`20a`20`5Bpotential`5D`20opening`20parenthesis`20is V`20counted. X`09*/ X X`09if`20(tokencode`20==`20OPAREN) X`09`09paren_count++`20; X X`09/* X`09**`20This`20loop`20termiates`20when`20either`20the`20end`20of`20file`20is V`20hit`20or X`09**`20the`20first`20unbalanced`20closing`20parenthesis`20is`20hit.`20`20This V`20makes`20sure X`09**`20that`20things`20like`20lexical`20function`20calls`20get`20correctly`20 Vprocessed, X`09**`20e.g.: X`09** X`09**`09for`20(`20;`20;`20foo`20=`20f$search(file,1))`20`7B`7D X`09** X`09**`20in`20the`20increment. X`09*/ X X`09while`20(((tokencode`20!=`20CPAREN)`20`7C`7C`20(paren_count`20>=`200))`20 V`26`26`20 X`09`20`20`20`20`20`20`20(tokencode`20!=`20FILEEND))`20`7B X`09`09j`20=`200; X`09`09/*`20Move`20all`20of`20token,`20except`20for`20the`20NULL,`20into`20str. V`20*/ X`09`09while(`20token`5Bj`5D`20) X`09`09`09str`5Bi++`5D`20=`20token`5Bj++`5D; X X`09`09tokencode`20=`20lex(token); X X`09`09switch`20(tokencode) X`09`09`7B X`09`09`09case`20OPAREN`09:`20paren_count++`20; X`09`09`09`09`09`20`20break`20; X X`09`09`09case`20CPAREN`09:`20paren_count--`20; X`09`09`09`09`09`20`20break`20; X X`09`09`09default`09`09:`20break`20; X`09`09`7D`20; X`09`7D X`09/*`20When`20done`20append`20a`20NULL`20to`20str.`20*/ X`09str`5Bi`5D`20=`20'`5C0'; X`20`20`20`20`7D X Xvoid`20popBreakNext() X`7B X`20`20`20`20int`20looptype,`20label`20; X`20`20`20`20if`20(peek(`26looptype,`20`26label)`20) X`20`20`20`20`7B X`09if`20((looptype`20==`20FOR)`20`7C`7C`20(looptype`20==`20DO)) X`09`7B X`09`20`20`20`20emitstring("$`20$BREAK`20=`20`5C"")`20; X`09`20`20`20`20emittarget(label`20+`202)`20; X`09`20`20`20`20emitstring("`5C"`5Cn")`20; X X`09`20`20`20`20emitstring("$`20$NEXT`20=`20`5C"")`20; X`09`20`20`20`20emittarget(label`20+`201)`20; X`09`20`20`20`20emitstring("`5C"`5Cn")`20; X`09`7D X`09else`20if`20(looptype`20==`20WHILE) X`09`7B X`09`20`20`20`20emitstring("$`20$BREAK`20=`20`5C"")`20; X`09`20`20`20`20emittarget(label`20+`201)`20; X`09`20`20`20`20emitstring("`5C"`5Cn")`20; X X`09`20`20`20`20emitstring("$`20$NEXT`20=`20`5C"")`20; X`09`20`20`20`20emittarget(label)`20; X`09`20`20`20`20emitstring("`5C"`5Cn")`20; X`09`7D X`20`20`20`20`7D X`7D $ call unpack [.REF-LIB]STMT.C;13 235167975 "" 51 12 13 $! $ create 'f' X X/* X`20*`09The`20nextstate`20and`20output`20tables`20for`20the`20DFA`20scanner`20a Vre`20 X`20*`09declared`20and`20initialized`20in`20this`20file.`20`20This`20file X`20*`09is`20used`20exclusively`20by`20scan_lex.c`20and`20hence`20is X`20*`09only`20included`20by`20that`20C`20source`20file.`20`20I`20have`20includ Ved X`20*`09descriptions`20of`20the`20state`20that`20each`20row`20of`20the`202-D`20 Varray X`20*`09corresponds`20to.`20`20`20The`20columns`20correspond`20to`20the`20follo Vwing X`20*`09character`20classes: X`20* X`20*`20`20`20`20`20`20`20`20L`20`20`20D`20`20`20O`20`20`20S`20`20`20S`20`20`20 VW`20`20`20E`20`20`20D`20`20`20E`20`20`20E`20`20`20S X`20*`20`20`20`20`20`20`20`20E`20`20`20I`20`20`20N`20`20`20L`20`20`20T`20`20`20 VH`20`20`20O`20`20`20Q`20`20`20N`20`20`20R`20`20`20U X`20*`20`20`20`20`20`20`20`20T`20`20`20G`20`20`20E`20`20`20A`20`20`20A`20`20`20 VI`20`20`20L`20`20`20U`20`20`20D`20`20`20R`20`20`20B X`20*`20`20`20`20`20`20`20`20T`20`20`20I`20`20`20C`20`20`20S`20`20`20R`20`20`20 VT`20`20`20`20`20`20`20O`20`20`20F`20`20`20`20`20`20`20S X`20*`20`20`20`20`20`20`20`20E`20`20`20T`20`20`20H`20`20`20H`20`20`20`20`20`20 V`20E`20`20`20`20`20`20`20T`20`20`20I`20`20`20`20`20`20`20T X`20*`20`20`20`20`20`20`20`20R`20`20`20`20`20`20`20A`20`20`20`20`20`20`20`20`20 V`20`20S`20`20`20`20`20`20`20E`20`20`20L`20`20`20`20`20`20`20I X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20R`20`20`20`20`20`20`20`20 V`20`20`20P`20`20`20`20`20`20`20`20`20`20`20E`20`20`20`20`20`20`20T X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20A`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20U X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20C`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20T X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20E`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20E X`20* X`20*/ X Xstatic`20char`20nextstate`5B`5D`5B11`5D`20=`20`7B X`09/*`20state`200,`20START`20STATE`20*/ X`09`7B`201,`20`202,`20`203,`20`204,`20`203,`20`208,`20`209,`2011,`2010,`2013, V`2016`7D, X X`09/*`20state`201,`20ID`20*/ X`09`7B`201,`20`201,`20`203,`20`204,`20`203,`20`208,`20`209,`2011,`2010,`2013, V`2016`7D, X X`09/*`20state`202,`20INTEGER`20*/ X`09`7B`201,`20`202,`20`203,`20`204,`20`203,`20`208,`20`209,`2011,`2010,`2013, V`2016`7D, X X`09/*`20state`203,`20SingleChar`20*/ X`09`7B`201,`20`202,`20`203,`20`204,`20`203,`20`208,`20`209,`2011,`2010,`2013, V`2016`7D, X X`09/*`20state`204,`20Comment`20*/ X`09`7B`201,`20`202,`20`203,`20`204,`20`205,`20`208,`20`209,`2011,`2010,`2013, V`203`7D, X X`09/*`20state`205,`20Comment`20*/ X`09`7B`205,`20`205,`20`205,`20`205,`20`206,`20`205,`20`205,`20`205,`2013,`20 V`205,`205`7D, X X`09/*`20state`206,`20Comment`20*/ X`09`7B`205,`20`205,`20`205,`20`207,`20`206,`20`205,`20`205,`20`205,`2013,`20 V`205,`205`7D, X X`09/*`20state`207,`20Comment`20*/ X`09`7B`201,`20`202,`20`203,`20`204,`20`203,`20`208,`20`209,`2011,`2010,`2013, V`2016`7D, X X`09/*`20state`208,`20WhiteSpace`20*/ X`09`7B`201,`20`202,`20`203,`20`204,`20`203,`20`208,`20`209,`2011,`2010,`2013, V`2016`7D, X X`09/*`20state`209,`20Newline`20*/ X`09`7B`201,`20`202,`20`203,`20`204,`20`203,`20`208,`20`209,`2011,`2010,`2013, V`2016`7D, X X`09/*`20state`20`2010,`20EOF`20*/ X`09`7B10,`2010,`2010,`2010,`2010,`2010,`2010,`2010,`2010,`2010,`2010`7D, X X`09/*`20state`2011,`20String`20*/ X`09`7B11,`2011,`2011,`2011,`2011,`2011,`2013,`2012,`2013,`2013,`2014`7D, X X`09/*`20state`2012,`20String`20*/ X`09`7B`201,`20`202,`20`203,`20`204,`20`203,`20`208,`20`209,`2011,`2010,`2013, V`20`203`7D, X X`09/*`20state`2013,`20ERROR`20*/ X`09`7B`201,`20`202,`20`203,`20`204,`20`203,`20`208,`20`209,`2011,`2010,`2013, V`20`203`7D, X X`09/*`20state`2014,`20One`20'`20in`20quoted`20string`20*/ X`09`7B11,`2011,`2011,`2011,`2011,`2011,`2013,`2012,`2013,`2013,`2015`7D, X X`09/*`20state`2015,`20Two`20's`20in`20quoted`20string`20*/ X`09`7B15,`2015,`2015,`2015,`2015,`2015,`2013,`2015,`2013,`2013,`2011`7D, X X`09/*`20state`2016,`20One`20's`20outside`20of`20quoted`20string`20*/ X`09`7B17,`2017,`20`203,`20`204,`20`203,`20`208,`20`209,`2011,`2010,`2013,`2016 V`7D, X X`09/*`20state`2017,`20Inside`20a`20's`20outside`20of`20quoted`20string`20*/ X`09`7B17,`2017,`20`203,`20`204,`20`203,`20`208,`20`209,`2011,`2010,`2013,`20 V`2018`7D, X X`09/*`20state`2018,`20Terminal`20'`20*/ X`09`7B`201,`20`202,`20`203,`20`204,`20`203,`20`208,`20`209,`2011,`2010,`2013, V`203`7D, X`7D; X X X/* X`20* X`20*`20`20`20`20`20`20`20`20L`20`20`20D`20`20`20O`20`20`20S`20`20`20S`20`20`20 VW`20`20`20E`20`20`20D`20`20`20E`20`20`20E`20`20`20S X`20*`20`20`20`20`20`20`20`20E`20`20`20I`20`20`20N`20`20`20L`20`20`20T`20`20`20 VH`20`20`20O`20`20`20Q`20`20`20N`20`20`20R`20`20`20U X`20*`20`20`20`20`20`20`20`20T`20`20`20G`20`20`20E`20`20`20A`20`20`20A`20`20`20 VI`20`20`20L`20`20`20U`20`20`20D`20`20`20R`20`20`20B X`20*`20`20`20`20`20`20`20`20T`20`20`20I`20`20`20C`20`20`20S`20`20`20R`20`20`20 VT`20`20`20`20`20`20`20O`20`20`20F`20`20`20`20`20`20`20S X`20*`20`20`20`20`20`20`20`20E`20`20`20T`20`20`20H`20`20`20H`20`20`20`20`20`20 V`20E`20`20`20`20`20`20`20T`20`20`20I`20`20`20`20`20`20`20T X`20*`20`20`20`20`20`20`20`20R`20`20`20`20`20`20`20A`20`20`20`20`20`20`20`20`20 V`20`20S`20`20`20`20`20`20`20E`20`20`20L`20`20`20`20`20`20`20I X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20R`20`20`20`20`20`20`20`20 V`20`20`20P`20`20`20`20`20`20`20`20`20`20`20E`20`20`20`20`20`20`20T X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20A`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20U X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20C`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20T X`20*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20E`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20E X`20* X`20*/ X Xstatic`20char`20output`5B`5D`5B11`5D`20=`20`7B X`09/*`20state`200,`20START`20STATE`20*/ X`09`7B`200,`20`200,`20`200,`20`200,`20`200,`20`200,`20`200,`20`200,`2015,`20 V`200,`20`200`7D, X X`09/*`20state`201,`20ID`20*/ X`09`7B`200,`20`200,`20`206,`20`206,`20`206,`20`206,`20`206,`20`206,`20`206,`20 V`206,`20`206`7D, X X`09/*`20state`202,`20INTEGER`20*/ X`09`7B18,`20`200,`2018,`2018,`2018,`2018,`2018,`2018,`2018,`2018,`2018`7D, X X`09/*`20state`203,`20SingleChar`20*/ X`09`7B11,`2011,`2011,`2011,`2011,`2011,`2011,`2011,`2011,`2011,`2011`7D, X X`09/*`20state`204,`20Comment`20*/ X`09`7B11,`2011,`2011,`2011,`20`200,`2011,`2011,`2011,`20`200,`2011,`2011`7D, X X`09/*`20state`205,`20Comment`20*/ X`09`7B`200,`20`200,`20`200,`20`200,`20`200,`20`200,`20`200,`20`200,`20`200,`20 V`200,`20`200`7D, X X`09/*`20state`206,`20Comment`20*/ X`09`7B`200,`20`200,`20`200,`20`200,`20`200,`20`200,`20`200,`20`200,`20`200,`20 V`200,`20`200`7D, X X`09/*`20state`207,`20Comment`20*/ X`09`7B12,`2012,`2012,`2012,`2012,`2012,`2012,`2012,`2012,`2012,`2012`7D, X X`09/*`20state`208,`20WhiteSpace`20*/ X`09`7B13,`2013,`2013,`2013,`2013,`20`200,`2013,`2013,`2013,`2013,`2013`7D, X X`09/*`20state`209,`20Newline`20*/ X`09`7B14,`2014,`2014,`2014,`2014,`2014,`2014,`2014,`2014,`2014,`2014`7D, X X`09/*`20state`20`2010,`20EOF`20*/ X`09`7B15,`2015,`2015,`2015,`2015,`2015,`2015,`2015,`2015,`2015,`2015`7D, X X`09/*`20state`2011,`20String`20*/ X`09`7B`200,`20`200,`20`200,`20`200,`20`200,`20`200,`20`200,`20`200,`20`200,`20 V`200,`20`200`7D, X X`09/*`20state`2012,`20String`20*/ X`09`7B16,`2016,`2016,`2016,`2016,`2016,`2016,`20`200,`2016,`2016,`2016`7D, X X`09/*`20state`2013,`20ERROR`20*/ X`09`7B17,`2017,`2017,`2017,`2017,`2017,`2017,`2017,`2017,`2017,`2017`7D, X X`09/*`20state`2014,`20One`20'`20in`20quoted`20string`20*/ X`09`7B`200,`20`200,`20`200,`20`200,`20`200,`20`200,`20`200,`20`200,`20`200,`20 V`200,`20`200`7D, X X`09/*`20state`2015,`20Two`20's`20in`20quoted`20string`20*/ X`09`7B`200,`20`200,`20`200,`20`200,`20`200,`20`200,`20`200,`20`200,`20`200,`20 V`200,`20`200`7D, X X`09/*`20state`2016,`20One`20's`20outside`20quoted`20string`20*/ X`09`7B`200,`20`200,`2039,`2039,`2039,`2039,`2039,`2039,`2039,`2039,`20`200`7D, V X X`09/*`20state`2017,`20Inside`20a`20's`20outside`20quoted`20string`20*/ X`09`7B`200,`20`200,`2039,`2039,`2039,`2039,`2039,`2039,`2039,`2039,`20`200`7D, V X X`09/*`20state`2018,`20terminal`20'`20*/ X`09`7B39,`2039,`2039,`2039,`2039,`2039,`2039,`2039,`2039,`2039,`2039`7D X`20`20`20`20`7D; $ call unpack [.REF-LIB]TCODES.H;5 1476609848 "" 10 13 13 $ v=f$verify(v) $ exit -- Dick Munroe Internet: munroe@acornsw.com Acorn Software, Inc. 267 Cox St. Office: (508) 568-1618 x16 Hudson, Ma. 01749 USA FAX: (508) 562-1133 -- Dick Munroe Internet: munroe@acornsw.com Acorn Software, Inc. 267 Cox St. Office: (508) 568-1618 x16 Hudson, Ma. 01749 USA FAX: (508) 562-1133