Next / Previous / Contents / Shipman's homepage

17.26. Txny.__bindCollision()

nomcompile3
# - - -   T x n y . _ _ b i n d C o l l i s i o n

    def __bindCollision ( self, scan, code, codeSet ):
        '''Create bindings for a collision group.

          [ (scan is a Scan instance) and
            (code is a collision code) and
            (codeSet is a set of disambiguations) ->
              if self is compatible with (code) as a collision
              form and the forms in (codeSet) as disambiguations ->
                self.abTab  +:=  those bindings
              else ->
                Log()  +:=  error message(s)
                raise SyntaxError ]
        '''

First create a binding for the group; see Section 29, “class CollBind: Cluster of colliding codes”. Then attempt to add this binding to the symbol table.

nomcompile3
        #-- 1 --
        # [ collBind  :=  a new CollBind instance binding (code)
        #       to (collSet) ]
        collBind = CollBind ( code, codeSet )

        #-- 2 --
        # [ if code is in self.abTab ->
        #     collSym  :=  the entry from self.abTab
        #   else ->
        #     self.abTab  +:=  a new, unbound entry for (code)
        #     collSym  :=  that entry ]
        collSym = self.abTab.addAbbr ( code )

        #-- 3 --
        # [ if collBind can be combined with collSym ->
        #     collSym  :=  collSym combined with collBind
        #   else ->
        #     Log()  +:=  error message(s)
        #     raise SyntaxError ]
        try:
            collSym.bind ( collBind )
        except ValueError:
            scan.syntax ( "This use of '%s' is incompatible with "
                          "the existing use, %s." %
                          (code, collSym.binding()) )