Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
 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()
     });
 }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
 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 });
 }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
        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);
        }