//SMALLTALK -------------------------> #( (ScannerReadaheadTable 1 ((256) 'L' 5) ('ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz' 'RK' 3) (')' 'RK' 7) ('*' 'RK' 8) ('+' 'RK' 9) (',' 'RK' 10) ('-' 'RK' 11) ('(' 'RK' 6) ('/' 'RK' 12) ('0123456789' 'RK' 2) ((9 10 12 13) 'R' 4) (' ' 'R' 4) (';' 'RK' 14) ('=' 'RK' 15)) (ScannerReadaheadTable 2 ((9 10 12 13 256) 'L' 13) ('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_+-*/=[]{}()^;#:.$''" ' 'L' 13) ('0123456789' 'RK' 2)) (ScannerReadaheadTable 3 ((9 10 12 13 256) 'L' 16) ('+-*/=[]{}()^;#:.$''" ' 'L' 16) ('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz' 'RK' 3)) (ScannerReadaheadTable 4 ((256) 'L' 1) ('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_0123456789+-*/=[]{}()^;#:.$''"' 'L' 1) ((9 10 12 13) 'R' 4) (' ' 'R' 4)) (SemanticTable 5 buildToken: '-|' 1) (SemanticTable 6 buildToken: '(' 1) (SemanticTable 7 buildToken: ')' 1) (SemanticTable 8 buildToken: '*' 1) (SemanticTable 9 buildToken: '+' 1) (SemanticTable 10 buildToken: ',' 1) (SemanticTable 11 buildToken: '-' 1) (SemanticTable 12 buildToken: '/' 1) (SemanticTable 13 buildToken: Integer 1) (SemanticTable 14 buildToken: ';' 1) (SemanticTable 15 buildToken: '=' 1) (SemanticTable 16 buildToken: Identifier 1)) //RUBY -----------------------------------> [ [:ScannerReadaheadTable, 1, [[256], 'L', 5], ['ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz', 'RK', 3], [')', 'RK', 7], ['*', 'RK', 8], ['+', 'RK', 9], [',', 'RK', 10], ['-', 'RK', 11], ['(', 'RK', 6], ['/', 'RK', 12], ['0123456789', 'RK', 2], [[9, 10, 12, 13], 'R', 4], [' ', 'R', 4], [';', 'RK', 14], ['=', 'RK', 15]], [:ScannerReadaheadTable, 2, [[9, 10, 12, 13, 256], 'L', 13], ['ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_+-*/=[]{}()^;#:.$\'" ', 'L', 13], ['0123456789', 'RK', 2]], [:ScannerReadaheadTable, 3, [[9, 10, 12, 13, 256], 'L', 16], ['+-*/=[]{}()^;#:.$\'" ', 'L', 16], ['0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz', 'RK', 3]], [:ScannerReadaheadTable, 4, [[256], 'L', 1], ['ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_0123456789+-*/=[]{}()^;#:.$\'"', 'L', 1], [[9, 10, 12, 13], 'R', 4], [' ', 'R', 4]], [:SemanticTable, 5, :buildToken, '-|', 1], [:SemanticTable, 6, :buildToken, '(', 1], [:SemanticTable, 7, :buildToken, ')', 1], [:SemanticTable, 8, :buildToken, '*', 1], [:SemanticTable, 9, :buildToken, '+', 1], [:SemanticTable, 10, :buildToken, ',', 1], [:SemanticTable, 11, :buildToken, '-', 1], [:SemanticTable, 12, :buildToken, '/', 1], [:SemanticTable, 13, :buildToken, :Integer, 1], [:SemanticTable, 14, :buildToken, ';', 1], [:SemanticTable, 15, :buildToken, '=', 1], [:SemanticTable, 16, :buildToken, :Identifier, 1]] //C++: ONE EXPRESSION VERSION ----------------------> //For scanningTables.h //NOTE: Strings are not allocated with new since they exist globally as part of the compiled code. struct RawScannerReadaheadTriple {const char *string; const char *attributes; long gotoTableNumber;}; //Note: string == NULL is equivalent to "{256}" (end of file). struct RawScannerReadaheadTable {const char *name; long stateNumber; long size; RawScannerReadaheadTriple **triples;}; struct RawSemanticTable {const char *name; long stateNumber; const char *action; long size; const char **parameters; long gotoTableNumber;}; struct ScannerTables { long scannerReadaheadTablesSize; RawScannerReadaheadTable **scannerReadaheadTables; long semanticTablesSize; RawSemanticTable **semanticTables; }; ScannerTables *scannerTables(); void deleteScannerTables(ScannerTables *scannerTable); //For scanningTables.cpp ScannerTables *scannerTables () { return new ScannerTables { 4, new RawScannerReadaheadTable* [4] { new RawScannerReadaheadTable {"ScannerReadaheadTable", 0, 14, new RawScannerReadaheadTriple* [14] { new RawScannerReadaheadTriple {NULL, "L", 4}, new RawScannerReadaheadTriple {"ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz", "RK", 2}, new RawScannerReadaheadTriple {")", "RK", 6}, new RawScannerReadaheadTriple {"*", "RK", 7}, new RawScannerReadaheadTriple {"+", "RK", 8}, new RawScannerReadaheadTriple {",", "RK", 9}, new RawScannerReadaheadTriple {"-", "RK", 10}, new RawScannerReadaheadTriple {"(", "RK", 5}, new RawScannerReadaheadTriple {"/", "RK", 11}, new RawScannerReadaheadTriple {"0123456789", "RK", 1}, new RawScannerReadaheadTriple {"\011\012\014\015", "R", 3}, new RawScannerReadaheadTriple {" ", "R", 3}, new RawScannerReadaheadTriple {";", "RK", 13}, new RawScannerReadaheadTriple {"=", "RK", 14}}}, new RawScannerReadaheadTable {"ScannerReadaheadTable", 1, 4, new RawScannerReadaheadTriple* [4] { new RawScannerReadaheadTriple {"\011\012\014\015", "L", 12}, new RawScannerReadaheadTriple {NULL, "L", 12}, new RawScannerReadaheadTriple {"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_+-*/=[]{}()^;#:.$'\" ", "L", 12}, new RawScannerReadaheadTriple {"0123456789", "RK", 1}}}, new RawScannerReadaheadTable {"ScannerReadaheadTable", 2, 4, new RawScannerReadaheadTriple* [4] { new RawScannerReadaheadTriple {"\011\012\014\015", "L", 15}, new RawScannerReadaheadTriple {NULL, "L", 15}, new RawScannerReadaheadTriple {"+-*/=[]{}()^;#:.$'\" ", "L", 15}, new RawScannerReadaheadTriple {"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz", "RK", 2}}}, new RawScannerReadaheadTable {"ScannerReadaheadTable", 3, 4, new RawScannerReadaheadTriple* [4] { new RawScannerReadaheadTriple {NULL, "L", 0}, new RawScannerReadaheadTriple {"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_0123456789+-*/=[]{}()^;#:.$'\"", "L", 0}, new RawScannerReadaheadTriple {"\011\012\014\015", "R", 3}, new RawScannerReadaheadTriple {" ", "R", 3}}}}, 12, new RawSemanticTable* [12] { new RawSemanticTable {"SemanticTable", 4, "buildToken", 1, new const char * [1] {"-|"}, 0}, new RawSemanticTable {"SemanticTable", 5, "buildToken", 1, new const char * [1] {"("}, 0}, new RawSemanticTable {"SemanticTable", 6, "buildToken", 1, new const char * [1] {")"}, 0}, new RawSemanticTable {"SemanticTable", 7, "buildToken", 1, new const char * [1] {"*"}, 0}, new RawSemanticTable {"SemanticTable", 8, "buildToken", 1, new const char * [1] {"+"}, 0}, new RawSemanticTable {"SemanticTable", 9, "buildToken", 1, new const char * [1] {","}, 0}, new RawSemanticTable {"SemanticTable", 10, "buildToken", 1, new const char * [1] {"-"}, 0}, new RawSemanticTable {"SemanticTable", 11, "buildToken", 1, new const char * [1] {"/"}, 0}, new RawSemanticTable {"SemanticTable", 12, "buildToken", 1, new const char * [1] {"Integer"}, 0}, new RawSemanticTable {"SemanticTable", 13, "buildToken", 1, new const char * [1] {";"}, 0}, new RawSemanticTable {"SemanticTable", 14, "buildToken", 1, new const char * [1] {"="}, 0}, new RawSemanticTable {"SemanticTable", 15, "buildToken", 1, new const char * [1] {"Identifier"}, 0}}}; }; void deleteScannerTables (ScannerTables *scannerTable) { for (long index0 = 0; index0 < scannerTable->scannerReadaheadTablesSize; index0++) { for (long index1 = 0; index1< scannerTable->scannerReadaheadTables [index0]->size; index1++) { delete scannerTable->scannerReadaheadTables [index0]->triples [index1]; } delete [] scannerTable->scannerReadaheadTables [index0]->triples; delete scannerTable->scannerReadaheadTables [index0]; } delete [] scannerTable->scannerReadaheadTables; for (long index = 0; index < scannerTable->semanticTablesSize; index++) { delete [] scannerTable->semanticTables [index]->parameters; delete scannerTable->semanticTables [index]; } delete [] scannerTable->semanticTables; delete scannerTable; } //C++: MULTI-STATEMENT VERSION ----------------------> //NOTE: The following declarations should probably be moved manually to a more global location for access elsewhere... //NOTE: Strings are not allocated with new since they exist globally as part of the compiled code. struct RawScannerReadaheadTriple {const char *string; const char *attributes; long gotoTableNumber;}; //Note: string == NULL is equivalent to "{256}" (end of file). struct RawScannerReadaheadTable {const char *name; long stateNumber; long size; RawScannerReadaheadTriple *triples;}; struct RawSemanticTable {const char *name; long stateNumber; const char *action; long size; const char **parameters; long gotoTableNumber;}; struct ScannerTables { long scannerReadaheadTablesSize; RawScannerReadaheadTable *scannerReadaheadTables; long semanticTablesSize; RawSemanticTable *semanticTables; }; ScannerTables *scannerTables () { //Define VARIABLES to refer to scanner readahead table TRIPLEs. //FORMAT: RawScannerReadaheadTriple {const char *string; const char *attributes; long gotoTableNumber;} //Note: string == NULL is equivalent to "{256}" (end of file). RawScannerReadaheadTriple *t0 = new RawScannerReadaheadTriple [14] {{NULL, "L", 4}, {"ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz", "RK", 2}, {")", "RK", 6}, {"*", "RK", 7}, {"+", "RK", 8}, {",", "RK", 9}, {"-", "RK", 10}, {"(", "RK", 5}, {"/", "RK", 11}, {"0123456789", "RK", 1}, {"\011\012\014\015", "R", 3}, {" ", "R", 3}, {";", "RK", 13}, {"=", "RK", 14}}; RawScannerReadaheadTriple *t1 = new RawScannerReadaheadTriple [4] {{"\011\012\014\015", "L", 12}, {NULL, "L", 12}, {"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_+-*/=[]{}()^;#:.$'\" ", "L", 12}, {"0123456789", "RK", 1}}; RawScannerReadaheadTriple *t2 = new RawScannerReadaheadTriple [4] {{"\011\012\014\015", "L", 15}, {NULL, "L", 15}, {"+-*/=[]{}()^;#:.$'\" ", "L", 15}, {"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz", "RK", 2}}; RawScannerReadaheadTriple *t3 = new RawScannerReadaheadTriple [4] {{NULL, "L", 0}, {"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_0123456789+-*/=[]{}()^;#:.$'\"", "L", 0}, {"\011\012\014\015", "R", 3}, {" ", "R", 3}}; //Define an array of scanner readahead tables. //FORMAT: RawScannerReadaheadTable {const char *name; long stateNumber; long size; RawScannerReadaheadTriple *triples;} RawScannerReadaheadTable *scannerReadaheadTables = new RawScannerReadaheadTable [4] { {"ScannerReadaheadTable", 0, 14, &t0[0]}, {"ScannerReadaheadTable", 1, 4, &t1[0]}, {"ScannerReadaheadTable", 2, 4, &t2[0]}, {"ScannerReadaheadTable", 3, 4, &t3[0]}}; //Define VARIABLES to refer to semantic table PARAMETERs. //FORMAT {string0, string1, ...} const char **p4 = new const char * [1] {"-|"}; const char **p5 = new const char * [1] {"("}; const char **p6 = new const char * [1] {")"}; const char **p7 = new const char * [1] {"*"}; const char **p8 = new const char * [1] {"+"}; const char **p9 = new const char * [1] {","}; const char **p10 = new const char * [1] {"-"}; const char **p11 = new const char * [1] {"/"}; const char **p12 = new const char * [1] {"Integer"}; const char **p13 = new const char * [1] {";"}; const char **p14 = new const char * [1] {"="}; const char **p15 = new const char * [1] {"Identifier"}; //Define an array of semantic tables. //FORMAT SemanticTable {const char *name; long stateNumber; const char *action; long size; const char **parameters; long gotoTableNumber;} RawSemanticTable *semanticTables = new RawSemanticTable [12] { {"SemanticTable", 4, "buildToken", 1, p4, 0}, {"SemanticTable", 5, "buildToken", 1, p5, 0}, {"SemanticTable", 6, "buildToken", 1, p6, 0}, {"SemanticTable", 7, "buildToken", 1, p7, 0}, {"SemanticTable", 8, "buildToken", 1, p8, 0}, {"SemanticTable", 9, "buildToken", 1, p9, 0}, {"SemanticTable", 10, "buildToken", 1, p10, 0}, {"SemanticTable", 11, "buildToken", 1, p11, 0}, {"SemanticTable", 12, "buildToken", 1, p12, 0}, {"SemanticTable", 13, "buildToken", 1, p13, 0}, {"SemanticTable", 14, "buildToken", 1, p14, 0}, {"SemanticTable", 15, "buildToken", 1, p15, 0} }; ScannerTables *scannerTables = new ScannerTables { 4, scannerReadaheadTables, 12, semanticTables }; return scannerTables; } void deleteScannerTables (ScannerTables *scannerTable) { for (long index = 0; index < scannerTable->scannerReadaheadTablesSize; index++) { RawScannerReadaheadTable &scannerReadaheadTable = scannerTable->scannerReadaheadTables [index]; for (long index2 = 0; index2 < scannerReadaheadTable.size; index2++) { delete [] scannerReadaheadTable.triples [index2].string; } delete [] scannerReadaheadTable.triples; } delete [] scannerTable->scannerReadaheadTables; for (long index = 0; index < scannerTable->semanticTablesSize; index++) { delete [] scannerTable->semanticTables [index].parameters; } delete [] scannerTable->semanticTables; } //C++98 -----------------------------------> //NOTE: The following declarations should probably be moved manually to a more global location for access elsewhere... //NOTE: Strings are not allocated with new since they exist globally as part of the compiled code. struct RawScannerReadaheadTriple {const char *string; const char *attributes; long gotoTableNumber;}; //Note: string == NULL is equivalent to "{256}" (end of file). struct RawScannerReadaheadTable {const char *name; long stateNumber; long size; RawScannerReadaheadTriple *triples;}; struct RawSemanticTable {const char *name; long stateNumber; const char *action; long size; const char **parameters; long gotoTableNumber;}; struct ScannerTables { long scannerReadaheadTablesSize; RawScannerReadaheadTable *scannerReadaheadTables; long semanticTablesSize; RawSemanticTable *semanticTables; }; #define copy(a,b) CopyMemory (a, b, sizeof (b)) ScannerTables *scannerTables () { //Define VARIABLES to refer to scanner readahead table TRIPLEs. //FORMAT: RawScannerReadaheadTriple {const char *string; const char *attributes; long gotoTableNumber;} //Note: string == NULL is equivalent to "{256}" (end of file). RawScannerReadaheadTriple *t0 = new RawScannerReadaheadTriple [14] {{NULL, "L", 4}, {"ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz", "RK", 2}, {")", "RK", 6}, {"*", "RK", 7}, {"+", "RK", 8}, {",", "RK", 9}, {"-", "RK", 10}, {"(", "RK", 5}, {"/", "RK", 11}, {"0123456789", "RK", 1}, {"\011\012\014\015", "R", 3}, {" ", "R", 3}, {";", "RK", 13}, {"=", "RK", 14}}; RawScannerReadaheadTriple *t1 = new RawScannerReadaheadTriple [4] {{"\011\012\014\015", "L", 12}, {NULL, "L", 12}, {"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_+-*/=[]{}()^;#:.$'\" ", "L", 12}, {"0123456789", "RK", 1}}; RawScannerReadaheadTriple *t2 = new RawScannerReadaheadTriple [4] {{"\011\012\014\015", "L", 15}, {NULL, "L", 15}, {"+-*/=[]{}()^;#:.$'\" ", "L", 15}, {"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz", "RK", 2}}; RawScannerReadaheadTriple *t3 = new RawScannerReadaheadTriple [4] {{NULL, "L", 0}, {"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_0123456789+-*/=[]{}()^;#:.$'\"", "L", 0}, {"\011\012\014\015", "R", 3}, {" ", "R", 3}}; //Define an array of scanner readahead tables. //FORMAT: RawScannerReadaheadTable {const char *name; long stateNumber; long size; RawScannerReadaheadTriple *triples;} RawScannerReadaheadTable *scannerReadaheadTables = new RawScannerReadaheadTable [4] { {"ScannerReadaheadTable", 0, 14, &t0[0]}, {"ScannerReadaheadTable", 1, 4, &t1[0]}, {"ScannerReadaheadTable", 2, 4, &t2[0]}, {"ScannerReadaheadTable", 3, 4, &t3[0]}}; //Define VARIABLES to refer to semantic table PARAMETERs. //FORMAT {string0, string1, ...} const char **p4 = new const char * [1] {"-|"}; const char **p5 = new const char * [1] {"("}; const char **p6 = new const char * [1] {")"}; const char **p7 = new const char * [1] {"*"}; const char **p8 = new const char * [1] {"+"}; const char **p9 = new const char * [1] {","}; const char **p10 = new const char * [1] {"-"}; const char **p11 = new const char * [1] {"/"}; const char **p12 = new const char * [1] {"Integer"}; const char **p13 = new const char * [1] {";"}; const char **p14 = new const char * [1] {"="}; const char **p15 = new const char * [1] {"Identifier"}; //Define an array of semantic tables. //FORMAT SemanticTable {const char *name; long stateNumber; const char *action; long size; const char **parameters; long gotoTableNumber;} RawSemanticTable *semanticTables = new RawSemanticTable [12] { {"SemanticTable", 4, "buildToken", 1, p4, 0}, {"SemanticTable", 5, "buildToken", 1, p5, 0}, {"SemanticTable", 6, "buildToken", 1, p6, 0}, {"SemanticTable", 7, "buildToken", 1, p7, 0}, {"SemanticTable", 8, "buildToken", 1, p8, 0}, {"SemanticTable", 9, "buildToken", 1, p9, 0}, {"SemanticTable", 10, "buildToken", 1, p10, 0}, {"SemanticTable", 11, "buildToken", 1, p11, 0}, {"SemanticTable", 12, "buildToken", 1, p12, 0}, {"SemanticTable", 13, "buildToken", 1, p13, 0}, {"SemanticTable", 14, "buildToken", 1, p14, 0}, {"SemanticTable", 15, "buildToken", 1, p15, 0} }; ScannerTables *scannerTables = new ScannerTables; ScannerTables onStackScannerTables = { 4, scannerReadaheadTables, 12, semanticTables }; copy (scannerTables, &onStackScannerTables); return scannerTables; } #undef copy void deleteScannerTables (ScannerTables *scannerTable) { for (long index = 0; index < scannerTable->scannerReadaheadTablesSize; index++) { RawScannerReadaheadTable &scannerReadaheadTable = scannerTable->scannerReadaheadTables [index]; for (long index2 = 0; index2 < scannerReadaheadTable.size; index2++) { delete [] scannerReadaheadTable.triples [index2].string; } delete [] scannerReadaheadTable.triples; } delete [] scannerTable->scannerReadaheadTables; for (long index = 0; index < scannerTable->semanticTablesSize; index++) { delete [] scannerTable->semanticTables [index].parameters; } delete [] scannerTable->semanticTables; } //JAVA ------------------------------------> //NOTE: The following declarations should probably be moved manually to a more global location for access elsewhere... //NOTE: Strings are not allocated with new since they exist globally as part of the compiled code. struct RawScannerReadaheadTriple {const char *string; const char *attributes; long gotoTableNumber;}; //Note: string == NULL is equivalent to "{256}" (end of file). struct RawScannerReadaheadTable {const char *name; long stateNumber; long size; RawScannerReadaheadTriple *triples;}; struct RawSemanticTable {const char *name; long stateNumber; const char *action; long size; const char **parameters; long gotoTableNumber;}; struct ScannerTables { long scannerReadaheadTablesSize; RawScannerReadaheadTable *scannerReadaheadTables; long semanticTablesSize; RawSemanticTable *semanticTables; }; #define copy(a,b) CopyMemory (a, b, sizeof (b)) ScannerTables *scannerTables () { //Define VARIABLES to refer to scanner readahead table TRIPLEs. //FORMAT: RawScannerReadaheadTriple {const char *string; const char *attributes; long gotoTableNumber;} //Note: string == NULL is equivalent to "{256}" (end of file). RawScannerReadaheadTriple *t0 = new RawScannerReadaheadTriple [14] {{NULL, "L", 4}, {"ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz", "RK", 2}, {")", "RK", 6}, {"*", "RK", 7}, {"+", "RK", 8}, {",", "RK", 9}, {"-", "RK", 10}, {"(", "RK", 5}, {"/", "RK", 11}, {"0123456789", "RK", 1}, {"\011\012\014\015", "R", 3}, {" ", "R", 3}, {";", "RK", 13}, {"=", "RK", 14}}; RawScannerReadaheadTriple *t1 = new RawScannerReadaheadTriple [4] {{"\011\012\014\015", "L", 12}, {NULL, "L", 12}, {"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_+-*/=[]{}()^;#:.$'\" ", "L", 12}, {"0123456789", "RK", 1}}; RawScannerReadaheadTriple *t2 = new RawScannerReadaheadTriple [4] {{"\011\012\014\015", "L", 15}, {NULL, "L", 15}, {"+-*/=[]{}()^;#:.$'\" ", "L", 15}, {"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz", "RK", 2}}; RawScannerReadaheadTriple *t3 = new RawScannerReadaheadTriple [4] {{NULL, "L", 0}, {"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_0123456789+-*/=[]{}()^;#:.$'\"", "L", 0}, {"\011\012\014\015", "R", 3}, {" ", "R", 3}}; //Define an array of scanner readahead tables. //FORMAT: RawScannerReadaheadTable {const char *name; long stateNumber; long size; RawScannerReadaheadTriple *triples;} RawScannerReadaheadTable *scannerReadaheadTables = new RawScannerReadaheadTable [4] { {"ScannerReadaheadTable", 0, 14, &t0[0]}, {"ScannerReadaheadTable", 1, 4, &t1[0]}, {"ScannerReadaheadTable", 2, 4, &t2[0]}, {"ScannerReadaheadTable", 3, 4, &t3[0]}}; //Define VARIABLES to refer to semantic table PARAMETERs. //FORMAT {string0, string1, ...} const char **p4 = new const char * [1] {"-|"}; const char **p5 = new const char * [1] {"("}; const char **p6 = new const char * [1] {")"}; const char **p7 = new const char * [1] {"*"}; const char **p8 = new const char * [1] {"+"}; const char **p9 = new const char * [1] {","}; const char **p10 = new const char * [1] {"-"}; const char **p11 = new const char * [1] {"/"}; const char **p12 = new const char * [1] {"Integer"}; const char **p13 = new const char * [1] {";"}; const char **p14 = new const char * [1] {"="}; const char **p15 = new const char * [1] {"Identifier"}; //Define an array of semantic tables. //FORMAT SemanticTable {const char *name; long stateNumber; const char *action; long size; const char **parameters; long gotoTableNumber;} RawSemanticTable *semanticTables = new RawSemanticTable [12] { {"SemanticTable", 4, "buildToken", 1, p4, 0}, {"SemanticTable", 5, "buildToken", 1, p5, 0}, {"SemanticTable", 6, "buildToken", 1, p6, 0}, {"SemanticTable", 7, "buildToken", 1, p7, 0}, {"SemanticTable", 8, "buildToken", 1, p8, 0}, {"SemanticTable", 9, "buildToken", 1, p9, 0}, {"SemanticTable", 10, "buildToken", 1, p10, 0}, {"SemanticTable", 11, "buildToken", 1, p11, 0}, {"SemanticTable", 12, "buildToken", 1, p12, 0}, {"SemanticTable", 13, "buildToken", 1, p13, 0}, {"SemanticTable", 14, "buildToken", 1, p14, 0}, {"SemanticTable", 15, "buildToken", 1, p15, 0} }; ScannerTables *scannerTables = new ScannerTables; ScannerTables onStackScannerTables = { 4, scannerReadaheadTables, 12, semanticTables }; copy (scannerTables, &onStackScannerTables); return scannerTables; } #undef copy void deleteScannerTables (ScannerTables *scannerTable) { for (long index = 0; index < scannerTable->scannerReadaheadTablesSize; index++) { RawScannerReadaheadTable &scannerReadaheadTable = scannerTable->scannerReadaheadTables [index]; for (long index2 = 0; index2 < scannerReadaheadTable.size; index2++) { delete [] scannerReadaheadTable.triples [index2].string; } delete [] scannerReadaheadTable.triples; } delete [] scannerTable->scannerReadaheadTables; for (long index = 0; index < scannerTable->semanticTablesSize; index++) { delete [] scannerTable->semanticTables [index].parameters; } delete [] scannerTable->semanticTables; } //JAVA: LIST VERSION --------------> static List rawScannerTables () {return asList ( asList ("ScannerReadaheadTable", 0, asList (("256") "L" 4), asList ("ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz", "RK", 2), asList (")", "RK", 6), asList ("*", "RK", 7), asList ("+", "RK", 8), asList (",", "RK", 9), asList ("-", "RK", 10), asList ("(", "RK", 5), asList ("/", "RK", 11), asList ("0123456789", "RK", 1), asList (("9 10 12 13") "R" 3), asList (" ", "R", 3), asList (";", "RK", 13), asList ("=", "RK", 14)), asList ("ScannerReadaheadTable", 1, asList (("9 10 12 13 256") "L" 12), asList ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_+-*/=[]{}()^;#:.$'\" ", "L", 12), asList ("0123456789", "RK", 1)), asList ("ScannerReadaheadTable", 2, asList (("9 10 12 13 256") "L" 15), asList ("+-*/=[]{}()^;#:.$'\" ", "L", 15), asList ("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz", "RK", 2)), asList ("ScannerReadaheadTable", 3, asList (("256") "L" 0), asList ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_0123456789+-*/=[]{}()^;#:.$'\"", "L", 0), asList (("9 10 12 13") "R" 3), asList (" ", "R", 3)), asList ("SemanticTable", 4, buildToken, asList ("-|"), 0), asList ("SemanticTable", 5, buildToken, asList ("("), 0), asList ("SemanticTable", 6, buildToken, asList (")"), 0), asList ("SemanticTable", 7, buildToken, asList ("*"), 0), asList ("SemanticTable", 8, buildToken, asList ("+"), 0), asList ("SemanticTable", 9, buildToken, asList (","), 0), asList ("SemanticTable", 10, buildToken, asList ("-"), 0), asList ("SemanticTable", 11, buildToken, asList ("/"), 0), asList ("SemanticTable", 12, buildToken, asList ("Integer"), 0), asList ("SemanticTable", 13, buildToken, asList (";"), 0), asList ("SemanticTable", 14, buildToken, asList ("="), 0), asList ("SemanticTable", 15, buildToken, asList ("Identifier"), 0));}