summaryrefslogtreecommitdiff
path: root/src/parser/parser.cpp
diff options
context:
space:
mode:
authorChristopher L. Conway <christopherleeconway@gmail.com>2010-02-27 18:34:44 +0000
committerChristopher L. Conway <christopherleeconway@gmail.com>2010-02-27 18:34:44 +0000
commite56c41f47d43103a6e8bf744e12229ed6e5a8f19 (patch)
tree39be4124610edf8072206aa85b178b8fe3eab2e2 /src/parser/parser.cpp
parent14c22833d05f632eb40eb68cc3c68345d891005c (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.cpp51
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() {
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback