Annotation of 43BSD/contrib/icon/src/lib/patterns.icn, revision 1.1.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.