1 | // ATTENTION: Replace all occurences of GPDefSyntaxAnalyzer by the compiler name!
|
---|
2 |
|
---|
3 | // GPDefSyntaxAnalyzer.cs HDO, 2006-08-28
|
---|
4 | // -----
|
---|
5 | // Main program for compiler generated from GPDefSyntaxAnalyzer.atg with Coco-2.
|
---|
6 | //=====================================|========================================
|
---|
7 |
|
---|
8 | using System;
|
---|
9 | using System.IO;
|
---|
10 |
|
---|
11 | using Lex = GPDefSyntaxAnalyzerLex;
|
---|
12 | using Syn = GPDefSyntaxAnalyzerSyn;
|
---|
13 |
|
---|
14 | public class GPDefSyntaxAnalyzer {
|
---|
15 |
|
---|
16 | private static String NAME = "GPDefSyntaxAnalyzer";
|
---|
17 | private static bool interactiveMode;
|
---|
18 |
|
---|
19 | private static void Abort(String abortKind, String moduleName,
|
---|
20 | String methName, String descr) {
|
---|
21 | Console.WriteLine();
|
---|
22 | Console.WriteLine("*** {0} in class {1} method {2}",
|
---|
23 | abortKind, moduleName, methName);
|
---|
24 | Console.WriteLine("*** {0}", descr);
|
---|
25 | Console.WriteLine();
|
---|
26 | Console.WriteLine();
|
---|
27 | Console.WriteLine(NAME + " aborted");
|
---|
28 | Utils.Modules(Utils.ModuleAction.cleanupModule);
|
---|
29 | if (interactiveMode) {
|
---|
30 | Console.Write("type [CR] to quit");
|
---|
31 | string dummy = Console.ReadLine();
|
---|
32 | } // if
|
---|
33 | Environment.Exit(Utils.EXIT_FAILURE);
|
---|
34 | } // Abort
|
---|
35 |
|
---|
36 | private static int CompileFile(String srcFileName) {
|
---|
37 | FileStream srcFs = null;
|
---|
38 | try {
|
---|
39 | srcFs = new FileStream(srcFileName, FileMode.Open);
|
---|
40 | } catch (Exception) {
|
---|
41 | Console.WriteLine("*** file \"{0}\" not found", srcFileName);
|
---|
42 | return Utils.EXIT_FAILURE;
|
---|
43 | } // try/catch
|
---|
44 | try {
|
---|
45 | Lex.src = new StreamReader(srcFs);
|
---|
46 | Console.WriteLine("parsing ...");
|
---|
47 | Syn.Parse();
|
---|
48 | Lex.src.Close();
|
---|
49 | Lex.src.Dispose();
|
---|
50 | Lex.src = null;
|
---|
51 | if (Errors.NumOfErrors() > 0) {
|
---|
52 | Console.WriteLine("listing ...");
|
---|
53 | String lstFileName = Path.ChangeExtension(srcFileName, ".lst");
|
---|
54 | FileStream lstFs = null;
|
---|
55 | try {
|
---|
56 | lstFs = new FileStream(lstFileName, FileMode.Create);
|
---|
57 | } catch (Exception) {
|
---|
58 | Utils.FatalError(NAME, "CompileFile", "file \"{0}\" not created", lstFileName);
|
---|
59 | return Utils.EXIT_FAILURE;
|
---|
60 | } // try/catch
|
---|
61 | StreamWriter lstWriter = null;
|
---|
62 | try {
|
---|
63 | lstWriter = new StreamWriter(lstFs);
|
---|
64 | StreamReader srcFsReader = null;
|
---|
65 | try { // open the source file a second time to generate the error listing
|
---|
66 | srcFsReader = new StreamReader(new FileStream(srcFileName, FileMode.Open));
|
---|
67 | lstWriter.WriteLine(NAME + " (file: \"{0}\")", srcFileName);
|
---|
68 | Errors.GenerateListing(srcFsReader, lstWriter, Errors.ListingShape.longListing);
|
---|
69 | } finally {
|
---|
70 | srcFsReader.Close();
|
---|
71 | srcFsReader.Dispose();
|
---|
72 | } // try/finally
|
---|
73 | Console.WriteLine("{0} error(s) detected", Errors.NumOfErrors());
|
---|
74 | } finally {
|
---|
75 | lstWriter.Close();
|
---|
76 | lstWriter.Dispose();
|
---|
77 | } // try/finally
|
---|
78 | } else
|
---|
79 | Console.WriteLine("no errors detected");
|
---|
80 | } finally {
|
---|
81 | if (Lex.src != null) {
|
---|
82 | Lex.src.Close();
|
---|
83 | Lex.src.Dispose();
|
---|
84 | Lex.src = null;
|
---|
85 | } // if
|
---|
86 | Utils.Modules(Utils.ModuleAction.resetModule);
|
---|
87 | } // try/finally to make sure srcFs and srcReader are closed
|
---|
88 | return Utils.EXIT_SUCCESS;
|
---|
89 | } // CompileFile
|
---|
90 |
|
---|
91 |
|
---|
92 | public static void Main(String[] args) {
|
---|
93 | //-----------------------------------|----------------------------------------
|
---|
94 | int result = 0;
|
---|
95 |
|
---|
96 | // --- install modules ---
|
---|
97 | Utils.InstallModule("Utils", new Utils.ModuleMethodDelegate(Utils.UtilsMethod ));
|
---|
98 | Utils.InstallModule("Sets", new Utils.ModuleMethodDelegate(Sets.SetsMethod ));
|
---|
99 | Utils.InstallModule("Errors", new Utils.ModuleMethodDelegate(Errors.ErrorsMethod));
|
---|
100 |
|
---|
101 | Utils.InstallModule("GPDefSyntaxAnalyzerLex", new Utils.ModuleMethodDelegate(GPDefSyntaxAnalyzerLex.GPDefSyntaxAnalyzerLexMethod));
|
---|
102 | Utils.InstallModule("GPDefSyntaxAnalyzerSem", new Utils.ModuleMethodDelegate(GPDefSyntaxAnalyzerSem.GPDefSyntaxAnalyzerSemMethod));
|
---|
103 | Utils.InstallModule("GPDefSyntaxAnalyzerSyn", new Utils.ModuleMethodDelegate(GPDefSyntaxAnalyzerSyn.GPDefSyntaxAnalyzerSynMethod));
|
---|
104 |
|
---|
105 | // --- initialize modules ---
|
---|
106 | Utils.Modules(Utils.ModuleAction.initModule);
|
---|
107 |
|
---|
108 | Errors.PushAbortMethod(new Errors.AbortMethod(Abort));
|
---|
109 |
|
---|
110 | Console.WriteLine("---------------------------");
|
---|
111 | Console.WriteLine(" {0} Compiler {1," + (5 - NAME.Length) +"} Version X ", NAME, "");
|
---|
112 | Console.WriteLine(" Frontend gen. with Coco-2");
|
---|
113 | Console.WriteLine("---------------------------");
|
---|
114 | Console.WriteLine();
|
---|
115 |
|
---|
116 | if (args.Length > 0) { // command line mode
|
---|
117 | interactiveMode = false;
|
---|
118 | Console.WriteLine();
|
---|
119 | int i = 0;
|
---|
120 | do {
|
---|
121 | Console.WriteLine("source file \"{0}\"", args[i]);
|
---|
122 | result = CompileFile(args[i]);
|
---|
123 | if (result != Utils.EXIT_SUCCESS)
|
---|
124 | Environment.Exit(result);
|
---|
125 | Console.WriteLine();
|
---|
126 | i++;
|
---|
127 | } while (i < args.Length);
|
---|
128 | } else { // args.Length == 0, interactive mode
|
---|
129 | interactiveMode = true;
|
---|
130 | for (;;) {
|
---|
131 | String srcFileName;
|
---|
132 | Utils.GetInputFileName("source file > ", out srcFileName);
|
---|
133 | if (srcFileName.Length > 0) {
|
---|
134 | result = CompileFile(srcFileName);
|
---|
135 | if (result != Utils.EXIT_SUCCESS)
|
---|
136 | Environment.Exit(result);
|
---|
137 | } // if
|
---|
138 | char answerCh;
|
---|
139 | do {
|
---|
140 | Console.WriteLine();
|
---|
141 | Console.Write("[c]ontinue or [q]uit > ");
|
---|
142 | answerCh = Char.ToUpper(Console.ReadKey().KeyChar);
|
---|
143 | } while (answerCh != 'C' && answerCh != 'Q');
|
---|
144 | if (answerCh == 'Q')
|
---|
145 | break;
|
---|
146 | else // answerCh == 'C'
|
---|
147 | Console.WriteLine();
|
---|
148 | } // for
|
---|
149 | } // else
|
---|
150 |
|
---|
151 | Utils.Modules(Utils.ModuleAction.cleanupModule);
|
---|
152 | Environment.Exit(Utils.EXIT_SUCCESS);
|
---|
153 |
|
---|
154 | } // Main
|
---|
155 |
|
---|
156 | } // GPDefSyntaxAnalyzer
|
---|
157 |
|
---|
158 | // End of GPDefSyntaxAnalyzer.cs
|
---|
159 | //=====================================|======================================== |
---|