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

编译器/解释器

开发平台:

Others

  1. options {
  2.     language = "Sather";
  3. }
  4. {
  5.   class MAIN is
  6.     main( args : ARRAY{STR} ) is
  7.        AST_TEST{ANTLR_COMMON_TOKEN,ANTLR_COMMON_AST}::test;
  8.     end;
  9.   end;
  10. }
  11. class AST_TEST extends Parser;
  12. options {
  13. buildAST = true;
  14. }
  15. /*  Test the equals, equals_subtree, and find_all methods plus AST enumeration.
  16.     The output should match the contents of file test.out. 
  17.  */
  18. {
  19.         println( s : STR ) is
  20.           #OUT + s + "n";
  21.         end;
  22. test is
  23. r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16,r17 : BOOL;
  24. t : AST := @([ASSIGN,"="], [ID,"a"], [INT,"1"]); -- build "a=1" tree
  25. println("t is " + t.str_list);
  26. u : AST := @([ASSIGN,"="], [ID,"b"]); -- build "b=?" tree
  27. println("u is " + u.str_list);
  28. v : AST := @([ASSIGN,"="], [INT,"4"]); -- build "4=?" tree
  29. println("v is " + v.str_list);
  30. w : AST := @[ASSIGN,"="]; -- build "=" tree
  31. println("w is " + w.str_list);
  32. println("");
  33.         r1 := t.equals_tree(t);
  34.                 r2 := t.equals_tree(u);
  35.                 r3 := t.equals_tree(v);
  36.                 r4 := t.equals_tree(w);
  37.                 r5 := t.equals_tree(void);
  38. println("t.equals_tree(t) is " + r1 );
  39. println("t.equals_tree(u) is " + r2 );
  40. println("t.equals_tree(v) is " + r3 );
  41. println("t.equals_tree(w) is " + r4 );
  42. println("t.equals_tree(void) is " + r5 );
  43. println("");
  44.                 r6 := t.equals_tree_partial(t);
  45.                 r7 := t.equals_tree_partial(u);
  46.                 r8 := t.equals_tree_partial(v);
  47.                 r9 := t.equals_tree_partial(w);
  48.                 r10 := t.equals_tree_partial(void);
  49. println("t.equals_tree_partial(t) is " + r6 ); 
  50. println("t.equals_tree_partial(u) is " + r7 ); 
  51. println("t.equals_tree_partial(v) is " + r8 ); 
  52. println("t.equals_tree_partial(w) is " + r9 ); 
  53. println("t.equals_tree_partial(void) is " + r10 );
  54. println("");
  55. -- (A (B C (A B)) (A B) (F (A B)) (A (A B)) ) J
  56. -- Visually:
  57.                 -- A---------------------J
  58.                 -- |
  59.                 -- B-----A-----F----A
  60.                 -- |     |     |    |
  61.                 -- C--A  B     A    A
  62.                 --    |        |    |
  63.                 --    B        B    B
  64. --
  65. a : AST := @(void,
  66. ([A,"A"],
  67. ([B,"B"], [C,"C"], ([A,"A"],[B,"B"])),
  68. ([A,"A"],[B,"B"]),
  69. ([F,"F"], @([A,"A"], [B,"B"])),
  70. ([A,"A"], @([A,"A"], [B,"B"]))),
  71. [J,"J"]); 
  72. println("a is "+a.str_list+"n");
  73. println("              A---------------------J");
  74. println("              |");
  75. println("              B-----A-----F----A");
  76. println("              |     |     |    |");
  77. println("              C--A  B     A    A");
  78. println("                 |        |    |");
  79. println("                 B        B    Bn");
  80. x : AST := a.first_child.next_sibling;
  81. println("x is second sibling of upperleftmost A: " + x.str_list);
  82. y : AST := a.first_child.next_sibling.first_child;
  83. println("y is child B of x: " + y.str_list);
  84.                 r11 := x.equals_tree(@([A,"A"],[B,"B"]));
  85.                 r12 := x.equals_list(@([A,"A"],[B,"B"]));
  86.                 r13 := x.equals_list_partial(@([A,"A"],[B,"B"]));
  87.                 r14 := a.equals_tree(@([A,"A"],[B,"B"]));
  88.                 r15 := a.equals_tree_partial(@([A,"A"],[B,"B"]));
  89.                 r16 := y.equals_list(@[B,"B"]);
  90.                 r17 := y.equals_list(@[B,"B"]);
  91. println("x.equals_tree(@(A B)) is " + r11 ); 
  92. println("x.equals_list(@(A B)) is " + r12 ); 
  93. println("x.equals_list_partial(@(A B)) is " + r13 ); 
  94. println("a.equals_tree(@(A B)) is " + r14 ); 
  95. println("a.equals_tree_partial(@(A B)) is " + r15 ); 
  96. println("y.equals_list(@[B]) is " + r16 ); 
  97. println("y.equals_list_partial(@[B]) is " + r17 ); 
  98. enum : ARRAY{AST};
  99. println("na.find_all_partial(@(A B)):");
  100. enum := a.find_all_partial(@([A,"A"],[B,"B"]));
  101.         loop 
  102.            println( enum.elt!.str_list );
  103.                 end;
  104. println("na.find_all_partial(@[A])):");
  105. enum := a.find_all_partial(@[A,"A"]);
  106.         loop 
  107.            println( enum.elt!.str_list );
  108.                 end;
  109. println("na.find_all(@(A B)):");
  110. enum := a.find_all(@([A,"A"],[B,"B"]));
  111.         loop 
  112.            println( enum.elt!.str_list );
  113.                 end;
  114. -- check results
  115. println("nTest results:");
  116. if ( r1=true and r2=false and r3=false and r4=false and
  117.  r5=false and r11=true and r14=false) then
  118. println("equals_tree is ok");
  119. else 
  120. println("equals_tree is bad");
  121. end;
  122. if ( r6=true and r7=false and r8=false and r9=true and r10=true ) then
  123. println("equals_tree_partial is ok");
  124. else 
  125. println("equals_tree_partial is bad");
  126.                 end;
  127. if ( r12=false and r16=true ) then
  128. println("equals_list is ok");
  129. else 
  130. println("equals_list is bad");
  131.   end;
  132. if ( r13=true and r17=true ) then
  133. println("equals_list_partial is ok");
  134. else 
  135. println("equals_list_partial is bad");
  136. end;
  137. end;
  138. }
  139. defTokenTypes
  140. : ID INT ASSIGN PLUS A B C D E F G H I J K
  141. ;