/// <summary> /// Generate Code /// </summary> /// <param name="compilationUnit"> Compilation Unit resulting from TypeCobol Parsing</param> /// <param name="columns">Columns layout</param> public void Generate(CompilationUnit compilationUnit, ColumnsLayout columns = ColumnsLayout.FreeTextFormat) { //Check if there is any error in diags if (compilationUnit.AllDiagnostics().Any(d => d.Info.Severity == Compiler.Diagnostics.Severity.Error)) { AnalyticsWrapper.Telemetry.TrackEvent("[Generation] Diagnostics Detected", EventType.Genration); throw new GenerationException("Unable to generate because of error diagnostics", null, null, false, false); } AnalyticsWrapper.Telemetry.TrackEvent("[Generation] Started", EventType.Genration); // STEP 0: Initialize the global values. RootNode = compilationUnit.ProgramClassDocumentSnapshot.Root; SymTable = compilationUnit.ProgramClassDocumentSnapshot.Root.SymbolTable; Layout = columns; //Create the Initial target document. CreateTargetDocument(); // STEP 1: modify tree to adapt it to destination language // 1.1 Run the Qualifier action on this node Qualifier qualifier = new Qualifier(this, RootNode); qualifier.Execute(); // 1.2 Perform other actions Actions.Perform(RootNode); // STEP 2: convert tree to destination language code TreeToCode(); AnalyticsWrapper.Telemetry.TrackEvent("[Generation] Ended", EventType.Genration); }
public override void Compare(CompilationUnit compilationUnit, StreamReader reader) { IList <Diagnostic> diagnostics = compilationUnit.AllDiagnostics(); StringBuilder sb = new StringBuilder(); foreach (var diagnostic in diagnostics) { sb.AppendLine(diagnostic.ToString()); } sb.AppendLine("--- Tokens ---"); foreach (var tokensLine in compilationUnit.TokensLines) { sb.AppendLine("---------------------------------"); sb.AppendLine("_" + tokensLine.SourceText + "_"); foreach (var sourceToken in tokensLine.SourceTokens) { sb.AppendLine(" _" + sourceToken.SourceText + "_ " + sourceToken); } } string result = sb.ToString(); if (debug) { Console.WriteLine("\"" + paths.SamplePath + "\" result:\n" + result); } ParserUtils.CheckWithResultReader(paths.SamplePath, result, reader); }
public override void Compare(CompilationUnit compilationUnit, StreamReader reader) { IList <Diagnostic> diagnostics = compilationUnit.AllDiagnostics(); ProgramClassDocument pcd = compilationUnit.ProgramClassDocumentSnapshot; Compare(pcd.Root.Programs, pcd.Root.Classes, diagnostics, reader); }
public override void Compare(CompilationUnit compilationUnit, StreamReader reader) { var sortedDiags = compilationUnit.AllDiagnostics().OrderBy(d => d.Line).GetEnumerator(); //Create result file //Read original source file StreamReader sourceReader = new StreamReader(new FileStream(paths.SamplePath, FileMode.Open)); StringBuilder resultBuilder = new StringBuilder(); int linePos = 0; Diagnostic nextDiag = sortedDiags.MoveNext() ? sortedDiags.Current : null; while (!sourceReader.EndOfStream) { string line = sourceReader.ReadLine(); linePos++; while (nextDiag != null && nextDiag.Line <= linePos) { resultBuilder.Append(nextDiag).Append("\n"); nextDiag = sortedDiags.MoveNext() ? sortedDiags.Current : null; } resultBuilder.Append(line).Append("\n"); } //Print all remaining diags while (nextDiag != null) { resultBuilder.Append(nextDiag).Append("\n"); nextDiag = sortedDiags.MoveNext() ? sortedDiags.Current : null; } string result = resultBuilder.ToString(); if (debug) { Console.WriteLine("\"" + paths.SamplePath + "\" result:\n" + result); } ParserUtils.CheckWithResultReader(paths.SamplePath, result, reader); }
public override void Compare(CompilationUnit compilationUnit, StreamReader reader) { ProgramClassDocument pcd = compilationUnit.ProgramClassDocumentSnapshot; IList <Diagnostic> diagnostics = compilationUnit.AllDiagnostics(); StringBuilder sb = new StringBuilder(); foreach (var diagnostic in diagnostics) { sb.AppendLine(diagnostic.ToString()); } sb.AppendLine("--- Nodes ---"); sb.Append(pcd.Root); string result = sb.ToString(); if (debug) { Console.WriteLine("\"" + paths.SamplePath + "\" result:\n" + result); } ParserUtils.CheckWithResultReader(paths.SamplePath, result, reader); }
public virtual void Compare(CompilationUnit result, StreamReader reader) { //Warning by default we only want All codeElementDiagnostics EXCEPT Node Diagnostics Compare(result.CodeElementsDocumentSnapshot.CodeElements, result.AllDiagnostics(false), reader); }