core: import java.util.*; import java.net.*; import java.io.*; import java.lang.*; import EDU.neu.ccs.demeter.*; add: class S extends Block implements Runnable, Cloneable { protected Service service; public Service get_service() (@ return service; @) public void set_service(Service new_service) (@ service = new_service; @) public constructor S() (@ super(); @) public constructor S(Service service) (@ super(); set_service(service); @) public static S parse(java.io.InputStream in) throws ParseException (@ return new Parser(in)._S(); @) public static S parse(String s) (@ try { return parse(new java.io.ByteArrayInputStream(s.getBytes())); } catch (ParseException e) { throw new RuntimeException(e.toString()); } @) public void run() (@{ Visitor v= new Visitor(); RepeatCheckingVisitor rv = new RepeatCheckingVisitor(); LimitCheckingVisitor lv = new LimitCheckingVisitor(); /* in order to be a comunication between the visitors */ v.set_rv(rv); v.set_lv(lv); rv.set_lv(lv); rv.set_v(v); lv.set_v(v); this.Traverse(rv,lv,v); }@) (@ boolean check(){ TimeCheckingVisitor tv = new TimeCheckingVisitor(); this.TimeTraverse(tv); /* depending on what value is returned the interpretation is made or not */ return tv.get_return_val(); }@) (@ void universal_trv0_bef(UniversalVisitor _v_) { super.universal_trv0_bef(_v_); _v_.before(this); } @) (@ void universal_trv0_aft(UniversalVisitor _v_) { _v_.after(this); super.universal_trv0_aft(_v_); } @) (@ void universal_trv0(UniversalVisitor _v_) { universal_trv0_bef(_v_); _v_.before_service(this, service); service.universal_trv0(_v_); _v_.after_service(this, service); super.universal_trv0(_v_); universal_trv0_aft(_v_); } @) (@ public void Traverse(RepeatCheckingVisitor rv, LimitCheckingVisitor lv, Visitor v) { Traverse_S_trv(rv, lv, v); } @) (@ void Traverse_S_trv_bef(RepeatCheckingVisitor rv, LimitCheckingVisitor lv, Visitor v) { super.Traverse_S_trv_bef(rv, lv, v); } @) (@ void Traverse_S_trv_aft(RepeatCheckingVisitor rv, LimitCheckingVisitor lv, Visitor v) { super.Traverse_S_trv_aft(rv, lv, v); } @) (@ void Traverse_S_trv(RepeatCheckingVisitor rv, LimitCheckingVisitor lv, Visitor v) { Traverse_S_trv_bef(rv, lv, v); service.Traverse_S_trv(rv, lv, v); Traverse_S_trv_aft(rv, lv, v); } @) (@ public void TimeTraverse(TimeCheckingVisitor tv) { TimeTraverse_S_trv(tv); } @) (@ void TimeTraverse_S_trv_bef(TimeCheckingVisitor tv) { super.TimeTraverse_S_trv_bef(tv); } @) (@ void TimeTraverse_S_trv_aft(TimeCheckingVisitor tv) { super.TimeTraverse_S_trv_aft(tv); } @) (@ void TimeTraverse_S_trv(TimeCheckingVisitor tv) { TimeTraverse_S_trv_bef(tv); service.TimeTraverse_S_trv(tv); TimeTraverse_S_trv_aft(tv); } @) }