1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
#include <iostream>
#include "CalcLexer.hpp"
#include "CalcParser.hpp"
#include "CalcAST.hpp"
int main()
{
ANTLR_USING_NAMESPACE(std)
ANTLR_USING_NAMESPACE(antlr)
try {
CalcLexer lexer(cin);
CalcParser parser(lexer);
ASTFactory ast_factory;
parser.initializeASTFactory(ast_factory);
parser.setASTFactory(&ast_factory);
// Parse the input expression
parser.expr();
RefCalcAST t = RefCalcAST(parser.getAST());
if( t )
{
// Print the resulting tree out in LISP notation
cout << t->toStringTree() << endl;
// Compute value and return
int r = t->value();
cout << "value is " << r << endl;
}
else
cerr << "Errors encountered during parse.." << endl;
}
catch( ANTLRException& e )
{
cerr << "ANTLRException: " << e.getMessage() << endl;
return -1;
}
catch(exception& e)
{
cerr << "exception: " << e.what() << endl;
return -1;
}
return 0;
}
|