示例#1
0
 protected VisualBasic6Parser.ModuleContext ParseInputSource(string source)
 {
     using (MemoryStream memStm = new MemoryStream(Encoding.ASCII.GetBytes(source)))
     {
         return(VisualBasic6Parser.ParseSource(memStm));
     }
 }
示例#2
0
 public VB6ModuleCodeModelFactory(SourceFileTypeEnum fileType, VisualBasic6Lexer vb6Lexer, VisualBasic6Parser vb6Parser, CommonTokenStream commonTokenStream)
 {
     _fileType          = fileType;
     _vb6Lexer          = vb6Lexer;
     _vb6Parser         = vb6Parser;
     _commonTokenStream = commonTokenStream;
 }
示例#3
0
        static void Main(string[] args)
        {
            Console.WriteLine("We are starting");

            // if (args.Length < 1) {
            //     Console.WriteLine("You need a path");
            //     return;
            // }

            // string path = @"F:\vb6\TestProj\Class1.cls";
            string path = @"F:\vb6\TestProj\Form1.frm";
            string text = null;

            using (var reader = new StreamReader(File.Open(path, FileMode.Open))) {
                text = reader.ReadToEnd();
            }

            var stream      = new AntlrInputStream(text);
            var lexer       = new VisualBasic6Lexer(stream);
            var tokenStream = new CommonTokenStream(lexer);
            var parser      = new VisualBasic6Parser(tokenStream);
            var ctx         = parser.startRule();
            var treeWalker  = new ParseTreeWalker();

            if (!parser.BuildParseTree)
            {
                throw new Exception("We are not built");
            }
            treeWalker.Walk(new VB6Listener(), ctx);
            Console.ReadKey();
        }
示例#4
0
        private void parseBtn_Click(object sender, EventArgs e)
        {
#if DEBUG && HELLO
            String       input  = editor.Text;
            ICharStream  stream = CharStreams.fromstring(input);
            ITokenSource lexer  = new HelloLexer(stream);
            ITokenStream tokens = new CommonTokenStream(lexer);
            HelloParser  parser = new HelloParser(tokens);

            HelloCustomListener helloListener = new HelloCustomListener();
            parser.r().EnterRule(helloListener);
#elif DEBUG && ADVANCED
            String             input  = editor.Text;
            ICharStream        stream = CharStreams.fromstring(input);
            ITokenSource       lexer  = new VisualBasic6Lexer(stream);
            ITokenStream       tokens = new CommonTokenStream(lexer);
            VisualBasic6Parser parser = new VisualBasic6Parser(tokens);
            IParseTree         tree   = parser.startRule();

            ParseTreeWalker            walker   = new ParseTreeWalker();
            VisualBasic6CustomListener listener = new VisualBasic6CustomListener();
            walker.Walk(listener, tree);

            //parser.startRule().EnterRule(listener);
#endif
        }
示例#5
0
 internal VBBaseModule(VisualBasic6Lexer vb6Lexer, VisualBasic6Parser vb6Parser, CommonTokenStream commonTokenStream, ParserRuleContext context) : base(context)
 {
     VB6Lexer             = vb6Lexer;
     VB6Parser            = vb6Parser;
     VB6CommonTokenStream = commonTokenStream;
     Scope = new VBScope(null, this, VBProgramScope.Module);
     ConversionMessageList = new ReadOnlyCollection <ConversionMessageBase>(_conversionMessageList);
 }
示例#6
0
        public VBBaseModel FirstModel = null;     // The first model created by this visitor.

        internal VB6CodeModelVisitor(VBBaseModule rootModule, VBBaseCodeModel parentCodeBlock, VisualBasic6Lexer vb6Lexer, VisualBasic6Parser vb6Parser, CommonTokenStream commonTokenStream)
        {
            _rootModule        = rootModule;
            _vb6Lexer          = vb6Lexer;
            _vb6Parser         = vb6Parser;
            _commonTokenStream = commonTokenStream;
            _parentCodeBlock   = parentCodeBlock;

            _codeModelFactory = new VB6CodeModelFactory(_rootModule, _parentCodeBlock);
        }
示例#7
0
        static void Main(string[] args)
        {
            var inputFile  = @"Test2.frm";
            var outputFile = @"Test.vb";

            var parseTree = VisualBasic6Parser.ParseSource(inputFile);
            var codeGen   = new ClassModuleCodeGenerator(parseTree);

            using (StreamWriter output = new StreamWriter(outputFile))
            {
                output.Write(codeGen.GenerateCode());
            }
        }
示例#8
0
        private void ConvertCodeFile(VB6SourceFile vb6File, string vb6CodeFilePath, string vbNetCodeFilePath)
        {
            var sr     = new StreamReader(vb6CodeFilePath);
            var source = sr.ReadToEnd();

            sr.Close();
            sr.Dispose();

            var processedCode = PreprocessCodeFile(source);
            var lineCount     = processedCode.Split(new[] { Environment.NewLine }, StringSplitOptions.None).Length;

            AntlrInputStream   inputStream       = new AntlrInputStream(processedCode);
            VisualBasic6Lexer  vb6Lexer          = new VisualBasic6Lexer(inputStream);
            CommonTokenStream  commonTokenStream = new CommonTokenStream(vb6Lexer); // TokenConstants.HiddenChannel
            VisualBasic6Parser vb6Parser         = new VisualBasic6Parser(commonTokenStream);

            vb6Parser.AddErrorListener(new VisualBasic6ErrorListener());

            // Parse the file.
            var ctx = vb6Parser.module();

            if ((lineCount != vb6Lexer.Line) || (vb6Parser.NumberOfSyntaxErrors > 0))
            {
                throw new Exception($"Total lines: [{lineCount}] Parsed lines: [{vb6Lexer.Line}], NumberOfSyntaxErrors: [{vb6Parser.NumberOfSyntaxErrors}]");
            }

            var codeModelFactory = new VB6ModuleCodeModelFactory(vb6File.SourceFileType, vb6Lexer, vb6Parser, commonTokenStream);
            var model            = codeModelFactory.CreateModuleCodeModels(ctx);

            // Convert to VB.Net
            var writer = new VBNetCodeFileWriter(vbNetCodeFilePath);

            writer.BeginWrite();

            model.Convert(writer);
            writer.EndWrite();

            ctx               = null;
            source            = null;
            processedCode     = null;
            inputStream       = null;
            commonTokenStream = null;
            vb6Lexer          = null;
            vb6Parser         = null;
        }
示例#9
0
        internal VB6ModuleVisitor(VBBaseModule rootModule, VisualBasic6Lexer vb6Lexer, VisualBasic6Parser vb6Parser, CommonTokenStream commonTokenStream)
        {
            _rootModule        = rootModule;
            _vb6Lexer          = vb6Lexer;
            _vb6Parser         = vb6Parser;
            _commonTokenStream = commonTokenStream;

            // Filter out VB6 generated comments. Just discard all comments until the last Attribute statement. (Look at VB6 source file with notepad instead of VB6 IDE. It is not shown in IDE.)
            var lastAttributeStmt = (from itm in _commonTokenStream.Get(0, _commonTokenStream.Size)
                                     where (itm.Type == VisualBasic6Parser.ATTRIBUTE)
                                     select itm).LastOrDefault();

            if (lastAttributeStmt != null)
            {
                // Note: This will get token position for the keyword "Attribute", not very accurate, but enough to start.
                _rootModule.LastScanTokenIndex = lastAttributeStmt.TokenIndex;
            }
        }
示例#10
0
        private bool ConvertCodeFile(Stream inputStream, string outputPath, string name, CompilationUnit compilationUnit)
        {
            var input  = new AntlrInputStream(inputStream);
            var lexer  = new VisualBasic6Lexer(input);
            var tokens = new CommonTokenStream(lexer);
            var parser = new VisualBasic6Parser(tokens);
            var tree   = parser.startRule();

            var visitor = new ESCVisitor(name, compilationUnit);

            foreach (var node in visitor.Visit(tree))
            {
                // Just enumerate it all
            }

            var result = compilationUnit.Generate(name);

            File.WriteAllText(outputPath, result);

            return(true);
        }
示例#11
0
 internal VBStandardModule(VisualBasic6Lexer vb6Lexer, VisualBasic6Parser vb6Parser, CommonTokenStream commonTokenStream, ParserRuleContext context) : base(vb6Lexer, vb6Parser, commonTokenStream, context)
 {
 }