コード例 #1
0
        private static void CompileFile(Stream fileStream, string fileName, StreamWriter outStream, TypeStorage typeStorage,
                                        ILogger logger, ILogger treeLogger, INameConvertor nameConvertor)
        {
            logger.Log(String.Format("----Файл {0}----", fileName));

            var stream = new ANTLRInputStream(fileStream);
            var lexer  = new PlsqlLexer(stream);
            var parser = new PlsqlParser(new CommonTokenStream(lexer));
            var tree   = parser.program().Tree as CommonTree;

            if (treeLogger != null)
            {
                treeLogger.Log(ASTPrinter.Print(tree));
            }

            var  semanticAnalyser = new SemanticAnalyser(typeStorage, logger);
            bool res = semanticAnalyser.Check(tree);


            if (res)
            {
                var optimizer = new Optimizer();
                optimizer.Optimize(tree);

                var    codegenerator = new Codegenerator(nameConvertor);
                string code          = codegenerator.Generate(tree, typeStorage);

                outStream.Write(code);
            }

            logger.Log(string.Format("--------", fileName));
        }
コード例 #2
0
        public ConstCodeGenerator(INameConvertor nameConvertor, IValueConvertor valueConvertor)
        {
            _typeHelper = new TypeHelper();

            _valueConvertor = valueConvertor;
            _nameConvertor  = nameConvertor;
        }
コード例 #3
0
ファイル: ClassBuilder.cs プロジェクト: xb6783746/plsql--msil
        public ClassBuilder(ClassType classType, INameConvertor nameConvertor)
        {
            ClassType          = classType;
            this.nameConvertor = nameConvertor;

            Build(classType);

            BuildConstructor();
        }
コード例 #4
0
        public MethodBuilder(MethodInfo methodInfo, bool isEntryPoint, INameConvertor nameConvertor)
            : base(nameConvertor)
        {
            this.MethodInfo = methodInfo;

            template.Replace("{__entryPoint}", isEntryPoint? ".entrypoint" : "");

            Build(methodInfo);
        }
コード例 #5
0
        public CodeGeneratorFactory(INameConvertor nameConvertor, IValueConvertor valueConvertor)
        {
            _valueConvertor = valueConvertor;
            _nameConvertor  = nameConvertor;

            _typeCodeGenerators = new Dictionary <OutputType, ICodeGenerator>();
            _typeCodeGenerators[OutputType.Enum]      = new EnumCodeGenerator(_nameConvertor);
            _typeCodeGenerators[OutputType.Interface] = new InterfaceCodeGenerator(_nameConvertor);
            _typeCodeGenerators[OutputType.Class]     = new ClassCodeGenerator(_nameConvertor, _valueConvertor);
            _typeCodeGenerators[OutputType.Const]     = new ConstCodeGenerator(_nameConvertor, _valueConvertor);
        }
コード例 #6
0
ファイル: Codegen.cs プロジェクト: xb6783746/plsql--msil
        public string Generate(CommonTree tree, TypeStorage types, INameConvertor nameConvertor)
        {
            this.types  = types;
            typeBuilder = new TypesBuilder(types);

            builder = new ModuleBuilder(types.Libs, nameConvertor);

            var defs = tree.Children.Where(x => x is ClassDefNode || x is EntryPointNode);

            var context = new CodegenContext();

            foreach (dynamic item in defs)
            {
                Visit(item, context);
            }

            return(builder.Generate());
        }
コード例 #7
0
 public ValueConvertor(IEnumerable <TypeDefinition> typeDefinitions, INameConvertor nameConvertor)
 {
     _nameConvertor  = nameConvertor;
     _typeDictionary = typeDefinitions.ToDictionary(x => x.Type, x => x);
 }
コード例 #8
0
 public PackageBuilder(PackageType packageType, INameConvertor nameConvertor)
     : base(packageType, nameConvertor)
 {
     template.Replace("{__innerTypes}", GetInnerTypes(packageType));
 }
コード例 #9
0
 public EnumCodeGenerator(INameConvertor nameConvertor)
 {
     _nameConvertor = nameConvertor;
 }
コード例 #10
0
 public MethodBuilder(MethodInfo methodInfo, INameConvertor nameConvertor)
     : this(methodInfo, false, nameConvertor)
 {
 }
コード例 #11
0
 public ModuleBuilder(List <LibraryInfo> libs, INameConvertor nameConvertor)
 {
     BuildAssemblies(libs);
     this.nameConvertor = nameConvertor;
 }
 public InterfaceCodeGenerator(INameConvertor nameConvertor)
 {
     _typeHelper    = new TypeHelper();
     _nameConvertor = nameConvertor;
 }
コード例 #13
0
 public ConstructorBuilder(ConstructorInfo type, INameConvertor nameConvertor)
     : base(type, nameConvertor)
 {
     Fill(type);
 }
コード例 #14
0
 public EntryPointBuilder(MethodInfo methodInfo, INameConvertor nameConvertor)
     : base(methodInfo, true, nameConvertor)
 {
 }
コード例 #15
0
 public CommandBuilder(INameConvertor nameConvertor)
 {
     commandNames       = CommandNames.Instance;
     this.nameConvertor = nameConvertor;
 }
コード例 #16
0
        public Codegenerator(INameConvertor nameConvertor)
        {
            passes.Add(new AssignPass());

            this.nameConvertor = nameConvertor;
        }
コード例 #17
0
        private string Generate(CommonTree tree, INameConvertor nameConvertor, TypeStorage types)
        {
            var codegenerator = new Codegenerator(nameConvertor);

            return(codegenerator.Generate(tree, types));
        }