Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }