예제 #1
0
파일: front_end.py 프로젝트: o11c/oil
    def _parse_fields(self):
        """
        fields:
          '('
                   type_expr Name
             ( ',' type_expr Name )*
          ')'

        Name Quantifier?  should be changed to typename.
        """
        fields = []
        self._match(TokenKind.LParen)
        while self.cur_token.kind == TokenKind.Name:
            typ = self._parse_type_expr()
            field_name = self._match(TokenKind.Name)

            fields.append(Field(typ, field_name))

            if self.cur_token.kind == TokenKind.RParen:
                break
            elif self.cur_token.kind == TokenKind.Comma:
                self._advance()

        self._match(TokenKind.RParen)
        return fields
예제 #2
0
 def _parse_fields(self):
     fields = []
     self._match(TokenKind.LParen)
     while self.cur_token.kind == TokenKind.TypeId:
         typename = self._advance()
         is_seq, is_opt = self._parse_optional_field_quantifier()
         id = (self._advance()
               if self.cur_token.kind in self._id_kinds else None)
         fields.append(Field(typename, id, seq=is_seq, opt=is_opt))
         if self.cur_token.kind == TokenKind.RParen:
             break
         elif self.cur_token.kind == TokenKind.Comma:
             self._advance()
     self._match(TokenKind.RParen)
     return fields