CS 430 In-Class Discussion  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)

 

Link to Adams’ Notes:

 

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 :