12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- MODULE FoxFrontend; (** AUTHOR "fof"; PURPOSE "Oberon Compiler: Common frontend module"; **)
- IMPORT
- Streams, Diagnostics, SyntaxTree := FoxSyntaxTree, Strings;
- TYPE
- Frontend* = OBJECT
- VAR
- lineNumbers*: BOOLEAN;
-
- PROCEDURE & InitFrontEnd*;
- BEGIN
- Initialize(NIL, NIL, "", 0);
- END InitFrontEnd;
-
- (* initialize frontend for usage *)
- PROCEDURE Initialize*(diagnostics: Diagnostics.Diagnostics; reader: Streams.Reader;CONST fileName: ARRAY OF CHAR; pos: LONGINT);
- BEGIN
- END Initialize;
- PROCEDURE Parse*(): SyntaxTree.Module;
- BEGIN RETURN NIL
- END Parse;
-
- PROCEDURE Done*(): BOOLEAN;
- BEGIN RETURN TRUE;
- END Done;
-
- PROCEDURE Error*(): BOOLEAN;
- BEGIN RETURN TRUE;
- END Error;
-
- END Frontend;
- PROCEDURE GetDummy*():Frontend;
- VAR frontend: Frontend;
- BEGIN
- NEW(frontend);
- RETURN frontend;
- END GetDummy;
- PROCEDURE GetFrontendByName*(CONST name: ARRAY OF CHAR): Frontend;
- VAR
- procname: ARRAY 256 OF CHAR;
- factory: PROCEDURE (): Frontend;
- frontend: Frontend;
- BEGIN
- frontend := NIL;
- IF Strings.Length(name) > 0 THEN
- GETPROCEDURE(name,"Get", factory); (* try long name for example -G=OCERAFrontend *)
- IF factory = NIL THEN (* try short name for example -G=ERA*)
- procname := "Fox";
- Strings.Append(procname, name);
- Strings.Append(procname, "Frontend");
- GETPROCEDURE(procname,"Get", factory);
- END;
- IF factory # NIL THEN
- frontend := factory();
- Assert(frontend # NIL,"frontend factory returned NIL frontend");
- END;
- END;
- RETURN frontend
- END GetFrontendByName;
- PROCEDURE Assert(b: BOOLEAN; CONST reason: ARRAY OF CHAR);
- BEGIN
- ASSERT(b);
- END Assert;
- END FoxFrontend.
|