FoxOberonFrontend.Mod 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. MODULE FoxOberonFrontend; (** AUTHOR "fof"; PURPOSE "Oberon Compiler: Oberon frontend module"; **)
  2. IMPORT
  3. Streams, Diagnostics, SyntaxTree := FoxSyntaxTree, Parser := FoxParser, Scanner := FoxScanner,FoxFrontend, Compiler;
  4. TYPE
  5. Frontend* = OBJECT (FoxFrontend.Frontend)
  6. VAR
  7. scanner: Scanner.Scanner;
  8. parser: Parser.Parser;
  9. PROCEDURE Initialize*(diagnostics: Diagnostics.Diagnostics; flags: SET; reader: Streams.Reader; CONST fileName, definitions: ARRAY OF CHAR; pos: LONGINT);
  10. BEGIN
  11. Initialize^(diagnostics, flags, reader, fileName, definitions, pos);
  12. scanner := Scanner.NewScanner(fileName, reader, pos, diagnostics);
  13. scanner.useLineNumbers := Compiler.UseLineNumbers IN flags;
  14. parser := Parser.NewParser( scanner, diagnostics, definitions );
  15. END Initialize;
  16. PROCEDURE Parse*(): SyntaxTree.Module;
  17. BEGIN
  18. RETURN parser.Module();
  19. END Parse;
  20. PROCEDURE Error*(): BOOLEAN;
  21. BEGIN
  22. RETURN parser.error;
  23. END Error;
  24. PROCEDURE Done*(): BOOLEAN;
  25. BEGIN
  26. RETURN ~parser.NextModule()
  27. END Done;
  28. END Frontend;
  29. PROCEDURE Get*():FoxFrontend.Frontend;
  30. VAR frontend: Frontend;
  31. BEGIN
  32. NEW(frontend);
  33. RETURN frontend;
  34. END Get;
  35. END FoxOberonFrontend.