3:30 Class (The “Gold Star” Class) ~ October 17,
2006
Notes courtesy of Alan Crouch – Code Snippets courtesy of Elizabeth Adams (after Griswold, Poage, Polansky)
To run a SNOBOL program
interactively
Type the following: c:\temp> snobol4 code.sno
If there are no errors,
you’re ready to go. The cursor is in
column one.
Column one holds labels (so
you must leave a space at the end of the cursor).
|
?v = 5 Compilation error ? v = 5 Success ? output = v 5 Success |
Binary operators require
spaces or it will cause a compilation error.
Exponentiation is evaluated
right to left
|
? w = 2 ** 3 ** 2 Success ? output = w 512 |
Doesn’t care about quotes as
long as they are properly matched.
|
? plea = ‘he shouted “Help!”’ Success ? output = help he shouted ‘help!’ Success |
If you look in vanilla folder there are a bunch of interesting
files in there!
Stuff in there includes:
README.DOC - tells you
about all those files
PM.EXE - prints a
manual (don’t do this unless you have 144 pages of paper and ink to spare)
PRINTMAN.BAK
- allows you to read the tutorial and by
putting a drive in PM c: it will create a snobol4.man which you can open with
Notepad so that you can read selectively on your drive.
Look up binary operators in
the manual.
Do not try to decipher the
code in DEMO.SNO - it’s more complex than we need.
You can create a copy of
your snobol program (i.e. filename.sno) with line numbers if you type snobol4
/L filename.sno . It will be saved on
your disk as filename.lst. The line
numbers there will be helpful in debugging your code
In all of SNOBOL there are
only 4 different kinds of statements:
Assignment
Statements
– Column 1 reserved for labels
- Success, failure statements :S(gohere)F(gothere)
(S
is for success, F for failure…label must go in parenthesis)
:(gotolabel)à is used for unconditional gotos
- loop : (gotolabel)
- to indicate end of keyboard input <ctrl> z
End
Statements – end in column 1
Pattern
Matching Statements
-
see FOURA.SNO
-
see FIVEA.SNO
-
see SIXA.SNO
Replacement
Statements
The latter two are where the heart of SNOBOL resides
Addition has
higher precedence than concatenation!
All unary
operators are left associative!
Use parenthesis to put
parenthesis around the subject to put in multiple lines in a subject
Two types of assignment operators
exist:
“=” (assignment)
and
“.”””
(conditional assignment operator needs to be surrounded by blanks)
Code snippets from class
|
* filename: foura.sno TRADE = 'PROGRAMMER' TRADE 'GRAM' :F(END) OUTPUT = 'GRAM WAS FOUND IN TRADE' TRADE 'SMOKE' :S(END) OUTPUT = 'SMOKE WAS NOT FOUND IN TRADE' END |
|
* filename: five.sno ROW = 'K' NO. = 2 'K24' ROW NO. + 4 :S(PRINT1)F(PRINT2) PRINT2 OUTPUT = 'PATTERN NOT MATCHED' :(TRYAGAIN) PRINT1 OUTPUT = 'PATTERN MATCHED' :(END) TRYAGAIN NO. = 20 'K24' ROW NO. + 4 :S(PRINT1)F(PRINT2) END |
|
* Filename: sixA.sno TENS = 2 UNITS = 5 (TENS UNITS) 25 :S(PRINT1)F(END) PRINT1 OUTPUT = 'YIPPEE' TENS UNITS 25 : S(PRINT1)F(PRINT2) PRINT2 OUTPUT = 'UH OH' (END) END |
|
* filename: oct17.sno sentence = " turn at the green, black, orange house " Colors = 'orange' | 'Black' | 'green' again sentence Colors . Result :f(end) Output = result sentence Colors = output = sentence :(again) end |
|
* filename: eight.sno HAND = 'AC4DAHKDKS' OUTPUT = ' ORIGINAL HAND IS ' HAND RANK = 4 SUIT = 'D' HAND RANK SUIT = 'AS' OUTPUT = ' HAND AFTER FIRST REPLACEMENT IS ' HAND RANK = 'A' SUIT = 'S' HAND RANK SUIT = OUTPUT = ' HAND AFTER REPLACEMENT WITH NULL IS ' HAND END |
|
* Filename: SevenA.sno WORD = 'GIRD' OUTPUT = ' ORIGINAL WORD IS ' WORD WORD 'I' = 'OU' OUTPUT = ' WORD AFTER PATTERN MATCHING AND REPLACEMENT IS ' WORD WORD 'AB' = 'TO' :F(END) OUTPUT = ' PATTERN AB NOT FOUND IN ' WORD END |
Keys to
Quizzes: 2pm quiz 3:30pm
quiz
HOMEWORK
: