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 problem- solving 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
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 – Indexed by strings Identifier must start with %
Example 2 #!/usr/local/bin/perl –w print(“What is your name? ”); $name = ; chomp($name); print “Hello, $name!\n”;
Example 2 #!/usr/local/bin/perl –w print(“What is your name? ”); $name = ; chomp($name); print “Hello, $name!\n”; Critical space
Example 2 #!/usr/local/bin/perl –w print(“What is your name? ”); $name = ; #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 = ; 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 = (“camel”,”llama”,”alpaca”); Or use the keystroke saving function 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 = (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 – 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 –