Parses the Python language grammar
Esempio n. 1
0
 private void RunTest(string pyExp)
 {
     var lexer =  new Lexer("foo.py", new StringReader(pyExp));
     var parser = new Parser("foo.py", lexer);
     var exp = parser.test();
     exp.Accept(new ExpNameDiscovery(syms));
 }
Esempio n. 2
0
 public void Translate(string filename, TextReader input, TextWriter output)
 {
     Debug.Print("Translating module {0} in namespace {1}", moduleName, nmspace);
     var lex = new Lexer(filename, input);
     var par = new Parser(filename, lex);
     var stm = par.Parse();
     var unt = new CodeCompileUnit();
     var gen = new CodeGenerator(unt, nmspace, Path.GetFileNameWithoutExtension(moduleName));
     var xlt = new ModuleTranslator(gen);
     xlt.Translate(stm);
     var pvd = new CSharpCodeProvider();
     pvd.GenerateCodeFromCompileUnit(unt, output, new CodeGeneratorOptions { });
 }
Esempio n. 3
0
        /// <summary>
        /// Returns the syntax tree for <paramref name="path" />. May find and/or create a
        /// cached copy in the mem cache or the disk cache.
        /// 
        /// <param name="path">Absolute path to a source file.</param>
        /// <returns>The AST, or <code>null</code> if the parse failed for any reason</returns>
        /// </summary>
        public Module getAST(string path)
        {
            // Cache stores null value if the parse failed.
            Module module;
            if (cache.TryGetValue(path, out module))
            {
                return module;
            }

            // Might be cached on disk but not in memory.
            module = GetSerializedModule(path);
            if (module != null)
            {
                LOG.Verbose("Reusing " + path);
                cache[path] = module;
                return module;
            }

            module = null;
            try
            {
                LOG.Verbose("parsing " + path);
                var lexer = new Lexer(path, fs.CreateStreamReader(path));
                var parser = new Parser(path, lexer);
                var moduleStmts = parser.Parse().ToList();
                int posStart = 0;
                int posEnd = 0;
                if (moduleStmts.Count > 0)
                {
                    posStart = moduleStmts[0].Start;
                    posEnd = moduleStmts.Last().End;
                }
                module = new Module(
                    analyzer.ModuleName(path),
                    new SuiteStatement(moduleStmts, path, posStart, posEnd),
                    path, posStart, posEnd);
            }
            finally
            {
                cache[path] = module;  // may be null
            }
            return module;
        }
Esempio n. 4
0
 private Statement ParseSuite(string input)
 {
     var lex = Lex(input);
     lex.Get();
     var par = new Parser("foo.py", lex);
     return par.suite();
 }
Esempio n. 5
0
 private Statement ParseStmt(string input)
 {
     var lex = Lex(input);
     var par = new Parser("foo.py", lex);
     return par.stmt();
 }
Esempio n. 6
0
 private Statement ParseFuncdef(string input)
 {
     var lex = Lex(input);
     var par = new Parser("foo.py", lex);
     return par.funcdef();
 }
Esempio n. 7
0
 private Exp ParseExp(string input)
 {
     var lex = Lex(input);
     var par = new Parser("foo.py", lex);
     return par.test();
 }
Esempio n. 8
0
 public void Parse_DottedName()
 {
     var parser = new Parser("foo.py", Lex("foo.bar.baz,"));
     var exp = parser.expr();
     Assert.AreEqual("foo.bar.baz", exp.ToString());
 }