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

编译器/解释器

开发平台:

Others

  1. #include <iostream>
  2. #include <fstream>
  3. #include "JavaLexer.hpp"
  4. #include "JavaRecognizer.hpp"
  5. #include "JavaTreeParser.hpp"
  6. ANTLR_USING_NAMESPACE(std)
  7. ANTLR_USING_NAMESPACE(antlr)
  8. static void parseFile(const string& f);
  9. static void doTreeAction(const string& f, RefAST t);
  10. int main(int argc,char* argv[])
  11. {
  12. // Use a try/catch block for parser exceptions
  13. try {
  14. // if we have at least one command-line argument
  15. if (argc > 1 ) {
  16. cerr << "Parsing..." << endl;
  17. // for each file specified on the command line
  18. for(int i=1; i< argc;i++) {
  19. cerr << "   " << argv[i] << endl;
  20. parseFile(argv[i]);
  21. } }
  22. else
  23. cerr << "Usage: " << argv[0]
  24.   << " <file name(s)>" << endl;
  25. }
  26. catch(exception& e) {
  27. cerr << "exception: " << e.what() << endl;
  28. // e.printStackTrace(System.err);   // so we can get stack trace
  29. }
  30. }
  31. // Here's where we do the real work...
  32. static void parseFile(const string& f)
  33. {
  34. try {
  35. ifstream s(f.c_str());
  36. // Create a scanner that reads from the input stream
  37. JavaLexer lexer(s);
  38. lexer.setFilename(f);
  39. /*
  40. while (true) {
  41. RefToken t = lexer.nextToken();
  42. if (t->getType() == Token::EOF_TYPE)
  43. break;
  44. cout << t->getText() << ":" << t->getType() << endl;
  45. }
  46. */
  47. // Create a parser that reads from the scanner
  48. JavaRecognizer parser(lexer);
  49. parser.setFilename(f);
  50. // start parsing at the compilationUnit rule
  51. parser.compilationUnit();
  52. // do something with the tree
  53. doTreeAction(f, parser.getAST());
  54. }
  55. catch (exception& e) {
  56. cerr << "parser exception: " << e.what() << endl;
  57. // e.printStackTrace();   // so we can get stack trace
  58. }
  59. }
  60. static void doTreeAction(const string& f, RefAST t)
  61. {
  62. if ( t==nullAST ) return;
  63. JavaTreeParser tparse;
  64. try {
  65. tparse.compilationUnit(t);
  66. // System.out.println("successful walk of result AST for "+f);
  67. }
  68. catch (RecognitionException& e) {
  69. cerr << e.getMessage() << endl;
  70. // e.printStackTrace();
  71. }
  72. }