Main.cpp
上传用户:afrynkmhm
上传日期:2007-01-06
资源大小:1262k
文件大小:1k
源码类别:

编译器/解释器

开发平台:

Others

  1. #include <iostream>
  2. #include "antlr/CommonASTWithHiddenTokens.hpp"
  3. #include "antlr/CommonHiddenStreamToken.hpp"
  4. #include "InstrLexer.hpp"
  5. #include "InstrParser.hpp"
  6. #include "InstrTreeWalker.hpp"
  7. ANTLR_USING_NAMESPACE(std)
  8. ANTLR_USING_NAMESPACE(antlr)
  9. int main(int argc,char* argv[])
  10. {
  11. InstrLexer lexer(cin);
  12. lexer.setTokenObjectFactory(&CommonHiddenStreamToken::factory);
  13. TokenStreamHiddenTokenFilter filter(lexer);
  14. filter.hide(InstrParser::WS_);
  15. filter.hide(InstrParser::SL_COMMENT);
  16. InstrParser parser(filter);
  17. parser.setASTNodeFactory(&CommonASTWithHiddenTokens::factory);
  18. try {
  19. // Parse the input statements
  20. parser.slist();
  21. }
  22. catch(RecognitionException& e) {
  23. cerr << "exception: " << e.what() << endl;
  24. }
  25. RefAST t = parser.getAST();
  26. InstrTreeWalker walker;
  27. walker.setFilter(filter);
  28. try {
  29. walker.slist(t);
  30. }
  31. catch(RecognitionException& e) {
  32. cerr << "exception: " << e.what() << endl;
  33. }
  34. }
  35. void InstrTreeWalker::setFilter(TokenStreamHiddenTokenFilter& filter_)
  36. {
  37. filter = &filter_;
  38. }
  39. /** walk list of hidden tokens in order, printing them out */
  40. void InstrTreeWalker::dumpHidden(RefToken t)
  41. {
  42. for ( ; t ; t=filter->getHiddenAfter(t) ) {
  43. cout << t->getText();
  44. }
  45. }
  46. void InstrTreeWalker::pr(RefAST p)
  47. {
  48. cout << p->getText();
  49. dumpHidden(
  50. (RefCommonASTWithHiddenTokens(p))->getHiddenAfter()
  51. );
  52. }