public void Generate() { string input; using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("iSynaptic.CodeGeneration.Modeling.Domain.Ast.txt")) using (var reader = new StreamReader(stream)) { input = reader.ReadToEnd(); } var family = AbstractSyntaxTree.Parser.ParseString(input); var writer = new StringWriter(); var visitor = new AstGeneratingVisitor( writer, AbstractSyntaxTree.SymbolTableConstructionVisitor.BuildSymbolTable(family) ); visitor.Dispatch(family); Console.WriteLine(writer.GetStringBuilder().ToString()); }
public void CanGenerateAst() { var parser = Parser.Family(); AstNodeFamily family = parser.Parse(@"ast iSynaptic.CodeGeneration.Modeling.AbstractSyntaxTree { node AstNodeFamily(""Family"") { String Namespace; IAstConcept* Concepts; } contract IAstConcept(AstNodeFamily) { String TypeName; String* BaseTypes; String? ParentType; AstNodeProperty* Properties; } node AstNode(""Node"", AstNodeFamily) : IAstConcept { Boolean IsAbstract; Boolean IsPartial; String SimpleName; String TypeName; String? ParentType; String* BaseTypes; AstNodeProperty* Properties; } node AstNodeContract(""Contract"", AstNodeFamily) : IAstConcept { String TypeName; String? ParentType; String* BaseTypes; AstNodeProperty* Properties; } node AstNodeProperty(""Property"", IAstConcept) { String SimpleName; String Type; AstNodePropertyCardinality Cardinality; } }"); var writer = new StringWriter(); var visitor = new AstGeneratingVisitor( writer, SymbolTableConstructionVisitor.BuildSymbolTable(family) ); visitor.Dispatch(family); Console.WriteLine(writer.GetStringBuilder().ToString()); }