Ejemplo n.º 1
0
    def read_deriv(self, toks, parent=None):
        def body(toks):
            # HACK
            tag = "_"

            category = toks.next()
            headedness = toks.next()
            assert headedness in 'lrsec', "Unexpected head character encountered: %s" % headedness

            kids = []

            if headedness == 'c':
                tag = toks.next()
                lex = toks.next()
                return A.Leaf(tag, lex, category, parent)
            else:
                if headedness in 's':
                    kids.append(self.read_deriv(toks))
                elif headedness in 'elr':
                    kids.append(self.read_deriv(toks))
                    kids.append(self.read_deriv(toks))

                return A.Node(tag, kids, category, parent, 0 if headedness in 'esl' else 1)

        return with_parens(body, toks)
Ejemplo n.º 2
0
    def read_deriv(self, toks, parent=None):
        def body(toks):
            # HACK
            tag = toks.next()

            head_index = None
            if toks.peek() == '<' and (not tag == 'PU'):
                toks.next()
                head_index = int(toks.next())
                shift_and_check( '>', toks )

            category = None
            if toks.peek() == '{':
                toks.next()
                category = parse_category(toks.next())
                shift_and_check( '}', toks )

            kids = []

            lex = None
            while toks.peek() != ')':
                if toks.peek() == '(':
                    kids.append( self.read_deriv(toks) )
                else:
                    lex = toks.next()

            if (not kids) and lex:
                return A.Leaf(tag, lex, category, parent)
            else:
                ret = A.Node(tag, kids, category, parent, head_index)
                for kid in ret: kid.parent = ret
                return ret

        return with_parens(body, toks)
Ejemplo n.º 3
0
    def read_deriv(self, toks, parent=None):
        def body(toks):
            tag = toks.next()
            lex = None

            kids = []

            while toks.peek() != ')':
                if toks.peek() == '(':
                    kids.append( self.read_deriv(toks) )
                else:
                    lex = toks.next()

            if (not kids) and lex:
                return N.Leaf(tag, lex, parent)
            else:
                ret = N.Node(tag, kids, parent)
                for kid in ret: kid.parent = ret
                return ret

        return with_parens(body, toks)
Ejemplo n.º 4
0
    def read_deriv(self, toks, parent=None):
        def body(toks):
            # HACK
            tag = "_"
            head_index = 0 # head_index must be [01]; required by script convert_auto

            category = toks.next().replace('{', '(').replace('}', ')')
            kids = []

            lex = None
            while toks.peek() != ')':
                if toks.peek() == '(':
                    kids.append( self.read_deriv(toks) )
                else:
                    lex = toks.next()

            if (not kids) and lex:
                return A.Leaf(tag, lex, category, parent)
            else:
                ret = A.Node(tag, kids, category, parent, head_index)
                for kid in ret: kid.parent = ret
                return ret

        return with_parens(body, toks)
Ejemplo n.º 5
0
 def read_paren(self, toks):
     return with_parens(self.read_deriv, toks)