SDCL, part 03/03

1 view
Skip to first unread message

mun...@dmc.com

unread,
Jun 7, 1995, 3:00:00 AM6/7/95
to
Submitted-by: mun...@dmc.com
Posting-number: Volume 7, Issue 57
Archive-name: sdcl/part03

-+-+-+-+-+-+-+-+ 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: mun...@acornsw.com
Acorn Software, Inc.
267 Cox St. Office: (508) 568-1618 x16
Hudson, Ma. 01749 USA FAX: (508) 562-1133
--
Dick Munroe Internet: mun...@acornsw.com
Acorn Software, Inc.
267 Cox St. Office: (508) 568-1618 x16
Hudson, Ma. 01749 USA FAX: (508) 562-1133

Reply all
Reply to author
Forward
0 new messages