## Presentation on theme: "By: Bahman Ravaei Farhad Rad نیمسال"— Presentation transcript:

Introduction to the snobol 4 P.L
Developed at BELL laboratories in 1962 Is a string of characters (character oriented) Define other data type Consist of a sequence of statement Array and Table have more flexibility Function calls can be made recursively Link list node and complex number are possible programmer define data type

four basic type of statements:
i) the Assignment statement ii) the Pattern matching statements iii) the Replacement statement iv) the End statement

Assignment statements :
the simple type of assignment: variable = value example: v = 5 the value may be given an experssion example: W = ( ) which assigns the value 20 to the variable w

“BLANK are required around arithmetic operators”
The value may be string of characters example: v = ‘dog’

Arithmetic: i) Integers ii) Real arithmetic operation is “addition +” ,”subtraction -” ,”multiplication * ” ,”division / ” and “exponentiation ** or !” blanks are required between the binary operators and their operands ,Unary operator such as the minus sign must be adjacent to their operands. example: Q2 = -P / -N

Predicates of arithmetic operations :
-Unary operators -Exponentiation -Multiplication and Division -Addition and Subtraction All arithmetic operations associate to the left except exponentiation . example : ** 3 ** 5 is equivalent to : ** (3 ** 5)

Example : m = 4 n = 5 p = n * m / (n - 1) assign the value 5 to p
Example : pi = mul = 2. * pi * assign Real value to pi and mul

Pattern matching statements:
Define : The operation of examining for occurrence of specified substring Pattern matching have two type: i ) the pattern matching statement ii ) the replacement statement

the pattern matching statement :
the pattern matching statement has the form : subject pattern two fields separated by at least one blank example: trade = ‘programmer ’ trade ‘gram’ Pattern can an expression row = ‘k’ no. = ‘kk2429’ row no pattern is equivalent by ‘k24’

Replacement statements
The replacement statement has the form subject pattern = object If the pattern matching operation succeeds the subject string is modified by replacing the matched substring by the object . example: WORD = “GRID” WORD ‘I’ = ‘OU’ thus WORD is equivalent GROUD

If pattern not found the statement failed example: WORD ‘AB’ = ‘OU’ example: HAND = ‘AC4DAHDKS’ RANK = 4 SUIT = ‘D’ HAND RANK SUIT = ‘AS’ first RANK and SUIT concatenate that it’s 4D and later HAND ‘4D’ = ‘AS’ example : HAND RANK SUIT =

Patterns Two operation available for constructing complex patterns: i) alternation ii) concatenation alternation is indicated by expression of the form: P1 | P2 example: KEYWORD = ‘COMPUTER’ | ‘PROGRAM’ KEYWORD = KEYWORD | ‘ALGORITM’

can use KEYWORD to pattern field:
TEXT = ‘PROGRAMMING ALGORITM FOR COMPUTERS ‘ TEXT KEYWORD = after matching: TEXT = ‘MING ALGORITM FOR COMPUTERS’

Concatenation Concatenation of two patterns ,P1 and P2 ,is specified in the same way as the concatenation of two strings: P1 P2 example: BASE = ‘BINARY’ | ‘DECIMAL’ | ‘HEX’ SCALE = ‘FIXED’ | ‘FLOAT’ ATTRIBUTE = SCALE BASE

Array : Arrays are created by function ARRAY . ARRAY (p , e) example : board = ARRAY (‘3,3’ , ‘x’) x X

Example : A1 = ARRAY ( 5 ) A2 = ARRAY (5 , A1) A A1

Flow of control A SNOBOL program is a sequence of statements terminated by an end statement . labels and goto provide to control the flow of the program. Example of label: START TEXT = INPUT the end statement is distinguished by the label END

Transfer to a labelled statement is specified in the goto field which may appear at the end of a statement and is separated from the rest of the statement by a colon ‘ : ’. Two types of transfers can be specified in the goto field : i ) conditional ii ) unconditional

conditional A conditional transfer consists of a label enclosed within parentheses preceded by an F or S corresponding to Failure or Success. example : TEXT = INPUT :F(DONE) example : LOOP PUNCH = INPUT S:LOOP END

we can use F and S in one statement example:
we can use F and S in one statement example: COLOR = ‘RED’ | ‘GREEN’ | ‘BLUE’ BRIGHT TEXT COLOR = :S(BRIGHT)F(BLAND) BLAND …….

unconditional An unconditional transfer is indicated by the absence of an F or S before the enclosing parentheses . example: LOOP PUNCH = INPUT :F(END) OUTPUT = PUNCH :(LOOP) END

Indirect reference Indirect referencing is indicated by the unary operator \$. examples: i) MONTH = ‘APRIL’ \$MONTH = ‘CRUEL’ is equivalent: APRIL = ‘CRUEL’ ii) WORD = ‘RUN’ \$(WORD ‘:’) = \$(WORD ‘:’) iii) \$(‘A’ | ‘B’) iv) N = N :(\$(‘PHASE’ N))

Functions: i) primitive functions ii) predicates iii) defined functions

Primitive function Many snobol procedure are invoked by function built into the system ,called primitive functions. Few example of primitive function: i) SIZE (string) APE = ‘SIMIAN’ OUTPUT = SIZE(APE) ii) DUPL (string ,integer) DUPL(‘/*’,5) iii) REPLACE( TEXT,CH1,CH2) STATEMENT = ‘A(I,J) = A(I,J) + 3’ OUTPUT = REPLACE(STATEMENT,’()’,’<>’) print the line : A<I,J> = A<I,J> + 3

Predicate: A function or operation that returns the NULL string if a given condition is satisfied. Example: i) LE(n1 , n2 ) PUNCH = LE( SIZE(TEXT),80) TEXT ii) LT( n1 , n2 ) ADD N = LT( N , 50 ) N+1 iii) DIFFER ( st1 , st2 ) OUTPUT = DIFFER ( FIRST , SECOND ) FIRST SECOND iv) LGT ( st1 , st2 )

Defined function: A function defined by Programmer.
The primitive function DEFINE to specify the function name , formal arguments , local variables, and the entry point of the function. Example: DEFINE ( ‘ DELETE ( STRING , CHAR )’ , ‘D1’ ) D STRING CHAR = :S ( D1 ) DELETE = STRING : ( RETURN )

Example: DEFINE ( ‘ DELETE ( STRING , CHAR )’ ) DELETE STRING CHAR = :F ( FRETURN) D2 STRING CHAR = :S ( D1 ) DELETE = STRING : ( RETURN )

Programmer define data type:
The primitive function DATA can be used to difine the new data type. Example: DATA( ‘ NODE ( VALUE , LINK)’) P = NODE (‘ S ‘ , ) P = NODE (‘ T ‘ , P ) P = LINK ( P ) P ‘ T ‘ ‘ S’ NULL

Program format: Example:
OUTPUT = ‘ THE TOTAL NUMBER OF OCCURRENCE IS’ + SUM< N > X = 2 ; Y = 3 ; Z = 10 * : THIS IS A COMMENT

End