예제 #1
0
    def _parse_module(self):
        """
        module = 'module' NAME '{' use* type* '}'
        """
        if not self._at_keyword('module'):
            raise ASDLSyntaxError(
                'Expected "module" (found {})'.format(self.cur_token.value),
                self.cur_token.lineno)
        self._advance()
        name = self._match(self._id_kinds)
        self._match(TokenKind.LBrace)

        uses = []
        while self._at_keyword('use'):
            uses.append(self._parse_use())

        defs = []
        while self.cur_token.kind == TokenKind.TypeId:
            typename = self._advance()
            self._match(TokenKind.Equals)
            type = self._parse_type()
            defs.append(Type(typename, type))

        self._match(TokenKind.RBrace)
        return Module(name, uses, defs)
예제 #2
0
 def _parse_module(self):
     if self._at_keyword('module'):
         self._advance()
     else:
         raise ASDLSyntaxError(
             'Expected "module" (found {})'.format(self.cur_token.value),
             self.cur_token.lineno)
     name = self._match(self._id_kinds)
     self._match(TokenKind.LBrace)
     defs = self._parse_definitions()
     self._match(TokenKind.RBrace)
     return Module(name, defs)