test.g
上传用户:itx_2006
上传日期:2007-01-06
资源大小:493k
文件大小:1k
源码类别:

编译器/解释器

开发平台:

Others

  1. /* This is test.g which tests multiple scanners/parsers; DLG-based scanner */
  2. <<
  3. #include "Lexer.h"
  4. typedef ANTLRCommonToken ANTLRToken;
  5. int main()
  6. {
  7. ANTLRTokenPtr aToken = new ANTLRToken;
  8. DLGFileInput in(stdin);
  9. Lexer scan(&in);
  10. scan.setToken(mytoken(aToken));
  11. ANTLRTokenBuffer pipe(&scan);
  12. Include parser(&pipe);
  13. parser.init();
  14. parser.input();
  15. return 0;
  16. }
  17. >>
  18. #token "[ tn]+" <<skip();>>
  19. #token Eof "@"
  20. class Include {
  21. <<
  22. /* this is automatically defined to be a member function of Include::
  23.  * since it is within the "class {...}" boundaries.
  24.  */
  25. private:
  26. char *stripquotes(ANTLRChar *s)
  27. {
  28. s[strlen(s)-1] = '';
  29. return &s[1];
  30. }
  31. >>
  32. input
  33. : ( cmd | include )* Eof
  34. ;
  35. cmd : "print"
  36. ( NUMBER <<printf("%sn", $1->getText());>>
  37. | STRING <<printf("%sn", $1->getText());>>
  38. )
  39. ;
  40. include
  41. : "#include" STRING
  42. <<{
  43. FILE *f;
  44. f = fopen(stripquotes($2->getText()), "r");
  45. if ( f==NULL ) {fprintf(stderr, "can't open %sn", $2->getText()+1);}
  46. else {
  47. ANTLRTokenPtr aToken = new ANTLRToken;
  48. DLGFileInput in(f);
  49. Lexer scan(&in);
  50. scan.setToken(mytoken(aToken));
  51. ANTLRTokenBuffer pipe(&scan);
  52. Include parser(&pipe);
  53. parser.init();
  54. parser.input();
  55. }
  56. }>>
  57. ;
  58. }
  59. #token STRING "" [a-zA-Z0-9_., t]+ ""
  60. #token NUMBER "[0-9]+"