Esempio n. 1
0
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();
}
Esempio n. 2
0
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;
}