|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#include "VhdlParserTokenManager.h"
|
|
Packit |
1c1d7e |
#include "VhdlParserErrorHandler.hpp"
|
|
Packit |
1c1d7e |
#include "VhdlParser.h"
|
|
Packit |
1c1d7e |
#include "VhdlParserIF.h"
|
|
Packit |
1c1d7e |
#include "CharStream.h"
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
using namespace vhdl::parser;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static VhdlParser * myParser=0;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void VhdlParserIF::parseVhdlfile(const char* inputBuffer,bool inLine)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
JAVACC_STRING_TYPE s =inputBuffer;
|
|
Packit |
1c1d7e |
CharStream *stream = new CharStream(s.c_str(), (int)s.size(), 1, 1);
|
|
Packit |
1c1d7e |
VhdlParserTokenManager *tokenManager = new VhdlParserTokenManager(stream);
|
|
Packit |
1c1d7e |
myParser=new VhdlParser(tokenManager);
|
|
Packit |
1c1d7e |
VhdlErrorHandler *myErr=new VhdlErrorHandler();
|
|
Packit |
1c1d7e |
myParser->setErrorHandler(myErr);
|
|
Packit |
1c1d7e |
try
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if(inLine)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
myParser->parseInline();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
myParser->design_file();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
catch( std::exception &){ /* fprintf(stderr,"\n[%s]",e.what()); */ }
|
|
Packit |
1c1d7e |
// fprintf(stderr,"\n\nparsed lines: %d\n",yyLineNr);
|
|
Packit |
1c1d7e |
// fprintf(stderr,"\n\nerrors : %d\n\n",myErr->getErrorCount());
|
|
Packit |
1c1d7e |
delete myParser;
|
|
Packit |
1c1d7e |
delete myErr;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void VhdlParser::error_skipto(int kind)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
Token *op;
|
|
Packit |
1c1d7e |
do
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
Token *t = myParser->getNextToken();// step to next token
|
|
Packit |
1c1d7e |
op=myParser->getToken(1); // get first token
|
|
Packit |
1c1d7e |
if (op==0) break;
|
|
Packit |
1c1d7e |
//fprintf(stderr,"\n %s",t->image.data());
|
|
Packit |
1c1d7e |
} while (op->kind != kind);
|
|
Packit |
1c1d7e |
myParser->hasError=false;
|
|
Packit |
1c1d7e |
// The above loop consumes tokens all the way up to a token of
|
|
Packit |
1c1d7e |
// "kind". We use a do-while loop rather than a while because the
|
|
Packit |
1c1d7e |
// current token is the one immediately before the erroneous token
|
|
Packit |
1c1d7e |
// (in our case the token immediately before what should have been
|
|
Packit |
1c1d7e |
// "if"/"while".
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
}
|