/*! Read expressions from file or memory and Evaluate */ int EvaluateExpressions(const char *buffer, int buf_length, int is_filename) { pANTLR3_INPUT_STREAM input_stream = NULL; pEvaLexer lxr = NULL; pANTLR3_COMMON_TOKEN_STREAM token_stream = NULL; pEvaParser psr = NULL; pEvaTree treeParser = NULL; pANTLR3_COMMON_TREE_NODE_STREAM nodes = NULL; EvaParser_program_return eva_ast; int error = 0; ResetErrorString(); /*Is it a file or memory*/ if (is_filename) { input_stream = antlr3AsciiFileStreamNew((pANTLR3_UINT8)buffer); } else { input_stream = antlr3NewAsciiStringCopyStream((pANTLR3_UINT8)buffer, (ANTLR3_UINT32)buf_length, NULL); } ABORT_IF(input_stream == NULL); /*Invoke lexer and tokenzie*/ lxr = EvaLexerNew(input_stream); ABORT_IF(lxr == NULL); token_stream = antlr3CommonTokenStreamSourceNew(ANTLR3_SIZE_HINT, TOKENSOURCE(lxr)); ABORT_IF(token_stream == NULL); /*Parse the expression*/ psr = EvaParserNew(token_stream); ABORT_IF(psr == NULL); //psr->pParser->rec->recoverFromMismatchedElement = recoverFromMismatchedElement; psr->pParser->rec->displayRecognitionError = DisplayRecognitionError; /*create ast from the parser*/ eva_ast = psr->program(psr); /*check if there is parsing error*/ ABORT_IF(psr->pParser->rec->state->errorCount > 0); nodes = antlr3CommonTreeNodeStreamNewTree(eva_ast.tree, ANTLR3_SIZE_HINT); ABORT_IF(nodes == NULL); /*Walk the tree and evaluate the expression*/ treeParser = EvaTreeNew(nodes); ABORT_IF(treeParser == NULL); /*Take action*/ treeParser->program(treeParser); /*All done lets cleanup*/ clean_up: FREE(treeParser); FREE(nodes); FREE(psr); FREE(token_stream); FREE(lxr); FREE(input_stream); return error; }
pANTLR3_INPUT_STREAM SCsParser::createInputStream(const std::string &text) { pANTLR3_INPUT_STREAM input; #if defined( __WIN32__ ) || defined( _WIN32 ) input = antlr3StringStreamNew((pANTLR3_UINT8)text.c_str(),ANTLR3_ENC_UTF8,text.length(),(pANTLR3_UINT8)"scs"); #elif defined( __APPLE_CC__) input = antlr3StringStreamNew((pANTLR3_UINT8)text.c_str(),ANTLR3_ENC_UTF8,text.length(),(pANTLR3_UINT8)"scs"); #else input = antlr3NewAsciiStringCopyStream((pANTLR3_UINT8)text.c_str(),text.length(),(pANTLR3_UINT8)"scs"); #endif return input; }
bool SCsTranslator::processString(const String &data) { pANTLR3_INPUT_STREAM input; #if defined( __WIN32__ ) || defined( _WIN32 ) input = antlr3StringStreamNew((pANTLR3_UINT8)data.c_str(), ANTLR3_ENC_UTF8, (ANTLR3_UINT32)data.length(), (pANTLR3_UINT8)"scs"); #elif defined( __APPLE_CC__) input = antlr3StringStreamNew((pANTLR3_UINT8)data.c_str(), ANTLR3_ENC_UTF8, data.length(), (pANTLR3_UINT8)"scs"); #else input = antlr3NewAsciiStringCopyStream((pANTLR3_UINT8)data.c_str(), data.length(), (pANTLR3_UINT8)"scs"); #endif pscsLexer lex; pANTLR3_COMMON_TOKEN_STREAM tokens; pscsParser parser; lex = scsLexerNew(input); tokens = antlr3CommonTokenStreamSourceNew(ANTLR3_SIZE_HINT, TOKENSOURCE(lex)); parser = scsParserNew(tokens); scsParser_syntax_return r; pANTLR3_BASE_TREE tree; try { r = parser->syntax(parser); } catch (const Exception &e) { THROW_EXCEPT(Exception::ERR_PARSE, e.getDescription(), mParams.fileName, e.getLineNumber()); } tree = r.tree; //dumpDot(tree); // translate buildScText(tree); //dumpScs("test.scsd"); parser->free(parser); tokens->free(tokens); lex->free(lex); input->close(input); return true; }