Listing: 1 IMPLEMENTATION MODULE Parser; 2 (* 3 * REPERTOIRE 4 * Release 1.6 5 * By Charles Bradford and Cole Brecheen 6 * (c) Copyright 1985-1992 PMI 7 * Green Bay, Wisconsin 8 * All rights reserved 9 * (414) 468-6040 10 * 11 * $Header: D:/logfiles/mods/parser.mov 1.9 17 Mar 1991 17:57:48 coleb $ 12 * 13 *) 14 15 16 (*EntryDiag: 17 IMPORT Diagnostics; 18 :EntryDiag*) 19 20 IMPORT GenLists; 21 IMPORT ListUtils; 22 IMPORT M2Strings; 23 IMPORT PosUtils; 24 IMPORT StrEdit; 25 IMPORT SYSTEM; 26 27 VAR 28 Initialized : BOOLEAN; 29 30 CONST 31 space = 40C; 32 33 VAR 34 LineLngth: CARDINAL; 35 36 PROCEDURE GetNxtLstChr(InList: GenLists.GenList; VAR currentLine, ***** ^ not supported yet 37 currentIndex: CARDINAL; VAR TheChar: CHAR); 38 (* On entry, currentIndex should identify a character that has 39 already been gotten. On exit, it will identify the character 40 just returned; currentLine will identify the line from which 41 it was gotten, even if it was the last character on the line. *) 42 VAR 43 typeCode : CARDINAL; 44 BEGIN 45 LineLngth := M2Strings.Length(TheLine); ***** ^ not supported yet ***** ^ not supported yet ***** ^ undeclared identifier 46 IF (currentIndex + 1) >= LineLngth THEN 47 (* we are at a line end *) 48 currentIndex := 0; 49 IF currentLine < GenLists.ListLength(InList) THEN ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 50 INC(currentLine); ***** ^ undeclared identifier ***** ^ not supported yet 51 GenLists.GetElmt(InList, currentLine, TheLine, typeCode); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ undeclared identifier ***** ^ not supported yet 52 (*read next line*) 53 LineLngth := M2Strings.Length(TheLine); ***** ^ not supported yet ***** ^ not supported yet ***** ^ undeclared identifier 54 TheChar := TheLine[currentIndex]; ***** ^ undeclared identifier ***** ^ not supported yet 55 ELSE 56 TheChar := EOF; ***** ^ undeclared identifier 57 (* we are at file end *) 58 END; 59 ELSE 60 INC(currentIndex); ***** ^ undeclared identifier ***** ^ not supported yet 61 TheChar := TheLine[currentIndex]; ***** ^ undeclared identifier ***** ^ not supported yet 62 END; 63 END GetNxtLstChr; ***** ^ not supported yet 64 65 66 PROCEDURE SkipComments(VAR inList: GenLists.GenList; ***** ^ not supported yet 67 VAR currentIndex, currentLine: CARDINAL); 68 (* Handles nested comments 69 currentIndex passed in points to first char of a StartComment 70 currentIndex passed out points to the char after EndComment *) 71 VAR 72 terminator: CHAR; 73 tmpLst: GenLists.GenList; ***** ^ not supported yet 74 BEGIN 75 GenLists.NewList(tmpLst); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 76 GetLogicalLst( ***** ^ undeclared identifier 77 inList, ***** ^ not supported yet 78 StartComment, ***** ^ undeclared identifier 79 EndComment, ***** ^ undeclared identifier 80 currentLine, 81 currentIndex, 82 tmpLst, ***** ^ not supported yet 83 terminator); ***** ^ not supported yet 84 GenLists.DisposeList(tmpLst); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 85 END SkipComments; ***** ^ not supported yet 86 87 88 PROCEDURE ReadComments(VAR InList, OutList: GenLists.GenList; ***** ^ not supported yet 89 NewStartComment, NewEndComment: ARRAY OF CHAR; ***** ^ not supported yet 90 VAR currentIndex, currentLine: CARDINAL); 91 (* Extracts comments from InList and appends them to OutList. 92 OutList must be initialized before it gets here. If it has 93 at least one element, we append the first line of the comment 94 to the last line of OutList. Handles nested comments; 95 currentIndex passed in points to first char of a StartComment; 96 currentIndex passed out points to the char after EndComment. *) 97 VAR 98 StartCmtIndex, EndCmtIndex, TypeCode, 99 NestingLevel, CommentLength, NewCommentLength, 100 outListLngth: CARDINAL; 101 tmpch: CHAR; 102 BEGIN 103 CommentLength := M2Strings.Length(StartComment); ***** ^ not supported yet ***** ^ not supported yet ***** ^ undeclared identifier 104 NewCommentLength := M2Strings.Length(NewStartComment); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 105 NestingLevel := 1; 106 107 StartCmtIndex := PosUtils.Positn(StartComment, TheLine, currentIndex); ***** ^ not supported yet ***** ^ not supported yet ***** ^ undeclared identifier ***** ^ undeclared identifier ***** ^ not supported yet 108 IF currentIndex # StartCmtIndex THEN 109 (*We weren't on a StartComment.*) 110 RETURN; 111 END; 112 INC(currentIndex, CommentLength); ***** ^ undeclared identifier ***** ^ not supported yet 113 (* get currentIndex past the opening comment *) 114 outListLngth := GenLists.ListLength(OutList); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 115 IF outListLngth > 0 THEN 116 ListUtils.InsertIntoElmt(OutList, outListLngth, ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 117 SYSTEM.ADR(NewStartComment), NewCommentLength, 65535); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 118 ELSE 119 INC(outListLngth); ***** ^ undeclared identifier ***** ^ not supported yet 120 GenLists.ListInsert(NewStartComment, GenLists.StrCode, OutList, ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 121 outListLngth); ***** ^ not supported yet 122 END; 123 LOOP 124 GetNxtLstChr(InList, currentLine, currentIndex, tmpch); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 125 IF tmpch = StartComment[0] THEN ***** ^ undeclared identifier ***** ^ not supported yet 126 StartCmtIndex := PosUtils.Positn(StartComment, TheLine, ***** ^ not supported yet ***** ^ not supported yet ***** ^ undeclared identifier ***** ^ undeclared identifier 127 currentIndex); ***** ^ not supported yet 128 IF currentIndex = StartCmtIndex THEN 129 (*We were on a StartComment.*) 130 INC(NestingLevel); ***** ^ undeclared identifier ***** ^ not supported yet 131 END; 132 END; 133 IF tmpch = EndComment[0] THEN ***** ^ undeclared identifier ***** ^ not supported yet 134 EndCmtIndex := PosUtils.Positn(EndComment, TheLine, currentIndex); ***** ^ not supported yet ***** ^ not supported yet ***** ^ undeclared identifier ***** ^ undeclared identifier ***** ^ not supported yet 135 IF currentIndex = EndCmtIndex THEN 136 (*We were on an EndComment.*) 137 DEC(NestingLevel); ***** ^ undeclared identifier ***** ^ not supported yet 138 END; 139 IF NestingLevel = 0 THEN 140 INC(currentIndex, CommentLength); ***** ^ undeclared identifier ***** ^ not supported yet 141 ListUtils.InsertIntoElmt(OutList, outListLngth, ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 142 SYSTEM.ADR(NewEndComment), NewCommentLength, 65535); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 143 EXIT; 144 END; 145 END; 146 IF currentIndex > 0 THEN 147 ListUtils.InsertIntoElmt(OutList, outListLngth, ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 148 SYSTEM.ADR(tmpch), 1, 65535); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 149 ELSE 150 (* Every time currentIndex goes to zero we start a new 151 line in the OutList. *) 152 INC(outListLngth); ***** ^ undeclared identifier ***** ^ not supported yet 153 GenLists.ListInsert(tmpch, GenLists.StrCode, OutList, ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 154 outListLngth); ***** ^ not supported yet 155 END; 156 END; 157 END ReadComments; ***** ^ not supported yet 158 159 160 PROCEDURE GetLogicalLst( 161 inList: GenLists.GenList; ***** ^ not supported yet 162 opener, closer: ARRAY OF CHAR; ***** ^ not supported yet 163 VAR currentLine, currentIndex: CARDINAL; 164 VAR outList: GenLists.GenList; ***** ^ not supported yet 165 VAR terminator: CHAR); 166 (* On entry, currentIndex should identify a character that has 167 * already been gotten (opener). On exit, it will identify the 168 * character just returned (closer or Parser.EOF); currentLine 169 * will identify the line from which it was gotten, even if it 170 * was the last character on the line. outList should be 171 * initialized on entry, and will be bracketed by opener and 172 * closer on exit. 173 *) 174 VAR 175 openerIndex, closerIndex, 176 NestingLevel, openerLngth, 177 outListLngth: CARDINAL; 178 tmpch: CHAR; 179 BEGIN 180 openerLngth := M2Strings.Length(opener); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 181 NestingLevel := 1; 182 183 openerIndex := PosUtils.Positn(opener, TheLine, currentIndex); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ undeclared identifier ***** ^ not supported yet 184 IF currentIndex # openerIndex THEN 185 (*We weren't on a opener.*) 186 RETURN; 187 END; 188 outListLngth := GenLists.ListLength(outList); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 189 IF outListLngth > 0 THEN 190 ListUtils.InsertIntoElmt(outList, outListLngth, ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 191 SYSTEM.ADR(opener), openerLngth, 65535); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 192 ELSE 193 INC(outListLngth); ***** ^ undeclared identifier ***** ^ not supported yet 194 GenLists.ListInsert(opener, GenLists.StrCode, outList, ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 195 outListLngth); ***** ^ not supported yet 196 END; 197 LOOP 198 GetNxtLstChr(inList, currentLine, currentIndex, tmpch); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 199 IF tmpch = opener[0] THEN ***** ^ not supported yet ***** ^ not supported yet 200 openerIndex := PosUtils.Positn(opener, TheLine, ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ undeclared identifier 201 currentIndex); ***** ^ not supported yet 202 IF currentIndex = openerIndex THEN 203 (* We were on an opener. We don't increment currentIndex 204 * past it because, if opener contains more than one 205 * character, we want them all copied into outList. 206 *) 207 INC(NestingLevel); ***** ^ undeclared identifier ***** ^ not supported yet 208 END; 209 END; 210 IF tmpch = closer[0] THEN ***** ^ not supported yet ***** ^ not supported yet 211 closerIndex := PosUtils.Positn(closer, TheLine, currentIndex); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ undeclared identifier ***** ^ not supported yet 212 IF currentIndex = closerIndex THEN 213 (*We were on a closer.*) 214 DEC(NestingLevel); ***** ^ undeclared identifier ***** ^ not supported yet 215 END; 216 IF NestingLevel = 0 THEN 217 INC(currentIndex, openerLngth); ***** ^ undeclared identifier ***** ^ not supported yet 218 ListUtils.InsertIntoElmt(outList, outListLngth, ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 219 SYSTEM.ADR(closer), openerLngth, 65535); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 220 EXIT; 221 END; 222 END; 223 IF currentIndex > 0 THEN 224 ListUtils.InsertIntoElmt(outList, outListLngth, ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 225 SYSTEM.ADR(tmpch), 1, 65535); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 226 ELSE 227 (* Every time currentIndex goes to zero we start a new 228 line in the OutList. *) 229 INC(outListLngth); ***** ^ undeclared identifier ***** ^ not supported yet 230 GenLists.ListInsert(tmpch, GenLists.StrCode, outList, ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 231 outListLngth); ***** ^ not supported yet 232 END; 233 END; 234 END GetLogicalLst; ***** ^ not supported yet 235 236 237 PROCEDURE GetLogicalStr( 238 inList: GenLists.GenList; ***** ^ not supported yet 239 opener, closer: ARRAY OF CHAR; ***** ^ not supported yet 240 VAR currentLine, currentIndex: CARDINAL; 241 VAR outStr: ARRAY OF CHAR; ***** ^ not supported yet 242 VAR terminator: CHAR); 243 VAR 244 tmpLst: GenLists.GenList; ***** ^ not supported yet 245 BEGIN 246 GenLists.NewList(tmpLst); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 247 GetLogicalLst(inList, opener, closer, currentLine, currentIndex, ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 248 tmpLst, terminator); ***** ^ not supported yet ***** ^ not supported yet 249 ListUtils.ListToString(tmpLst, outStr); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 250 GenLists.DisposeList(tmpLst); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 251 END GetLogicalStr; ***** ^ not supported yet 252 253 254 PROCEDURE GetNextWord( 255 InList: GenLists.GenList; ***** ^ not supported yet 256 VAR CurrentLine, CurrentIndex: CARDINAL; 257 VAR NextWord: ARRAY OF CHAR; ***** ^ not supported yet 258 VAR Terminator: CHAR); 259 (* To make this start at the beginning of the first line, 260 you have to pass 0 to both CurrentLine and CurrentIndex. 261 Algorithm is: 262 starting from position CurrentIndex in line CurrentLine: 263 skip over any blanks 264 if at end of line, get a new line 265 NextWord := text up to next delimiter 266 If delimiter found = StartComment[0], skip any comments 267 skip over any blanks 268 leave index on next character 269 that next character will normally not be a delimiter; 270 Weird conditions: 271 if next char is a delimiter other than a blank, 272 a null nextword will be returned next time 273 if get last word on a line, index is left at the end of line 274 *) 275 VAR 276 NextDelim, TypeCode: CARDINAL; 277 dumstr: ARRAY [0..191] OF CHAR; ***** ^ not supported yet ***** ^ not supported yet 278 QuoteChar: CHAR; 279 DelimFound : BOOLEAN; 280 281 BEGIN 282 StrEdit.SetLength(NextWord, 0); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 283 LineLngth := M2Strings.Length(TheLine); ***** ^ not supported yet ***** ^ not supported yet ***** ^ undeclared identifier 284 LOOP 285 (* We do this first loop just to make sure we have a line to 286 work with (we might need to read another one) and to get 287 to the next nonblank character (which might be a nonblank 288 delimiter. *) 289 IF CurrentIndex >= LineLngth THEN 290 (* we are at a line end *) 291 CurrentIndex := 0; 292 IF CurrentLine < GenLists.ListLength(InList) THEN ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 293 (* We aren't at the end of the file. *) 294 INC(CurrentLine); ***** ^ undeclared identifier ***** ^ not supported yet 295 GenLists.GetElmt(InList, CurrentLine, TheLine, TypeCode); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ undeclared identifier ***** ^ not supported yet 296 (*read next line*) 297 LineLngth := M2Strings.Length(TheLine); ***** ^ not supported yet ***** ^ not supported yet ***** ^ undeclared identifier 298 ELSE 299 Terminator := EOF; ***** ^ undeclared identifier 300 (* We are at file end; EOF as Terminator is what 301 the caller is supposed to look for to know that the 302 end has been reached. *) 303 RETURN; 304 END; 305 ELSIF PosUtils.Present(TheLine[CurrentIndex], whitespace) THEN ***** ^ not supported yet ***** ^ not supported yet ***** ^ undeclared identifier ***** ^ not supported yet ***** ^ undeclared identifier 306 (* skip the character if it's a blank and loop again *) 307 INC(CurrentIndex); ***** ^ undeclared identifier ***** ^ not supported yet 308 ELSE 309 EXIT; 310 (* We are on a non-blank, but notice that it might be 311 a delimiter. *) 312 END; 313 END; 314 LastIndex := CurrentIndex; ***** ^ undeclared identifier 315 NextDelim := CurrentIndex; 316 IF ((TheLine[NextDelim] = '"') OR (TheLine[NextDelim] = "'")) ***** ^ undeclared identifier ***** ^ not supported yet ***** ^ undeclared identifier ***** ^ not supported yet 317 AND PosUtils.Present(TheLine[NextDelim], delimiters) THEN ***** ^ not supported yet ***** ^ not supported yet ***** ^ undeclared identifier ***** ^ not supported yet ***** ^ undeclared identifier 318 (*Looks like beginning of a string literal. Find end of it.*) 319 INC(CurrentIndex); ***** ^ undeclared identifier ***** ^ not supported yet 320 (*Prevents copying opening quote into NextWord.*) 321 QuoteChar := TheLine[NextDelim]; ***** ^ undeclared identifier ***** ^ not supported yet 322 REPEAT 323 (* skip until come to next delimiter *) 324 INC(NextDelim); ***** ^ undeclared identifier ***** ^ not supported yet 325 UNTIL (NextDelim >= LineLngth) OR 326 (TheLine[NextDelim] = QuoteChar); ***** ^ undeclared identifier ***** ^ not supported yet 327 ELSIF ((TheLine[NextDelim] = StartComment[0]) AND ***** ^ undeclared identifier ***** ^ not supported yet ***** ^ undeclared identifier ***** ^ not supported yet 328 (TheLine[NextDelim + 1] = StartComment[1])) THEN ***** ^ undeclared identifier ***** ^ not supported yet ***** ^ undeclared identifier ***** ^ not supported yet 329 StrEdit.AssignStr(StartComment, NextWord); ***** ^ not supported yet ***** ^ not supported yet ***** ^ undeclared identifier ***** ^ not supported yet 330 CurrentIndex := NextDelim; 331 (* We want to give the user a choice between reading or 332 skipping the comment. We do that by telling them that 333 NextWord = StartComment. If they want to skip it, they 334 call SkipComments. If they want it, they call 335 ReadComments. *) 336 Terminator := space; 337 (* Notice that this is the only case where we exit with 338 CurrentIndex pointing to the word itself rather than 339 to the first nonblank character following the word. *) 340 RETURN; 341 ELSE 342 DelimFound := FALSE; 343 WHILE (NextDelim < LineLngth) AND (NOT DelimFound) DO 344 IF (PosUtils.Present(TheLine[NextDelim], delimiters)) THEN ***** ^ not supported yet ***** ^ not supported yet ***** ^ undeclared identifier ***** ^ not supported yet ***** ^ undeclared identifier 345 DelimFound := TRUE; 346 ELSE 347 (* skip until we come to next delimiter *) 348 INC(NextDelim); ***** ^ undeclared identifier ***** ^ not supported yet 349 END; 350 END; 351 END; 352 M2Strings.Copy(TheLine, CurrentIndex, NextDelim - CurrentIndex, ***** ^ not supported yet ***** ^ not supported yet ***** ^ undeclared identifier 353 NextWord); ***** ^ not supported yet 354 (* NextWord now contains everything between CurrentIndex and 355 NextDelim -- not including the delimiter itself. *) 356 CurrentIndex := NextDelim; 357 (* Now we need to tell them what the terminating character was. 358 If there was whitespace between the end of the word and the 359 next item, we'll only tell them that the Terminator was a space 360 if the space was required (i.e., if the next item began with 361 something other than a delimiter. Otherwise we'll let them 362 assume that everything was jammed together with the least 363 possible amount of whitespace. *) 364 WHILE (CurrentIndex < LineLngth) AND 365 (PosUtils.Present(TheLine[CurrentIndex], whitespace)) DO ***** ^ not supported yet ***** ^ not supported yet ***** ^ undeclared identifier ***** ^ not supported yet ***** ^ undeclared identifier 366 INC(CurrentIndex); ***** ^ undeclared identifier ***** ^ not supported yet 367 (* skip over blanks *) 368 END; 369 IF (CurrentIndex < LineLngth) AND 370 (* if on a delimiter *) 371 (PosUtils.Present(TheLine[CurrentIndex], delimiters)) THEN ***** ^ not supported yet ***** ^ not supported yet ***** ^ undeclared identifier ***** ^ not supported yet ***** ^ undeclared identifier 372 Terminator := TheLine[CurrentIndex]; ***** ^ undeclared identifier ***** ^ not supported yet 373 (* return delimiter after word *) 374 IF ((TheLine[CurrentIndex] # StartComment[0]) OR ***** ^ undeclared identifier ***** ^ not supported yet ***** ^ undeclared identifier ***** ^ not supported yet 375 (TheLine[CurrentIndex + 1] # StartComment[1])) THEN ***** ^ undeclared identifier ***** ^ not supported yet ***** ^ undeclared identifier ***** ^ not supported yet 376 (* We have a kludgy convention that for comments, and nothing 377 else, we leave CurrentIndex pointing to the first character 378 of the comment. *) 379 INC(CurrentIndex); ***** ^ undeclared identifier ***** ^ not supported yet 380 END; 381 (* skip over delimiter before exit *) 382 ELSIF CurrentIndex >= LineLngth THEN 383 (* if at end of line *) 384 Terminator := EOL; ***** ^ undeclared identifier 385 ELSE 386 (* We know we aren't sitting on a delimiter, and we're not at 387 the end of the line, so we must have been terminated by a 388 blank between words *) 389 Terminator := space; 390 END; 391 END GetNextWord; ***** ^ not supported yet 392 393 394 PROCEDURE Init(); 395 BEGIN 396 IF Initialized THEN 397 RETURN; 398 ELSE 399 Initialized := TRUE; 400 END; 401 (*EntryDiag: 402 Diagnostics.Init(); 403 :EntryDiag*) 404 405 GenLists.Init(); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 406 ListUtils.Init(); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 407 M2Strings.Init(); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 408 PosUtils.Init(); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 409 StrEdit.Init(); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet 410 411 (*EntryDiag: 412 Diagnostics.diagS('Entering Parser', ''); 413 :EntryDiag*) 414 415 StrEdit.AssignStr(' ;:(){}[]-=",.^+*/|#', delimiters); ***** ^ not supported yet ***** ^ not supported yet ***** ^ not supported yet ***** ^ undeclared identifier 416 StrEdit.Append(delimiters, "'"); ***** ^ not supported yet ***** ^ not supported yet ***** ^ undeclared identifier ***** ^ not supported yet 417 StrEdit.Append(delimiters, EOL); ***** ^ not supported yet ***** ^ not supported yet ***** ^ undeclared identifier ***** ^ undeclared identifier 418 StrEdit.Append(delimiters, EOF); ***** ^ not supported yet ***** ^ not supported yet ***** ^ undeclared identifier ***** ^ undeclared identifier 419 StrEdit.Append(delimiters, TAB); ***** ^ not supported yet ***** ^ not supported yet ***** ^ undeclared identifier ***** ^ undeclared identifier 420 StrEdit.SetLength(TheLine, 0); ***** ^ not supported yet ***** ^ not supported yet ***** ^ undeclared identifier ***** ^ not supported yet 421 StartComment := '(*'; ***** ^ undeclared identifier ***** ^ not supported yet 422 EndComment := '*)'; ***** ^ undeclared identifier ***** ^ not supported yet 423 whitespace[0] := space; ***** ^ undeclared identifier ***** ^ not supported yet 424 whitespace[1] := TAB; ***** ^ undeclared identifier ***** ^ not supported yet ***** ^ undeclared identifier 425 whitespace[2] := EOL; ***** ^ undeclared identifier ***** ^ not supported yet ***** ^ undeclared identifier 426 whitespace[3] := 12C; (* linefeed *) ***** ^ undeclared identifier ***** ^ not supported yet 427 whitespace[4] := 0C; ***** ^ undeclared identifier ***** ^ not supported yet 428 429 (*EntryDiag: 430 Diagnostics.diagS('Exiting Parser', ''); 431 :EntryDiag*) 432 END Init; ***** ^ not supported yet 433 434 BEGIN 435 Initialized := FALSE; 436 Init(); ***** ^ not supported yet ***** ^ not supported yet 437 END Parser. ***** ^ not supported yet 375 errors