public static MULTI_TYPE parse(UNIT_REF first, iSCOPE context) { Debug.Indent(); Debug.WriteLine("Entering MULTI_TYPE.parse"); MULTI_TYPE multi = new MULTI_TYPE(); multi.add(first); Span begin = first.span; UNIT_REF elem_type = null; while (true) { Token token = get(); if (token.code != TokenCode.Vertical) { break; } forget(); elem_type = UNIT_REF.parse(null, false, context); multi.add(elem_type); } multi.setSpan(begin, elem_type.span); Debug.WriteLine("Exiting MULTI_TYPE.parse"); Debug.Unindent(); return(multi); }
public static TYPE parse(iSCOPE context) { Debug.Indent(); Debug.WriteLine("Entering TYPE.parse"); Token token = get(); TYPE result = null; switch (token.code) { case TokenCode.LParen: result = TUPLE_TYPE.parse(context); break; case TokenCode.Routine: result = ROUTINE_TYPE.parse(context); break; case TokenCode.Identifier: { // Don't forget() UNIT_REF unit_type = UNIT_REF.parse(null, false, context); Token del = get(); if (del.code == TokenCode.Vertical) { // Don't call forget() result = MULTI_TYPE.parse(unit_type, context); } else { result = unit_type; } break; } default: // Syntax error { break; } } Debug.WriteLine("Exiting TYPE.parse"); Debug.Unindent(); return(result); }