/* * This file is part of the Cforall project * * $Id: Parser.cc,v 1.6 2002/11/15 20:07:18 rcbilson Exp $ * */ #include "Parser.h" #include "TypedefTable.h" #include "lex.h" #include "cfa.tab.h" /* global variables in cfa.y */ extern int yyparse(void); extern int yydebug; extern LinkageSpec::Type linkage; extern TypedefTable typedefTable; extern DeclarationNode *theTree; /* end of globals */ Parser *Parser::theParser = 0; Parser::Parser(): parseTree( 0 ), parseStatus( 1 ) {} Parser::~Parser() { delete parseTree; } /* static class method */ Parser & Parser::get_parser() { if( theParser == 0 ) { theParser = new Parser; } return *theParser; } void Parser::parse( FILE *input ) { extern FILE *yyin; yyin = input; extern int yylineno; yylineno = 1; typedefTable.enterScope(); parseStatus = yyparse(); parseTree = theTree; } void Parser::set_debug( bool debug ) { yydebug = debug; } void Parser::set_linkage( LinkageSpec::Type linkage ) { ::linkage = linkage; } void Parser::freeTree() { delete parseTree; parseTree = 0; }