示例#1
0
 public StatementTranslator(CodeGenerator gen, SymbolGenerator gensym)
 {
     this.gen        = gen;
     this.gensym     = gensym;
     this.xlat       = new ExpTranslator(gen, gensym);
     this.properties = new Dictionary <Decorated, PropertyDefinition>();
 }
        private string XlatMember(string pyModule)
        {
            var rdr   = new StringReader(pyModule);
            var lex   = new Syntax.Lexer("foo.py", rdr);
            var par   = new Syntax.Parser("foo.py", lex);
            var stm   = par.stmt();
            var unt   = new CodeCompileUnit();
            var gen   = new CodeGenerator(unt, "test", "testModule");
            var sym   = new SymbolGenerator();
            var types = new TypeReferenceTranslator(new Dictionary <Node, DataType>());
            var xlt   = new StatementTranslator(types, gen, sym, new HashSet <string>());

            stm[0].Accept(xlt);
            var pvd    = new CSharpCodeProvider();
            var writer = new StringWriter();

            foreach (CodeNamespace ns in unt.Namespaces)
            {
                foreach (var member in ns.Types[0].Members)
                {
                    pvd.GenerateCodeFromMember(
                        member, writer,
                        new CodeGeneratorOptions
                    {
                    });
                    writer.WriteLine();
                }
            }
            return(writer.ToString());
        }
示例#3
0
        private string XlatModule(string pyModule)
        {
            var rdr = new StringReader(pyModule);
            var lex = new Syntax.Lexer("foo.py", rdr);
            var par = new Syntax.Parser("foo.py", lex);
            var stm = par.stmt();
            var unt = new CodeCompileUnit();
            var gen = new CodeGenerator(unt, "test", "testModule");
            var sym = new SymbolGenerator();
            var xlt = new StatementTranslator(gen, sym);

            stm.Accept(xlt);
            var pvd    = new CSharpCodeProvider();
            var writer = new StringWriter();

            foreach (CodeNamespace ns in unt.Namespaces)
            {
                foreach (CodeNamespaceImport imp in ns.Imports)
                {
                    writer.WriteLine("using {0};", SanitizeNamespace(imp.Namespace, gen));
                }
                foreach (CodeTypeDeclaration type in ns.Types)
                {
                    pvd.GenerateCodeFromType(
                        type,
                        writer,
                        new CodeGeneratorOptions
                    {
                    });
                }
            }
            return(writer.ToString());
        }
示例#4
0
 public ExpTranslator(TypeReferenceTranslator types, CodeGenerator gen, SymbolGenerator gensym)
 {
     this.types     = types;
     this.m         = gen;
     this.gensym    = gensym;
     this.intrinsic = new IntrinsicTranslator(this);
 }
示例#5
0
        public void VisitClass(ClassDef c)
        {
            if (VisitDecorators(c))
            {
                return;
            }
            var baseClasses = c.args.Select(a => GenerateBaseClassName(a)).ToList();
            var comments    = ConvertFirstStringToComments(c.body.stmts);
            var gensym      = new SymbolGenerator();
            var stmtXlt     = new StatementTranslator(types, gen, gensym, new HashSet <string>());

            stmtXlt.currentClass = c;
            stmtXlt.properties   = FindProperties(c.body.stmts);
            var csClass = gen.Class(
                c.name.Name,
                baseClasses,
                () => GenerateFields(c),
                () => c.body.Accept(stmtXlt));

            csClass.Comments.AddRange(comments);
            if (customAttrs != null)
            {
                csClass.CustomAttributes.AddRange(customAttrs);
                customAttrs = null;
            }
        }
示例#6
0
        public CodeMemberMethod Generate()
        {
            this.gensym   = new SymbolGenerator();
            this.xlat     = new ExpTranslator(gen, gensym);
            this.stmtXlat = new StatementTranslator(gen, gensym);

            return(Generate(CreateFunctionParameters(args))); // () => bodyGenerator(f.body));
        }
示例#7
0
 public StatementTranslator(TypeReferenceTranslator types, CodeGenerator gen, SymbolGenerator gensym, HashSet <string> globals)
 {
     this.types      = types;
     this.gen        = gen;
     this.gensym     = gensym;
     this.xlat       = new ExpTranslator(types, gen, gensym);
     this.properties = new Dictionary <Statement, PropertyDefinition>();
     this.globals    = globals;
 }
示例#8
0
 public MethodGenerator(FunctionDef f, string fnName, List <Parameter> args, bool isStatic, CodeGenerator gen)
 {
     this.f        = f;
     this.fnName   = fnName;
     this.args     = args;
     this.isStatic = isStatic;
     this.gen      = gen;
     this.gensym   = new SymbolGenerator();
     this.xlat     = new ExpTranslator(gen, gensym);
     this.stmtXlat = new StatementTranslator(gen, gensym);
 }
示例#9
0
        public void VisitClass(ClassDef c)
        {
            var baseClasses = c.args.Select(a => GenerateBaseClassName(a)).ToList();
            var comments    = ConvertFirstStringToComments(c.body.stmts);
            var gensym      = new SymbolGenerator();
            var stmtXlt     = new StatementTranslator(gen, gensym);

            stmtXlt.currentClass = c;
            var csClass = gen.Class(c.name.Name, baseClasses, () => c.body.Accept(stmtXlt));

            csClass.Comments.AddRange(comments);
            if (customAttrs != null)
            {
                csClass.CustomAttributes.AddRange(customAttrs);
                customAttrs = null;
            }
        }
示例#10
0
        string Xlat(string pyExp)
        {
            var rdr = new StringReader(pyExp);
            var lex = new Syntax.Lexer("foo.py", rdr);
            var par = new Syntax.Parser("foo.py", lex);
            var exp = par.test();

            Debug.Print("{0}", exp);
            var sym    = new SymbolGenerator();
            var xlt    = new ExpTranslator(new CodeGenerator(new CodeCompileUnit(), "", "test"), sym);
            var csExp  = exp.Accept(xlt);
            var pvd    = new CSharpCodeProvider();
            var writer = new StringWriter();

            pvd.GenerateCodeFromExpression(csExp, writer,
                                           new CodeGeneratorOptions
            {
            });
            return(writer.ToString());
        }
示例#11
0
 public MethodGenerator(
     FunctionDef f,
     string fnName,
     List <Parameter> args,
     bool isStatic,
     bool isAsync,
     TypeReferenceTranslator types,
     CodeGenerator gen)
 {
     this.f        = f;
     this.fnName   = fnName;
     this.args     = args;
     this.isStatic = isStatic;
     this.isAsync  = isAsync;
     this.gen      = gen;
     this.gensym   = new SymbolGenerator();
     this.types    = new TypeReferenceTranslator(new Dictionary <Node, DataType>());
     this.xlat     = new ExpTranslator(this.types, gen, gensym);
     this.globals  = new HashSet <string>();
     this.stmtXlat = new StatementTranslator(types, gen, gensym, globals);
 }
示例#12
0
 public ExpTranslator(CodeGenerator gen, SymbolGenerator gensym)
 {
     this.m      = gen;
     this.gensym = gensym;
 }
示例#13
0
 public StatementTranslator(CodeGenerator gen, SymbolGenerator gensym)
 {
     this.gen    = gen;
     this.gensym = gensym;
     this.xlat   = new ExpTranslator(gen, gensym);
 }