Test 2
| Abstract Syntax Tree program = main_class class_decl*; main_class = [classname]:id [arg]:id statement; class_decl = id var_decl* method_decl* | {extends} [classname]:id [extend]:id var_decl* method_decl*; var_decl = type id; method_decl = type id formal_list var_decl* statement* exp; statement = {statementlist} statement* | {if} exp [true]:statement [false]:statement | {while} exp statement | {println} exp | {assign} id exp | {array_assign} id [index]:exp [r]:exp; formal_list = type id formal_rest* | {empty}; formal_rest = type id; type= {int_array} | {boolean} | {int} | {id} id; exp = {and} [l]:exp [r]:exp | {lt} [l]:exp [r]:exp | {plus} [l]:exp [r]:exp | {minus} [l]:exp [r]:exp | {times} [l]:exp [r]:exp | {length} exp | {arrayindex} [array]:exp [index]:exp | {methodcall} exp id exp_list | {integerliteral} integer_literal | {trueliteral} true | {falseliteral} false | {id} id | {this} this | {new} id | {newarray} exp | {not} exp ; exp_list = exp*; |
- public class Q1 {
- public static void main(String [] args) {
- Q2 qa = new Q2();
- Q2 qb = new Q2();
- qa.f1( qb, 5);
- }
- }
- class Q2 {
- int a;
- public void f1( Q2 q, int n ) {
- int i;
- int j;
- i = n;
- j = i + 1;
- n = q.f2();
- this.a = n;
- }
- }
- public int f2( ) {
- int i;
- i = 3;
- return i;
- }
- }