// Reverse Polish Notation, main.k // © 2001, Michael Piefel <piefel@informatik.hu-berlin.de> %{ #include <iostream> #include "k.h" #include "rk.h" #include "unpk.h" #include "csgiok.h" int yyparse(); line TheLine; %} %{ KC_TYPES_HEADER extern line TheLine; %} // Yes, create YYSTYPE union for the bison parser. %option yystype // Trivial printer function (ignores view) void printer(const char *s, uview v) { std::cout << s; } int main(int argc, char **argv) { FILE* f; std::cout << " RPN Parser and reformatter " << std::endl; // If a saved tree is given on command line, read it if (argc==2) { f=fopen(argv[1], "r"); kc::CSGIOread(f, TheLine); fclose(f); } else yyparse(); line TheCanonLine=TheLine->rewrite(canon); line TheShortLine=TheCanonLine->rewrite(calculate); std::cout << "\nInfix notation:\n"; TheCanonLine->unparse(printer, infix); std::cout << "\n\nCanonical postfix notation:\n"; TheCanonLine->unparse(printer, postfix); std::cout << "\n\nCalculated infix notation:\n"; TheShortLine->unparse(printer, infix); std::cout << "\n\nCalculated canonical postfix notation:\n"; TheShortLine->unparse(printer, postfix); std::cout << std::endl; }