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

编译器/解释器

开发平台:

Others

  1. #include <iostream>
  2. #include <fstream>
  3. #include "LexTokenStream.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. FILE* fp=fopen(f.c_str(),"r");
  37. // Create a scanner that reads from the input stream
  38. LexTokenStream lexer(fp);
  39. // Create a parser that reads from the scanner
  40. JavaRecognizer parser(lexer);
  41. // start parsing at the compilationUnit rule
  42. parser.compilationUnit();
  43. fclose(fp);
  44. // do something with the tree
  45. doTreeAction(f, parser.getAST());
  46. }
  47. catch (exception& e) {
  48. cerr << "parser exception: " << e.what() << endl;
  49. // e.printStackTrace();   // so we can get stack trace
  50. }
  51. }
  52. static void doTreeAction(const string& f, RefAST t)
  53. {
  54. if ( t==nullAST ) return;
  55. JavaTreeParser tparse;
  56. try {
  57. tparse.compilationUnit(t);
  58. // System.out.println("successful walk of result AST for "+f);
  59. }
  60. catch (RecognitionException& e) {
  61. cerr << e.getMessage() << endl;
  62. // e.printStackTrace();
  63. }
  64. }