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 "CalcTreeWalker.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();
RefAST t = parser.getAST();
// Print the resulting tree out in LISP notation
cout << t->toStringList() << endl;
CalcTreeWalker walker;
// if the walker happens to transform things and defines AST nodes
// of itself, then it's necessary to have these added to the factory.
walker.initializeASTFactory(ast_factory);
walker.setASTFactory(&ast_factory);
// Traverse the tree created by the parser
walker.expr(t);
t = walker.getAST();
cout << t->toStringList() << endl;
}
catch( ANTLRException& e )
{
cerr << "exception: " << e.getMessage() << endl;
return -1;
}
catch( exception& e )
{
cerr << "exception: " << e.what() << endl;
return -1;
}
return 0;
}
|