home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / coders / jËzyki_programowania / oberon / system1 / parser.frm (.txt) < prev    next >
Oberon Text  |  1977-12-31  |  1KB  |  49 lines

  1. Syntax10.Scn.Fnt
  2. (* parser module generated by Coco-R *)
  3. MODULE -->modulename; 
  4. IMPORT -->scanner;
  5. CONST 
  6.     -->constants
  7.     setSize = 32;  nSets = (maxT DIV setSize) + 1;
  8.     SymbolSet = ARRAY nSets OF SET;
  9.     sym:     INTEGER;   (* current input symbol *)
  10.     symSet:  ARRAY nrSets OF SymbolSet;
  11. -->declarations
  12. PROCEDURE Error (n: INTEGER);
  13. BEGIN -->errors
  14. END Error;
  15. PROCEDURE Get;
  16. BEGIN
  17.     -->scanProc
  18. END Get;
  19. PROCEDURE Expect(n: INTEGER);
  20. BEGIN IF sym = n THEN Get ELSE Error(n) END
  21. END Expect;
  22. PROCEDURE StartOf(s: INTEGER): BOOLEAN;
  23. BEGIN RETURN (sym MOD setSize) IN symSet[s, sym DIV setSize]
  24. END StartOf;
  25. PROCEDURE ExpectWeak(n, follow: INTEGER);
  26. BEGIN
  27.     IF sym = n THEN Get
  28.     ELSE Error(n); WHILE ~ StartOf(follow) DO Get END
  29. END ExpectWeak;
  30. PROCEDURE WeakSeparator(n, syFol, repFol: INTEGER): BOOLEAN;
  31.     VAR s: SymbolSet; i: INTEGER;
  32. BEGIN
  33.     IF sym = n THEN Get; RETURN TRUE
  34.     ELSIF StartOf(repFol) THEN RETURN FALSE
  35.     ELSE
  36.         i := 0; WHILE i < nSets DO s[i] := symSet[syFol, i] + symSet[repFol, i] + symSet[0, i]; INC(i) END;
  37.         Error(n); WHILE ~ ((sym MOD setSize) IN s[sym DIV setSize]) DO Get END;
  38.         RETURN StartOf(syFol)
  39. END WeakSeparator;
  40. -->productions
  41. PROCEDURE Parse*;
  42. BEGIN
  43.     Get;
  44. -->parseRoot
  45. END Parse;
  46. BEGIN
  47. -->initialization
  48. END -->modulename.
  49.