public async Task GenerateImplementation(PreAssignment assignment, DirectoryHandler handler) { var solutionRoot = EngineFileUtilities.ExtractZip(handler.Directory, "Solution", assignment.Solution.Files); var solution = AbstractSyntaxTreeGenerator.CreateFromFile(handler, Path.Combine(solutionRoot, assignment.Filename)); var solutionClass = GetClassAbstractSyntaxTreeNode(assignment, solution); ValidateMethodDeclarations(assignment, solutionClass); var unitTests = await UnitTestGenerator.GenerateResults(assignment, handler, solutionRoot); assignment.TestProject.UnitTests = unitTests; assignment.PreAssignmentReport = new PreAssignmentSucessReport(); await PreAssignmentRepository.Update(assignment); }
public static bool TryAnalyze( string input, out string expandedInput, out ProgramNode program, out IEnumerable <Message> messages) { program = null; var analysisMessages = new List <Message>(); messages = analysisMessages; var isExpansionSucceeded = TryExpandMacros( input, out string output, out IEnumerable <Message> expasionMessages); analysisMessages.AddRange(expasionMessages); if (isExpansionSucceeded) { expandedInput = output; } else { expandedInput = input; return(false); } var inputStream = CharStreams.fromstring(output); var lexer = new GoToLexer(inputStream); var lexerErrorListener = new LexerErrorListener(); lexer.AddErrorListener(lexerErrorListener); analysisMessages.AddRange(lexerErrorListener.Messages); var tokenStream = new CommonTokenStream(lexer); var parser = new GoToParser(tokenStream); var parserErrorListener = new ParserErrorListener(); parser.AddErrorListener(parserErrorListener); var contextSyntaxTree = parser.program(); analysisMessages.AddRange(parserErrorListener.Messages); var listener = new SemanticListener(); ParseTreeWalker.Default.Walk(listener, contextSyntaxTree); analysisMessages.AddRange(listener.Messages); if (AreThereErrors(messages)) { return(false); } var abstractSyntaxTreeGenerator = new AbstractSyntaxTreeGenerator(); program = abstractSyntaxTreeGenerator.VisitProgram(contextSyntaxTree) as ProgramNode; SemanticAnalyzer.Check(program, ref analysisMessages); if (AreThereErrors(messages)) { return(false); } return(true); }
public static CompileResult CompileString(string subject, string fileName, GraphQLGenerationOptions options) { var document = new AbstractSyntaxTreeGenerator().ParseDocument(subject ?? string.Empty); return(SyntaxCompiler.Compile(document, fileName, options)); }