snobol 4 by: bahman ravaei 790649 farhad rad 116703 81-82-2 نیمسال
TRANSCRIPT
SNOBOL 4
By: Bahman Ravaei 790649 Farhad Rad 116703
نیمسال 81-82-2
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 statementii) the Pattern matching
statementsiii) the Replacement statementiv) the End statement
Assignment statements:
• the simple type of assignment:variable = value
example:v = 5
• the value may be given an experssion example:
W = 14 + (16 - 10)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 : 2 ** 3 ** 5is equivalent to :
2 ** (3 ** 5)
Example :m = 4n = 5p = n * m / (n - 1)
assign the value 5 to pExample :
pi = 3.14159mul = 2. * pi * 5.
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 patterntwo fields separated by at least one blank
example: trade = ‘programmer ’ trade ‘gram’
• Pattern can an expression
row = ‘k’ no. = 20
‘kk2429’ row no. + 4
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 = 4SUIT = ‘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 | P2example:
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 P2example:
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 X
X x x
x x x
Example :A1 = ARRAY ( 5 )A2 = ARRAY (5 , A1)
A2 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 ) conditionalii ) 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:LOOPEND
we can use F and S in one statementexample:
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 ‘:’) + 1iii) $(‘A’ | ‘B’)
iv) N = N + 1 :($(‘PHASE’ N))
Functions:
i) primitive functionsii) predicatesiii) 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’ ) D1 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 ‘S ’ NULL ‘T‘
Program format: Example: OUTPUT = ‘ THE TOTAL NUMBER OF OCCURRENCE IS’
+ SUM< N >
Example: X = 2 ; Y = 3 ; Z = 10
* : THIS IS A COMMENT
End