Status* Parser::parseProgram(const string& code) { Scanner scanner; try { Status* s = scanner.scan(code, _tokens); if (s) { return s; } } catch (ErrorInfoHolder* error) { return new Status(error->getMessage(), error->getPosition()); } return parseTopLevel(); }
ASTNodeList *generateAST(const TokenList &tokens) { ASTNodeList *ast = new ASTNodeList; ast::Node *node; TokenIt it = tokens.rbegin(), end = tokens.rend(); while(it != end) { node = parseTopLevel(it, end); if(node) ast->push_front(node); else break; } return ast; }