javacc-7.0.1.test.cpp.gen.Parser.cc Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of javacc Show documentation
Show all versions of javacc Show documentation
JavaCC is a parser/scanner generator for Java.
/* Parser.cc */
#include "Parser.h"
#include "TokenMgrError.h"
namespace SPL {
/** Constructor with user supplied TokenManager. */
template
AST::CompilationUnit* Parser::CompilationUnit() {
if (!hasError) {
jj_consume_token(INT);
}
return nullptr;
assert(false);
}
Parser::Parser(TokenManager *tokenManager){
head = nullptr;
ReInit(tokenManager);
}
Parser::~Parser()
{
clear();
}
void Parser::ReInit(TokenManager* tokenManager){
clear();
errorHandler = new ErrorHandler();
hasError = false;
token_source = tokenManager;
head = token = new Token();
token->kind = 0;
token->next = nullptr;
jj_lookingAhead = false;
jj_rescan = false;
jj_done = false;
jj_scanpos = jj_lastpos = nullptr;
jj_gc = 0;
jj_kind = -1;
indent = 0;
trace = false;
jj_ntk = -1;
jj_gen = 0;
}
void Parser::clear(){
//Since token manager was generate from outside,
//parser should not take care of deleting
//if (token_source) delete token_source;
if (head) {
Token *next, *t = head;
while (t) {
next = t->next;
delete t;
t = next;
}
}
if (errorHandler) {
delete errorHandler, errorHandler = nullptr;
}
}
Token * Parser::jj_consume_token(int kind) {
Token *oldToken;
if ((oldToken = token)->next != nullptr) token = token->next;
else token = token->next = token_source->getNextToken();
jj_ntk = -1;
if (token->kind == kind) {
jj_gen++;
return token;
}
token = oldToken;
jj_kind = kind;
JJString image = kind >= 0 ? tokenImage[kind] : tokenImage[0];
errorHandler->handleUnexpectedToken(kind, image.substr(1, image.size() - 2), getToken(1), this);
hasError = true;
return token;
}
/** Get the next Token. */
Token * Parser::getNextToken(){
if (token->next != nullptr) token = token->next;
else token = token->next = token_source->getNextToken();
jj_ntk = -1;
jj_gen++;
return token;
}
/** Get the specific Token. */
Token * Parser::getToken(int index){
Token *t = token;
for (int i = 0; i < index; i++) {
if (t->next != nullptr) t = t->next;
else t = t->next = token_source->getNextToken();
}
return t;
}
int Parser::jj_ntk_f(){
if ((jj_nt=token->next) == nullptr)
return (jj_ntk = (token->next=token_source->getNextToken())->kind);
else
return (jj_ntk = jj_nt->kind);
}
virtual void Parser::parseError() {
fprintf(stderr, "Parse error at: %d:%d, after token: %s encountered: %s\n", token->beginLine, token->beginColumn, addUnicodeEscapes(token->image).c_str(), addUnicodeEscapes(getToken(1)->image).c_str());
}
bool Parser::trace_enabled() {
return trace;
}
void Parser::enable_tracing() {
}
void Parser::disable_tracing() {
}
}