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)); }
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); }
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); }