FoxFrontend.Mod 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. MODULE FoxFrontend; (** AUTHOR "fof"; PURPOSE "Oberon Compiler: Common frontend module"; **)
  2. IMPORT
  3. Streams, Diagnostics, SyntaxTree := FoxSyntaxTree, Strings;
  4. TYPE
  5. Frontend* = OBJECT
  6. VAR
  7. flags-: SET;
  8. PROCEDURE & InitFrontEnd*;
  9. BEGIN
  10. Initialize(NIL, {}, NIL, "", 0);
  11. END InitFrontEnd;
  12. (* initialize frontend for usage *)
  13. PROCEDURE Initialize*(diagnostics: Diagnostics.Diagnostics; flags: SET; reader: Streams.Reader;CONST fileName: ARRAY OF CHAR; pos: LONGINT);
  14. BEGIN
  15. SELF.flags := flags;
  16. END Initialize;
  17. PROCEDURE Parse*(): SyntaxTree.Module;
  18. BEGIN RETURN NIL
  19. END Parse;
  20. PROCEDURE Done*(): BOOLEAN;
  21. BEGIN RETURN TRUE;
  22. END Done;
  23. PROCEDURE Error*(): BOOLEAN;
  24. BEGIN RETURN TRUE;
  25. END Error;
  26. END Frontend;
  27. PROCEDURE GetDummy*():Frontend;
  28. VAR frontend: Frontend;
  29. BEGIN
  30. NEW(frontend);
  31. RETURN frontend;
  32. END GetDummy;
  33. PROCEDURE GetFrontendByName*(CONST name: ARRAY OF CHAR): Frontend;
  34. VAR
  35. procname: ARRAY 256 OF CHAR;
  36. factory: PROCEDURE (): Frontend;
  37. frontend: Frontend;
  38. BEGIN
  39. frontend := NIL;
  40. IF Strings.Length(name) > 0 THEN
  41. GETPROCEDURE(name,"Get", factory); (* try long name for example -G=OCERAFrontend *)
  42. IF factory = NIL THEN (* try short name for example -G=ERA*)
  43. procname := "Fox";
  44. Strings.Append(procname, name);
  45. Strings.Append(procname, "Frontend");
  46. GETPROCEDURE(procname,"Get", factory);
  47. END;
  48. IF factory # NIL THEN
  49. frontend := factory();
  50. Assert(frontend # NIL,"frontend factory returned NIL frontend");
  51. END;
  52. END;
  53. RETURN frontend
  54. END GetFrontendByName;
  55. PROCEDURE Assert(b: BOOLEAN; CONST reason: ARRAY OF CHAR);
  56. BEGIN
  57. ASSERT(b);
  58. END Assert;
  59. END FoxFrontend.