Annotation of 43BSD/contrib/icon/src/lib/patterns.icn, revision 1.1

1.1     ! root        1: #      PATTERNS(2)
        !             2: #
        !             3: #      SNOBOL4-style pattern matching
        !             4: #
        !             5: #      Ralph E. Griswold
        !             6: #
        !             7: #      Last modified 7/27/83
        !             8: #
        !             9: 
        !            10: global Mode, Float
        !            11: 
        !            12: procedure Anchor()                     #  &ANCHOR = 1
        !            13:    suspend ""
        !            14: end
        !            15: 
        !            16: procedure Any(s)                       #  ANY(S)
        !            17:    suspend tab(any(s))
        !            18: end
        !            19: 
        !            20: procedure Apply(s,p)                   #  S ? P
        !            21:    local tsubject, tpos, value
        !            22:    initial {
        !            23:       Float := Arb
        !            24:       /Mode := Float                   #  &ANCHOR = 0 if not already set
        !            25:       }
        !            26:    suspend (
        !            27:       (tsubject := &subject) &
        !            28:       (tpos := &pos) &
        !            29:       (&subject <- s) &
        !            30:       (&pos <- 1) &
        !            31:       (Mode() & (value := p())) &
        !            32:       (&pos <- tpos) &                 # to restore on backtracking
        !            33:       (&subject <- tsubject) &         # note this sets &pos
        !            34:       (&pos <- tpos) &                 # to restore on evaluation
        !            35:       value
        !            36:       )
        !            37: end
        !            38: 
        !            39: procedure Arb()                                #  ARB
        !            40:    suspend tab(&pos to *&subject + 1)
        !            41: end
        !            42: 
        !            43: procedure Arbno(p)                     #  ARBNO(P)
        !            44:    suspend "" | (p() || Arbno(p))
        !            45: end
        !            46: 
        !            47: procedure Arbx(i)                      #  ARB(I)
        !            48:    suspend tab(&pos to *&subject + 1 by i)
        !            49: end
        !            50: 
        !            51: procedure Bal()                                #  BAL
        !            52:    suspend Bbal() || Arbno(Bbal)
        !            53: end
        !            54: 
        !            55: procedure Bbal()                       #  used by Bal()
        !            56:    suspend (="(" || Arbno(Bbal) || =")") | Notany("()")
        !            57: end
        !            58: 
        !            59: procedure Break(s)                     #  BREAK(S)
        !            60:    suspend tab(upto(s) \ 1)
        !            61: end
        !            62: 
        !            63: procedure Breakx(s)                    #  BREAKX(S)
        !            64:    suspend tab(upto(s))
        !            65: end
        !            66: 
        !            67: procedure Cat(p1,p2)                   #  P1 P2
        !            68:    suspend p1() || p2()
        !            69: end
        !            70: 
        !            71: procedure Discard(p)                   #  /P
        !            72:    suspend p() & ""
        !            73: end
        !            74: 
        !            75: procedure Exog(s)                      #  \S
        !            76:    suspend s
        !            77: end
        !            78: 
        !            79: procedure Find(s)                      #  FIND(S)
        !            80:    suspend tab(find(s) + 1)
        !            81: end
        !            82: 
        !            83: procedure Len(i)                       #  LEN(I)
        !            84:    suspend move(i)
        !            85: end
        !            86: 
        !            87: procedure Limit(p,i)                   #  P \ i
        !            88:    local j
        !            89:    j := &pos
        !            90:    suspend p() \ i
        !            91:    &pos := j
        !            92: end
        !            93: 
        !            94: procedure Locate(p)                    #  LOCATE(P)
        !            95:    suspend tab(&pos to *&subject + 1) & p()
        !            96: end
        !            97: 
        !            98: procedure Marb()                       # max-first ARB
        !            99:    suspend tab(*&subject + 1 to &pos by -1)
        !           100: end
        !           101: 
        !           102: procedure Notany(s)                    #  NOTANY(S)
        !           103:    suspend tab(any(~s))
        !           104: end
        !           105: 
        !           106: procedure Pos(i)                       #  POS(I)
        !           107:    suspend pos(i + 1) & ""
        !           108: end
        !           109: 
        !           110: procedure Replace(p,s)                 #  P = S
        !           111:    suspend p() & s
        !           112: end
        !           113: 
        !           114: procedure Rpos(i)                      #  RPOS(I)
        !           115:    suspend pos(-i) & ""
        !           116: end
        !           117: 
        !           118: procedure Rtab(i)                      #  RTAB(I)
        !           119:    suspend tab(-i)
        !           120: end
        !           121: 
        !           122: procedure Span(s)                      #  SPAN(S)
        !           123:    suspend tab(many(s))
        !           124: end
        !           125: 
        !           126: procedure String(s)                    #  S
        !           127:    suspend =s
        !           128: end
        !           129: 
        !           130: procedure Succeed()                    #  SUCCEED
        !           131:    suspend |""
        !           132: end
        !           133: 
        !           134: procedure Tab(i)                       #  TAB(I)
        !           135:    suspend tab(i + 1)
        !           136: end
        !           137: 
        !           138: procedure Xform(f,p)                   #  F(P)
        !           139:    suspend f(p())
        !           140: end

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.