14 - Villanova Computer Science

Download Report

Transcript 14 - Villanova Computer Science

Programming Languages
Meeting 14
December 9/10, 2014
CATS
Planning
• Final Exam, next week, Tuesday, December 16,
2:30 – 5:00 pm, MSC 290
• Or Wednesday, December 17, 6:15 – 8:45 pm,
MSC G86
Topics for Final
• Syntax and syntax specification: EBNF
– Nonterminal, terminal, production, start symbol
– Grammar of expressions
• Inferred precedence and association
– Syntax trees
• Abstract syntax
Topics (1.1)
• Semantics and semantic specification
– Env, Loc, Store, Value, Memory
– Program functions
– Backus notation for functional programming
Topics (2)
• Semantics examples
– REF, a language of pointers
– Multiple assignment statements
• Control structures
– Sequence
– While
– If-then
– For
Topics (3)
• Parameter passing
– Value
– Result
– Value-result
– Reference
– Name
Topics (4)
• Functional programming
– Lists
– Atoms
– Primitive functions
– Functionals
– User-defined functions
– Predicates
Topics (4.1)
• Developing from primitives and functionals
– Use of recursion
• Catching error conditions
– Proper error messages
• Measures of lists
– Length
– Depth
Topics (5)
• Scripting languages
– AWK
– Perl
• Regular expressions
AWK Questions
AWK Programs
{for (w=1;w<=NF;w++) count[$w]++}
END {for (w in count) print count[w],w}
/^$/ {count++}
END {print count}
/<..*>/
Paradigms
• Programming paradigm: pattern of problemsolving thought that underlies a particular
genre of programs and languages.
• Four main programming paradigms:
– Imperative
– Object-oriented
– Functional
– Logic (declarative)
Imperative
• Follows the classic von Neumann-Eckert model:
–
–
–
–
Program and data are indistinguishable in memory
Program: a sequence of commands
State: values of all variables when program runs
Large programs use procedural abstraction
• Examples of imperative languages:
– Cobol, Fortran, C, Ada, Perl
– Historically: PL1, Algol, Pascal
Object-oriented
• Collection of objects (instantiated from
classes) that interact by passing messages that
transform the state.
• Need to know:
– Ways of sending messages
– Inheritance
– Polymorphism
• Examples of OO languages:
– Smalltalk, Modula, Java, C++, C#, Python
Functional
• Models a computation with a collection of
functions acting on a set of objects, usually lists.
– Input: domain of the function
– Output: codomain of the function
• Functional languages are characterized by:
– Functional composition
– Recursion
• Examples of functional languages:
– Lisp, Scheme, ML, Haskell
Logical
• Logic programming declares what outcome
the program should accomplish, rather than
how it should be accomplished.
• Programs are:
– Sets of constraints on a problem
– Achieve all possible solutions
– Nondeterministic, in some cases
• Example of a logic programming language:
– Prolog
Special Languages
• Symbolic computation
– Macsyma, Mathematica, Maple, Reduce
• Mathematical
– APL, Basic, Cayley
• Music
– ChucK
• Markup
– HTML, MusicXML, LaTeX
• Scripting
– AWK, Perl, JavaScript, PHP
• and hundreds more for every special circumstance
PERL
•
•
•
•
Practical Extraction and Support Language
A glue language under Unix
Written by Larry Wall
See www.perl.com
PERL
•
•
•
•
•
•
•
•
Scripting language
More powerful than AWK
More flexible than shell scripts
Syntax derived from C
Large language
Later versions contain classes
Many irregularities in design
Many alternatives for syntax
PERL
Beginning assumptions and notations
• Statements are terminated by ; (semicolon)
• Comments start with # and occupy the rest of
the line.
– NO two-line comments
• Parentheses around arguments to built-in
functions are optional
PERL
• First line of program is an interpreter directive,
written as a special type of comment, giving
the full path to the Perl interpreter
#!/usr/local/bin/perl -w
Example 1
#!/usr/local/bin/perl –w
print(“Hello, world!\n”);
Example 1
#!/usr/local/bin/perl –w
print(“Hello, world!\n”);
Inserts new line character
PERL
• Scalars
– Integer, real, string
• Identifier must start with $
• Arrays
– Indexed by integers
• Identifier must start with @
– Indexed by strings
• Identifier must start with %
Example 2
#!/usr/local/bin/perl –w
print(“What is your name? ”);
$name = <STDIN>;
chomp($name);
print “Hello, $name!\n”;
Example 2
#!/usr/local/bin/perl –w
print(“What is your name? ”);
$name = <STDIN>;
Critical space
chomp($name);
print “Hello, $name!\n”;
Example 2
#!/usr/local/bin/perl –w
print(“What is your name? ”);
$name = <STDIN>; #Reads one line
chomp($name);
#Cuts off EOL
print “Hello, $name!\n”;
PERL
• Control structures
if-then-elsif
foreach $element (%list) { … }
Example 3
#!/usr/local/bin/perl –w
print “What is your name? ”;
$name = <STDIN>;
chomp($name);
if ($name eq “Nico”)
{print “Hello, $name! Glad you’re here.\n”}
elsif ($name eq “Daphne”)
{print “Going outside, $name?\n”}
else
{print “Hello, $name.\n”};
PERL
• Dynamically typed
– Type inferred from operations
– Compare
2 < 10 (true)
2 lt 10 (false)
2 < “10” (true)
“2” lt 10 (false)
• Numbers, strings, regular expressions
• Operators are not overloaded
Arrays of Strings
• Can be initialized with a list of strings
@words = (“camel”,”llama”,”alpaca”);
• Or use the keystroke saving function qw
@words=qw(camel llama alpaca);
• Note that an individual element is a string so that the
string identifier syntax must be used
$words[0] has value camel
Array Bounds
• Out of bounds arrays
– Impossible with associative arrays: strings are not
presumed to have order (in the sense of a next
function)
– Impossible with integer indexed arrays
@a = (2,3,5,7);
$a[7] = 17;
We’ll check the Env and Store
Scalar Operators
•
•
•
•
•
Numeric: + - * / ** %
Numeric comparison: < <= == >= > !=
String: . (for concat) x (for multiple concat)
String comparison: lt le eq ge gt ne
Assignment:
= (carries value of expression)
binary assignment: += *= .= etc
increment: ++$i $i++
(increment then assign vs. assign then increment)
Parameter Passing
• Parameter passing
– Formal parameters not included
– Values of arguments to a function come in the
array @_
– Example, the call range(1,74,3) puts 1 in $_[0], 74
in $_[1], and 3 in $_[2]
– Thus, a function can have a varying number of
arguments.
Parameter Passing (2)
• If parameter values are passed to a procedure
(subroutine in PERL language) in an array local
to the procedure, how are values returned to
the calling program?
• Options
–
–
–