Exemplo n.º 1
0
        public void AstTraverser_GivenANodeType_CallsProcess()
        {
            // Arrange:
            var tally = InitTally();

            var tracer = new Mock <IDebugTracer>().Object;

            var traverser = new AstTraverser(tracer);

            traverser.ProcessNode += node => tally[node.AstNodeType]++;
            var tree = BuildTree(tracer);

            // Act:
            traverser.Traverse(tree);

            // Assert:
            Assert.That(tally[AstNodeType.Syntax], Is.EqualTo(1));
            Assert.That(tally[AstNodeType.Statement], Is.EqualTo(2));
            Assert.That(tally[AstNodeType.Expression], Is.EqualTo(5));
            Assert.That(tally[AstNodeType.Term], Is.EqualTo(7));
            Assert.That(tally[AstNodeType.Factor], Is.EqualTo(8));
            Assert.That(tally[AstNodeType.ProdRef], Is.EqualTo(4));
            Assert.That(tally[AstNodeType.Terminal], Is.EqualTo(1));
            Assert.That(tally[AstNodeType.Paren], Is.EqualTo(1));
            Assert.That(tally[AstNodeType.Option], Is.EqualTo(1));
            Assert.That(tally[AstNodeType.KleeneStar], Is.EqualTo(1));
            Assert.That(tally[AstNodeType.Action], Is.EqualTo(10));
        }
Exemplo n.º 2
0
        static void Main(string[] args)
        {
            var loggerFactory = LoggerFactory.Create(builder =>
            {
                builder.ClearProviders();
            });
            var nullLogger = loggerFactory.CreateLogger("NULL");
            var tracer     = new DebugTracer(nullLogger);

            using var inStream = new FileStream(args[0], FileMode.Open);
            inStream.Seek(0, SeekOrigin.Begin);

            var scanner = new Scanner.Scanner(inStream);

            var astBuilder = new AstBuilder(new AstNodeFactory(tracer),
                                            new ProdInfoFactory(tracer),
                                            new Stack <IAstNode>(), tracer);

            var parser = new Parser.Parser(scanner, astBuilder);

            var rootNode = parser.ParseGoal();

            var traverser   = new AstTraverser(tracer);
            var outFileName = Path.GetDirectoryName(args[0]) + "\\Parser.cs";

            using var outStream    = new FileStream(outFileName, FileMode.Create);
            using var streamWriter = new StreamWriter(outStream);

            var gen = new CSharpGenerator(traverser, streamWriter);

            gen.Run(rootNode);
        }
Exemplo n.º 3
0
        public void Test01()
        {
            var loggerFactory = LoggerFactory.Create(builder =>
            {
                builder
                .AddFilter("ASTBuilder", LogLevel.Warning)
                .AddFilter("ASTTraverser", LogLevel.Warning)
                .AddFilter("CSGEN", LogLevel.Trace)
                .AddDebug();
            });
            var builderLogger = loggerFactory.CreateLogger("ASTBuilder");
            var builderTracer = new DebugTracer(builderLogger);

            var encoding = new UTF8Encoding();

            using var stream = new MemoryStream();
            stream.Write(encoding.GetBytes(TestCase1B));
            stream.Seek(0, SeekOrigin.Begin);

            var scanner    = new Scanner.Scanner(stream);
            var astBuilder = new AstBuilder(new AstNodeFactory(builderTracer),
                                            new ProdInfoFactory(builderTracer), new Stack <IAstNode>(), builderTracer);
            var parser   = new Parser.Parser(scanner, astBuilder);
            var rootNode = parser.ParseGoal();

            var traverserLogger = loggerFactory.CreateLogger("ASTTraverser");
            var traverserTracer = new DebugTracer(traverserLogger);
            var traverser       = new AstTraverser(traverserTracer);

            var output       = new MemoryStream();
            var streamWriter = new StreamWriter(stream);
            var gen          = new CSharpGenerator(traverser, streamWriter);

            gen.Run(rootNode);
        }