Beispiel #1
0
        public void Build()
        {
            var lingu = new LinguContext();

            var projectDir = DirRef.ProjectDir();
            var ponyDir    = projectDir.Dir("Ponies");

            Environment.CurrentDirectory = ponyDir;

            var file  = FileRef.From("./Pony.Grammar");
            var dumps = FileRef.From("./Pony").Add(".Out");

            var source = Source.FromFile(file);

            var parseTree = lingu.Try(source);

            if (parseTree != null)
            {
                new TreeDumper(dumps.Add(".Tree")).Dump(parseTree);

                var ast = new TreeBuilder().Visit(parseTree);

                if (ast != null)
                {
                    var grammar = new GrammarBuilder(ast).Build();

                    if (grammar != null)
                    {
                        new Dumper(grammar).Dump(dumps);

                        new CSharpWriter(grammar, file, ponyDir).Write();
                    }
                }
            }
        }
Beispiel #2
0
        private void BuildTree(string stem, string content)
        {
            Environment.CurrentDirectory = DirRef.ProjectDir().Dir("Grammar");

            var grammarSource = FileRef.From($"./{stem}.Grammar");

            var dests = FileRef.From(grammarSource.Directory + "/Out/" + grammarSource.BaseName).With(".Out");

            var raw = Parser.Parse(grammarSource);

            if (raw != null)
            {
                var builder = new Build.GrammarBuilder(raw);

                var grammar = builder.Build();
                new Dumper(grammar).Dump(dests);

                var ccOut = DirRef.ProjectDir().Dir("..").Dir("Lingu.CC").Dir("Gen");

                var csharp = new CSharpWriter(grammar, grammarSource, ccOut);
                csharp.Write();

                Debug.Assert(grammar.Eof != null);

                var dfaSet = new CompactDfaReader(new BinReader(new CompactDfaWriter(grammar).Write())).Read();

                //var dfaSet = new DfaSet(grammar.Dfas.Select(dfa => dfa.Convert()).ToArray(), grammar.StateToDfa, grammar.SpacingDfa.Convert());

                var context = new LinguContext(
                    grammar.Symbols,
                    grammar.Productions,
                    grammar.ParseTable,
                    dfaSet);

                Source source;

                if (File.Exists(content))
                {
                    source = Source.FromFile(content);
                }
                else
                {
                    source = Source.FromString(content);
                }

                var tree = context.Try(source);

                new TreeDumper(dests.Add(".Tree")).Dump(tree);
            }
        }
Beispiel #3
0
        public void Build(string name)
        {
            var lingu = new LinguContext();

            var projectDir = DirRef.ProjectDir();
            var ucdDir     = projectDir.Up.Dir("LinguUcd");

            Environment.CurrentDirectory = ucdDir;

            var sourceFile = ucdDir.File($"{name}.lug");
            var outputDir  = ucdDir.Dir("Generated");
            var dumps      = outputDir.File($"{name}.Out");

            var source = Source.FromFile(sourceFile);

            var parseTree = lingu.Try(source);

            if (parseTree != null)
            {
                new TreeDumper(dumps.Add(".Tree")).Dump(parseTree);

                var ast = new TreeBuilder().Visit(parseTree);

                if (ast != null)
                {
                    var grammar = new GrammarBuilder(ast).Build();

                    if (grammar != null)
                    {
                        new Dumper(grammar).Dump(dumps);

                        new CSharpWriter(grammar, sourceFile, outputDir).Write();
                    }
                }
            }
        }