##- # Author: Brian Tiffin # Dedicated to the public domain # # Date: August 2016 # Modified: 2016-10-03/23:19-0400 ##+ # # snobols.icn, SNOBOL like patterns # procedure main() # From http://www.snobol4.org/docs/burks/tutorial/ch4.htm # SNOBOL code # (('B' | 'F' | 'N') . FIRST 'EA' ('R' | 'T') . LAST) . WORD # # matches 'BEAR', 'FEAR', 'NEAR', 'BEAT', 'FEAT', or 'NEAT', # assigning the first letter matched to FIRST, # the last letter to LAST, and the entire result to WORD. # Unicon version, with test strings, and addition of cursor # position capture. BEAD expected to fail. every str := !["BEAR", "FEAR", "NEAR", "BEAT", "FEAT", "NEAT", "BEAD"] do { writes("subject: ", str, " ") if str ?? .> p1 || (("B" .| "F" .| "N") -> first || "EA" || .> p2 || ("R" .| "T") -> last) -> word then write("first: ", first, ";", p1, ", last: ", last, ";", p2, ", word: ", word) else write("did not match") } end