statement : sub_proto statement : sub_def term : anon_sub sub_proto : ws? "sub" ws? sym_name proto? ws? ";" sub_def : ws? "sub" ws? sym_name proto? ws? block anon_sub : ws? "sub" block sym_name : ident "::" sym_name sym_name : ident