| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818 |
- 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
|