public static Grammar LoadGrammar(string grammarFile, params string[] prerequisiteGrammars) { foreach (string prerequisite in prerequisiteGrammars) { var buildResult = DSLCompiler.Compile(prerequisite, $"{prerequisite}.xml"); if (buildResult.HasErrors) { WriteColored(ConsoleColor.Magenta, buildResult.TraceDiagnostics); return(null); } } var compilationResult = DSLCompiler.LoadGrammarFromFile(grammarFile); if (compilationResult.HasErrors) { WriteColored(ConsoleColor.Magenta, compilationResult.TraceDiagnostics); return(null); } if (compilationResult.Diagnostics.Count > 0) { WriteColored(ConsoleColor.Yellow, compilationResult.TraceDiagnostics); } return(compilationResult.Value); }
public void TestLearnAdd() { var grammar = DSLCompiler.LoadGrammarFromFile("../../../ProseDSLModels.grammar"); printGrammar(grammar); SynthesisEngine prose = new SynthesisEngine(grammar.Value); double[] inp1 = new double[4] { 10.9, 15.0, -14.5, 12.3 }; double[] out1 = add(inp1); var input = State.Create(grammar.Value.InputSymbol, inp1); var examples = new Dictionary <State, object> { { input, out1 } }; var spec = new ExampleSpec(examples); var learnedSet = prose.LearnGrammar(spec); var output = (double[])learnedSet.RealizedPrograms.First().Invoke(input); stdoutprogram(learnedSet.RealizedPrograms.First().ToString(), "Add"); Assert.AreEqual(23.7, output[0], 0.001d); TestContext.WriteLine("Running random exmaples for LearnAdd"); //test 1000 random examples for (int i = 0; i < 1000; ++i) { var iTmp = genRnd(); var inpTmp = State.Create(grammar.Value.InputSymbol, iTmp); var oTmp = add(iTmp); var outTmp = (double[])learnedSet.RealizedPrograms.First().Invoke(inpTmp); TestContext.WriteLine("Excpt [{0}]", string.Join(", ", oTmp)); TestContext.WriteLine("Actul [{0}]", string.Join(", ", outTmp)); Assert.AreEqual(oTmp[0], outTmp[0], 0.001d); } }
public void TestLearnSub() { var grammar = DSLCompiler.LoadGrammarFromFile("../../../ProseDSLModels.grammar"); printGrammar(grammar); SynthesisEngine prose = new SynthesisEngine(grammar.Value); double[] inp1 = new double[4] { 10.9, 15.0, -14.5, 12.3 }; double[] out1 = new double[4] { 0.0, 4.1, -25.4, 1.4 }; var input = State.Create(grammar.Value.InputSymbol, inp1); var examples = new Dictionary <State, object> { { input, out1 } }; var spec = new ExampleSpec(examples); var learnedSet = prose.LearnGrammar(spec); var output = (double[])learnedSet.RealizedPrograms.First().Invoke(input); Assert.AreEqual(0.0, output[0], 0.001d); Assert.AreEqual(4.1, output[1], 0.001d); Assert.AreEqual(-25.4, output[2], 0.001d); Assert.AreEqual(1.4, output[3], 0.001d); }
public Refazer4Python(string pathToGrammar = @"..\..\..\Tutor\synthesis\", string pathToDslLib = @"..\..\..\Tutor\bin\debug") { _pathToGrammar = pathToGrammar; _pathToDslLib = pathToDslLib; Grammar = DSLCompiler.LoadGrammarFromFile(pathToGrammar + @"Transformation.grammar", libraryPaths: new[] { pathToDslLib }); _prose = new SynthesisEngine(Grammar.Value, new SynthesisEngine.Config { LogListener = new LogListener() }); }
public void TestSubstringProgram() { var grammar = DSLCompiler.LoadGrammarFromFile("../../../substring.grammar"); printGrammar(grammar); var program = grammar.Value.ParseAST("Substring(x, AbsPos(7), AbsPos(15))", ASTSerializationFormat.HumanReadable); var input = State.Create(grammar.Value.InputSymbol, "Bjoern Hartmann"); var output = program.Invoke(input) as string; Assert.AreEqual("Hartmann", output); }
public SubmissionFixer(string pathToGrammar = @"..\..\..\Tutor\synthesis\", string pathToDslLib = @"..\..\Tutor\bin\debug") { ProsePrograms = new List <IEnumerable <ProgramNode> >(); UsedPrograms = new Dictionary <string, int>(); if (pathToDslLib == null) { pathToDslLib = "."; } if (pathToGrammar == null) { pathToGrammar = "../../../Tutor/synthesis/"; } grammar = DSLCompiler.LoadGrammarFromFile(pathToGrammar + @"Transformation.grammar", libraryPaths: new[] { pathToDslLib }); }
public void TestLearnStringTransformation() { var grammar = DSLCompiler.LoadGrammarFromFile("../../../substring.grammar"); printGrammar(grammar); SynthesisEngine prose = new SynthesisEngine(grammar.Value); var input = State.Create(grammar.Value.InputSymbol, "Bjoern Hartmann"); var examples = new Dictionary <State, object> { { input, "B. Hartmann" } }; var spec = new ExampleSpec(examples); var learnedSet = prose.LearnGrammar(spec); var output = learnedSet.RealizedPrograms.First().Invoke(input) as string; Assert.AreEqual("Hartmann, B.", output); }
public void testAvgVal() { var grammar = DSLCompiler.LoadGrammarFromFile("../../../ProseDSLModels.grammar"); printGrammar(grammar); var ast = grammar.Value.ParseAST("stall(stall(stall(div(add(x), len(x))))))", ASTSerializationFormat.HumanReadable); double[] numbers = new double[4] { 10.9, 15.0, -14.5, 12.3 }; var input = State.Create(grammar.Value.InputSymbol, numbers); var output = (double[])ast.Invoke(input); Assert.AreEqual(5.925, output[0], 0.001d); }