diff options
author | Christopher L. Conway <christopherleeconway@gmail.com> | 2010-02-27 18:34:44 +0000 |
---|---|---|
committer | Christopher L. Conway <christopherleeconway@gmail.com> | 2010-02-27 18:34:44 +0000 |
commit | e56c41f47d43103a6e8bf744e12229ed6e5a8f19 (patch) | |
tree | 39be4124610edf8072206aa85b178b8fe3eab2e2 /src/parser/parser.cpp | |
parent | 14c22833d05f632eb40eb68cc3c68345d891005c (diff) |
Adding --mmap option to use memory-mapped file input, which provides a marginal improvement (<5%) on big benchmarks.
Diffstat (limited to 'src/parser/parser.cpp')
-rw-r--r-- | src/parser/parser.cpp | 51 |
1 files changed, 25 insertions, 26 deletions
diff --git a/src/parser/parser.cpp b/src/parser/parser.cpp index 85b6c9865..852eda595 100644 --- a/src/parser/parser.cpp +++ b/src/parser/parser.cpp @@ -16,8 +16,10 @@ #include <iostream> #include <fstream> #include <antlr/CharScanner.hpp> +#include <antlr/CharBuffer.hpp> #include "parser.h" +#include "memory_mapped_input_buffer.h" #include "expr/command.h" #include "util/output.h" #include "util/Assert.h" @@ -80,59 +82,56 @@ Expr Parser::parseNextExpression() throw (ParserException, AssertionException) { Parser::~Parser() { delete d_antlrParser; delete d_antlrLexer; - if(d_deleteInput) { - delete d_input; - } + delete d_inputBuffer; } -Parser::Parser(istream* input, AntlrParser* antlrParser, - CharScanner* antlrLexer, bool deleteInput) : - d_done(false), d_antlrParser(antlrParser), d_antlrLexer(antlrLexer), - d_input(input), d_deleteInput(deleteInput) { +Parser::Parser(InputBuffer* inputBuffer, AntlrParser* antlrParser, + CharScanner* antlrLexer) : + d_done(false), + d_antlrParser(antlrParser), + d_antlrLexer(antlrLexer), + d_inputBuffer(inputBuffer) { } Parser* Parser::getNewParser(ExprManager* em, InputLanguage lang, - istream* input, string filename, bool deleteInput) { + InputBuffer* inputBuffer, string filename) { AntlrParser* antlrParser = 0; antlr::CharScanner* antlrLexer = 0; switch(lang) { case LANG_CVC4: { - antlrLexer = new AntlrCvcLexer(*input); - antlrLexer->setFilename(filename); + antlrLexer = new AntlrCvcLexer(*inputBuffer); antlrParser = new AntlrCvcParser(*antlrLexer); - antlrParser->setFilename(filename); - antlrParser->setExpressionManager(em); break; } case LANG_SMTLIB: { - antlrLexer = new AntlrSmtLexer(*input); - antlrLexer->setFilename(filename); +// MemoryMappedInputBuffer inputBuffer(filename); +// antlrLexer = new AntlrSmtLexer(inputBuffer); + antlrLexer = new AntlrSmtLexer(*inputBuffer); antlrParser = new AntlrSmtParser(*antlrLexer); - antlrParser->setFilename(filename); - antlrParser->setExpressionManager(em); break; } default: Unhandled("Unknown Input language!"); } - return new Parser(input, antlrParser, antlrLexer, deleteInput); + antlrLexer->setFilename(filename); + antlrParser->setFilename(filename); + antlrParser->setExpressionManager(em); + + return new Parser(inputBuffer, antlrParser, antlrLexer); } -Parser* Parser::getNewParser(ExprManager* em, InputLanguage lang, - string filename) { - istream* input = new ifstream(filename.c_str()); - if(!*input) { - throw Exception("file does not exist or is unreadable: " + filename); - } - return getNewParser(em, lang, input, filename, true); +Parser* Parser::getMemoryMappedParser(ExprManager* em, InputLanguage lang, string filename) { + MemoryMappedInputBuffer* inputBuffer = new MemoryMappedInputBuffer(filename); + return getNewParser(em,lang,inputBuffer,filename); } Parser* Parser::getNewParser(ExprManager* em, InputLanguage lang, - istream& input) { - return getNewParser(em, lang, &input, "", false); + istream& input, string filename) { + antlr::CharBuffer* inputBuffer = new CharBuffer(input); + return getNewParser(em, lang, inputBuffer, filename); } void Parser::disableChecks() { |