Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
07/19/13 00:31:12 (11 years ago)
Author:
gkronber
Message:

#2026 changed ATG to Coco/R syntax and use Coco/R (C#) to generate scanner and parser for GPDL

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.Problems.GPDL/GpdlCompiler/Program.cs

    r9528 r9724  
    1 // ATTENTION: Replace all occurences of GpdlCompiler by the compiler name!
    2 
    3 // GpdlCompiler.cs                                                        HDO, 2006-08-28
     1// GpdlCompiler.cs                                                        HDO, 2006-08-28
    42// -----
    53// Main program for compiler generated from GpdlCompiler.atg with Coco-2.
     
    75
    86using System;
    9 using System.IO;
    10 
    11 using Lex = GPDefLex;
    12 using Syn = GPDefSyn;
     7using HeuristicLab.Problems.GPDL;
    138
    149public class GpdlCompiler {
    1510
    16   private static String NAME = "GpdlCompiler";
    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     }
    41     catch (Exception) {
    42       Console.WriteLine("*** file \"{0}\" not found", srcFileName);
    43       return Utils.EXIT_FAILURE;
    44     } // try/catch
    45     try {
    46       Lex.src = new StreamReader(srcFs);
    47       Console.WriteLine("parsing ...");
    48       Syn.Parse();
    49       Lex.src.Close();
    50       Lex.src.Dispose();
    51       Lex.src = null;
    52       if (Errors.NumOfErrors() > 0) {
    53         Console.WriteLine("listing ...");
    54         String lstFileName = Path.ChangeExtension(srcFileName, ".lst");
    55         FileStream lstFs = null;
    56         try {
    57           lstFs = new FileStream(lstFileName, FileMode.Create);
    58         }
    59         catch (Exception) {
    60           Utils.FatalError(NAME, "CompileFile", "file \"{0}\" not created", lstFileName);
    61           return Utils.EXIT_FAILURE;
    62         } // try/catch
    63         StreamWriter lstWriter = null;
    64         try {
    65           lstWriter = new StreamWriter(lstFs);
    66           StreamReader srcFsReader = null;
    67           try { // open the source file a second time to generate the error listing
    68             srcFsReader = new StreamReader(new FileStream(srcFileName, FileMode.Open));
    69             lstWriter.WriteLine(NAME + " (file: \"{0}\")", srcFileName);
    70             Errors.GenerateListing(srcFsReader, lstWriter, Errors.ListingShape.longListing);
    71           }
    72           finally {
    73             srcFsReader.Close();
    74             srcFsReader.Dispose();
    75           } // try/finally
    76           Console.WriteLine("{0} error(s) detected", Errors.NumOfErrors());
    77         }
    78         finally {
    79           lstWriter.Close();
    80           lstWriter.Dispose();
    81         } // try/finally
    82       } else
    83         Console.WriteLine("no errors detected");
    84     }
    85     finally {
    86       if (Lex.src != null) {
    87         Lex.src.Close();
    88         Lex.src.Dispose();
    89         Lex.src = null;
    90       } // if
    91       Utils.Modules(Utils.ModuleAction.resetModule);
    92     } // try/finally to make sure srcFs and srcReader are closed
    93     return Utils.EXIT_SUCCESS;
    94   } // CompileFile
    95 
    96 
    9711  public static void Main(String[] args) {
    9812    //-----------------------------------|----------------------------------------
    99     int result = 0;
     13    if (args.Length > 0) {
     14      Scanner scanner = new Scanner(args[0]);
     15      Parser parser = new Parser(scanner);
     16      parser.Parse();
     17    } else
     18      Console.WriteLine("-- No source file specified");
     19  }
    10020
    101     // --- install modules ---
    102     Utils.InstallModule("Utils", new Utils.ModuleMethodDelegate(Utils.UtilsMethod));
    103     Utils.InstallModule("Sets", new Utils.ModuleMethodDelegate(Sets.SetsMethod));
    104     Utils.InstallModule("Errors", new Utils.ModuleMethodDelegate(Errors.ErrorsMethod));
    105 
    106     Utils.InstallModule("GPDefLex", new Utils.ModuleMethodDelegate(GPDefLex.GPDefLexMethod));
    107     Utils.InstallModule("GPDefSem", new Utils.ModuleMethodDelegate(GPDefSem.GPDefSemMethod));
    108     Utils.InstallModule("GPDefSyn", new Utils.ModuleMethodDelegate(GPDefSyn.GPDefSynMethod));
    109 
    110     // --- initialize modules ---
    111     Utils.Modules(Utils.ModuleAction.initModule);
    112 
    113     Errors.PushAbortMethod(new Errors.AbortMethod(Abort));
    114 
    115     Console.WriteLine("---------------------------");
    116     Console.WriteLine(" {0} Compiler {1," + (5 - NAME.Length) + "} Version X  ", NAME, "");
    117     Console.WriteLine(" Frontend gen. with Coco-2");
    118     Console.WriteLine("---------------------------");
    119     Console.WriteLine();
    120 
    121     if (args.Length > 0) { // command line mode
    122       interactiveMode = false;
    123       Console.WriteLine();
    124       int i = 0;
    125       do {
    126         Console.WriteLine("source file \"{0}\"", args[i]);
    127         result = CompileFile(args[i]);
    128         if (result != Utils.EXIT_SUCCESS)
    129           Environment.Exit(result);
    130         Console.WriteLine();
    131         i++;
    132       } while (i < args.Length);
    133     } else { // args.Length == 0, interactive mode
    134       interactiveMode = true;
    135       for (; ; ) {
    136         String srcFileName;
    137         Utils.GetInputFileName("source file > ", out srcFileName);
    138         if (srcFileName.Length > 0) {
    139           result = CompileFile(srcFileName);
    140           if (result != Utils.EXIT_SUCCESS)
    141             Environment.Exit(result);
    142         } // if
    143         char answerCh;
    144         do {
    145           Console.WriteLine();
    146           Console.Write("[c]ontinue or [q]uit > ");
    147           answerCh = Char.ToUpper(Console.ReadKey().KeyChar);
    148         } while (answerCh != 'C' && answerCh != 'Q');
    149         if (answerCh == 'Q')
    150           break;
    151         else // answerCh == 'C'
    152           Console.WriteLine();
    153       } // for
    154     } // else
    155 
    156     Utils.Modules(Utils.ModuleAction.cleanupModule);
    157     Environment.Exit(Utils.EXIT_SUCCESS);
    158 
    159   } // Main
    160 
    161 } // GpdlCompiler
    162 
    163 // End of GpdlCompiler.cs
    164 //=====================================|========================================
     21}
Note: See TracChangeset for help on using the changeset viewer.