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

编译器/解释器

开发平台:

Others

  1. /* This tests a simple DLG-based scanner plus (...)? predicates */
  2. <<
  3. typedef ANTLRCommonToken ANTLRToken;
  4. #include "DLGLexer.h"
  5. #include "PBlackBox.h"
  6. int main()
  7. {
  8. ParserBlackBox<DLGLexer, Expr, ANTLRToken> p(stdin);
  9. p.parser()->begin();
  10. return 0;
  11. }
  12. void doit(Expr *p)
  13. {
  14. printf("LT(1) is %sn", ((ANTLRToken *)p->LT(1))->getText());
  15. printf("LT(2) is %sn", ((ANTLRToken *)p->LT(2))->getText());
  16. printf("LT(3) is %sn", ((ANTLRToken *)p->LT(3))->getText());
  17. printf("LT(4) is %sn", ((ANTLRToken *)p->LT(4))->getText());
  18. printf("LT(5) is %sn", ((ANTLRToken *)p->LT(5))->getText());
  19. printf("LT(6) is %sn", ((ANTLRToken *)p->LT(6))->getText());
  20. printf("LT(7) is %sn", ((ANTLRToken *)p->LT(7))->getText());
  21. printf("LT(8) is %sn", ((ANTLRToken *)p->LT(8))->getText());
  22. printf("LT(9) is %sn", ((ANTLRToken *)p->LT(9))->getText());
  23. printf("LT(10) is %sn", ((ANTLRToken *)p->LT(10))->getText());
  24. printf("LT(11) is %sn", ((ANTLRToken *)p->LT(11))->getText());
  25. }
  26. >>
  27. #token "[ tn]+" <<skip();>>
  28. #token Eof "@"
  29. class Expr { /* Define a grammar class */
  30. begin
  31. : <</*doit(this);*/>>
  32. e
  33. ;
  34. e : ( list "=" )?  list "=" list Eof
  35. <<printf("list = listn");>>
  36. | list Eof
  37. <<printf("listn");>>
  38. ;
  39. list: "(" (IDENTIFIER|NUMBER)* ")"
  40. ;
  41. predict
  42. : ( "(" (IDENTIFIER|NUMBER)* ")" "=")?
  43. | "(" ")" "="
  44. ;
  45. /*
  46. Here's another example...
  47. #token INT "int"
  48. #token SEMI ";"
  49. #token STAR "*"
  50. #token ASSIGN "="
  51. begin:  "extern" "char" declarator ";"
  52. ;
  53. e : (decl)?
  54. | expr
  55. ;
  56. expr: IDENTIFIER "=" NUMBER
  57. ;
  58. decl: "int" declarator ";"
  59. ;
  60. declarator
  61. : ( "*" )? "*" declarator
  62.     | IDENTIFIER
  63. ;
  64. */
  65. }
  66. #token IDENTIFIER "[a-z]+"
  67. #token NUMBER "[0-9]+"