class STACK{T} is private attr stack :LLIST{T}; create:SAME is res ::= new; res.stack := #LLIST{T}; return res; end; push(elt: T) is stack.insert_front(elt); end; pop: T is if ~stack.is_empty then stack.rewind; r ::= stack.current; stack.delete; return r; else raise "stack empty!\n"; end; end; top: T is stack.rewind; return stack.current; end; is_empty: BOOL is return stack.is_empty; end; end;