コード例 #1
0
 def parse(cls, s, i, parse_control_fun):
     next = parsing.consume_char(s, i, "{")
     if next is None:
         return (None, i)
     else:
         i = next
         (ctype, i) = parse_control_fun(s, i)
         i = parsing.consume_char(s, i, "}", "Unmatched {")
         return (SetType(ctype), i)
コード例 #2
0
 def parse(cls, s, i, parse_control_fun):
     next = parsing.consume_char(s, i, "<")
     if next is None:
         return (None, i)
     else:
         i = next
         (left, i) = parse_control_fun(s, i)
         i = parsing.consume_char(s, i, ",", "Missing comma")
         (right, i) = parse_control_fun(s, i)
         i = parsing.consume_char(s, i, ">", "Unmatched <")
         return (FunType(left, right), i)
コード例 #3
0
 def parse(cls, s, i, parse_control_fun):
     next = parsing.consume_char(s, i, "(")
     if next is None:
         return (None, i)
     else:
         i = next
         signature = []
         while i < len(s) and s[i] != ")":
             (m, i) = parse_control_fun(s, i)
             signature.append(m)
             if s[i] == ")":
                 break
             i = parsing.consume_char(s, i, ",", "Missing comma in tuple")
         i = parsing.consume_char(s, i, ")", "Unmatched ( in tuple type")
         return (TupleType(*signature), i)       
コード例 #4
0
 def parse(cls, s, i, parse_control_fun):
     new_i = parsing.consume_char(s, i, "?")
     if new_i is None:
         return (None, i)
     else:
         return (UnknownType(), new_i)