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