4/11/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox.

Slides:



Advertisements
Similar presentations
Numbers Treasure Hunt Following each question, click on the answer. If correct, the next page will load with a graphic first – these can be used to check.
Advertisements

1 A B C
Simplifications of Context-Free Grammars
Variations of the Turing Machine
PDAs Accept Context-Free Languages
AP STUDY SESSION 2.
1
Select from the most commonly used minutes below.
Copyright © 2003 Pearson Education, Inc. Slide 1 Computer Systems Organization & Architecture Chapters 8-12 John D. Carpinelli.
David Burdett May 11, 2004 Package Binding for WS CDL.
Create an Application Title 1Y - Youth Chapter 5.
CALENDAR.
1 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt BlendsDigraphsShort.
Programming Language Concepts
1 Click here to End Presentation Software: Installation and Updates Internet Download CD release NACIS Updates.
The 5S numbers game..
Media-Monitoring Final Report April - May 2010 News.
Break Time Remaining 10:00.
Factoring Quadratics — ax² + bx + c Topic
EE, NCKU Tien-Hao Chang (Darby Chang)
Turing Machines.
Table 12.1: Cash Flows to a Cash and Carry Trading Strategy.
PP Test Review Sections 6-1 to 6-6
Briana B. Morrison Adapted from William Collins
Bellwork Do the following problem on a ½ sheet of paper and turn in.
Regression with Panel Data
1 The Royal Doulton Company The Royal Doulton Company is an English company producing tableware and collectables, dating to Operating originally.
Operating Systems Operating Systems - Winter 2012 Chapter 4 – Memory Management Vrije Universiteit Amsterdam.
Operating Systems Operating Systems - Winter 2010 Chapter 3 – Input/Output Vrije Universiteit Amsterdam.
Exarte Bezoek aan de Mediacampus Bachelor in de grafische en digitale media April 2014.
Lexical Analysis Arial Font Family.
TESOL International Convention Presentation- ESL Instruction: Developing Your Skills to Become a Master Conductor by Beth Clifton Crumpler by.
Copyright © 2012, Elsevier Inc. All rights Reserved. 1 Chapter 7 Modeling Structure with Blocks.
Chapter 1: Expressions, Equations, & Inequalities
Adding Up In Chunks.
MaK_Full ahead loaded 1 Alarm Page Directory (F11)
1 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt Synthetic.
1 Termination and shape-shifting heaps Byron Cook Microsoft Research, Cambridge Joint work with Josh Berdine, Dino Distefano, and.
Artificial Intelligence
Slide R - 1 Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Prentice Hall Active Learning Lecture Slides For use with Classroom Response.
Subtraction: Adding UP
: 3 00.
5 minutes.
1 Non Deterministic Automata. 2 Alphabet = Nondeterministic Finite Accepter (NFA)
1 hi at no doifpi me be go we of at be do go hi if me no of pi we Inorder Traversal Inorder traversal. n Visit the left subtree. n Visit the node. n Visit.
1 Let’s Recapitulate. 2 Regular Languages DFAs NFAs Regular Expressions Regular Grammars.
Types of selection structures
Speak Up for Safety Dr. Susan Strauss Harassment & Bullying Consultant November 9, 2012.
1 Titre de la diapositive SDMO Industries – Training Département MICS KERYS 09- MICS KERYS – WEBSITE.
Essential Cell Biology
12 System of Linear Equations Case Study
Converting a Fraction to %
Numerical Analysis 1 EE, NCKU Tien-Hao Chang (Darby Chang)
Exponents and Radicals
CSE20 Lecture 15 Karnaugh Maps Professor CK Cheng CSE Dept. UC San Diego 1.
Clock will move after 1 minute
Physics for Scientists & Engineers, 3rd Edition
Select a time to count down from the clock above
Copyright Tim Morris/St Stephen's School
1.step PMIT start + initial project data input Concept Concept.
9. Two Functions of Two Random Variables
1 Decidability continued…. 2 Theorem: For a recursively enumerable language it is undecidable to determine whether is finite Proof: We will reduce the.
1 Non Deterministic Automata. 2 Alphabet = Nondeterministic Finite Accepter (NFA)
1 Programming Languages (CS 550) Mini Language Interpreter Jeremy R. Johnson.
Chapter 4 FUGACITY.
Programming Languages and Compilers (CS 421)
Programming Languages and Compilers (CS 421)
Programming Languages and Compilers (CS 421)
Presentation transcript:

4/11/20151 Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC Based in part on slides by Mattox Beckman, as updated by Vikram Adve and Gul Agha

4/11/ Natural Semantics Aka Structural Operational Semantics, aka “Big Step Semantics” Provide value for a program by rules and derivations, similar to type derivations Rule conclusions look like (C, m)  m’ or (E, m)  v

4/11/ Simple Imperative Programming Language I  Identifiers N  Numerals B ::= true | false | B & B | B or B | not B | E < E | E = E E::= N | I | E + E | E * E | E - E | - E C::= skip | C;C | I ::= E | if B then C else C fi | while B do C od

4/11/ Natural Semantics of Atomic Expressions Identifiers: (I,m)  m(I) Numerals are values: (N,m)  N Booleans: (true,m)  true (false,m)  false

4/11/ Booleans: (B, m)  false (B, m)  true (B’, m)  b (B & B’, m)  false (B & B’, m)  b (B, m)  true (B, m)  false (B’, m)  b (B or B’, m)  true (B or B’, m)  b (B, m)  true (B, m)  false (not B, m)  false (not B, m)  true

4/11/ Relations (E, m)  U (E’, m)  V U ~ V = b (E ~ E’, m)  b By U ~ V = b, we mean does (the meaning of) the relation ~ hold on the meaning of U and V May be specified by a mathematical expression/equation or rules matching U and V

4/11/ Arithmetic Expressions (E, m)  U (E’, m)  V U op V = N (E op E’, m)  N where N is the specified value for U op V

4/11/ Commands Skip: (skip, m)  m Assignment: (E,m)  V (I::=E,m)  m[I <-- V ] Sequencing: (C,m)  m’ (C’,m’)  m’’ (C;C’, m)  m’’

4/11/ If Then Else Command (B,m)  true (C,m)  m’ (if B then C else C’ fi, m)  m’ (B,m)  false (C’,m)  m’ (if B then C else C’ fi, m)  m’

4/11/ While Command (B,m)  false (while B do C od, m)  m (B,m)  true (C,m)  m’ (while B do C od, m’ )  m’’ (while B do C od, m)  m’’

4/11/ Example: If Then Else Rule (2,{x->7})  2 (3,{x->7})  3 (2+3, {x->7})  5 (x,{x->7})  7 (5,{x->7})  5 (y:= 2 + 3, {x-> 7} (x > 5, {x -> 7})  true  {x- >7, y->5} (if x > 5 then y:= else y:=3 + 4 fi, {x -> 7})  ?

4/11/ Example: If Then Else Rule (2,{x->7})  2 (3,{x->7})  3 (2+3, {x->7})  5 (x,{x->7})  7 (5,{x->7})  5 (y:= 2 + 3, {x-> 7} (x > 5, {x -> 7})  ?  {x- >7, y->5} (if x > 5 then y:= else y:=3 + 4 fi, {x -> 7})  ? {x->7, y->5}

4/11/ Example: Arith Relation (2,{x->7})  2 (3,{x->7})  3 ? > ? = ? (2+3, {x->7})  5 (x,{x->7})  ? (5,{x->7})  ? (y:= 2 + 3, {x-> 7} (x > 5, {x -> 7})  ?  {x- >7, y->5} (if x > 5 then y:= else y:=3 + 4 fi, {x -> 7})  ? {x->7, y->5}

4/11/ Example: Identifier(s) (2,{x->7})  2 (3,{x->7})  3 7 > 5 = true (2+3, {x->7})  5 (x,{x->7})  7 (5,{x->7})  5 (y:= 2 + 3, {x-> 7} (x > 5, {x -> 7})  ?  {x- >7, y->5} (if x > 5 then y:= else y:=3 + 4 fi, {x -> 7})  ? {x->7, y->5}

4/11/ Example: Arith Relation (2,{x->7})  2 (3,{x->7})  3 7 > 5 = true (2+3, {x->7})  5 (x,{x->7})  7 (5,{x->7})  5 (y:= 2 + 3, {x-> 7} (x > 5, {x -> 7})  true  {x- >7, y->5} (if x > 5 then y:= else y:=3 + 4 fi, {x -> 7})  ? {x->7, y->5}

4/11/ Example: If Then Else Rule (2,{x->7})  2 (3,{x->7})  3 7 > 5 = true (2+3, {x->7})  5 (x,{x->7})  7 (5,{x->7})  5 (y:= 2 + 3, {x-> 7} (x > 5, {x -> 7})  true  ?. (if x > 5 then y:= else y:=3 + 4 fi, {x -> 7})  ? {x->7, y->5}

4/11/ Example: Assignment (2,{x->7})  2 (3,{x->7})  3 7 > 5 = true (2+3, {x->7})  ? (x,{x->7})  7 (5,{x->7})  5 (y:= 2 + 3, {x-> 7} (x > 5, {x -> 7})  true  ? {x- >7, y->5} (if x > 5 then y:= else y:=3 + 4 fi, {x -> 7})  ? {x->7, y->5}

4/11/ Example: Arith Op ? + ? = ? (2,{x->7})  ? (3,{x->7})  ? 7 > 5 = true (2+3, {x->7})  ? (x,{x->7})  7 (5,{x->7})  5 (y:= 2 + 3, {x-> 7} (x > 5, {x -> 7})  true  ?. (if x > 5 then y:= else y:=3 + 4 fi, {x -> 7})  ? {x->7, y->5}

4/11/ Example: Numerals = 5 (2,{x->7})  2 (3,{x->7})  3 7 > 5 = true (2+3, {x->7})  ? (x,{x->7})  7 (5,{x->7})  5 (y:= 2 + 3, {x-> 7} (x > 5, {x -> 7})  true  ?{x->7, y->5} (if x > 5 then y:= else y:=3 + 4 fi, {x -> 7})  ? {x->7, y->5}

4/11/ Example: Arith Op = 5 (2,{x->7})  2 (3,{x->7})  3 7 > 5 = true (2+3, {x->7})  5 (x,{x->7})  7 (5,{x->7})  5 (y:= 2 + 3, {x-> 7} (x > 5, {x -> 7})  true  ? {x->7, y->5} (if x > 5 then y:= else y:=3 + 4 fi, {x -> 7})  ? {x->7, y->5}

4/11/ Example: Assignment = 5 (2,{x->7})  2 (3,{x->7})  3 7 > 5 = true (2+3, {x->7})  5 (x,{x->7})  7 (5,{x->7})  5 (y:= 2 + 3, {x-> 7} (x > 5, {x -> 7})  true  {x->7, y->5} (if x > 5 then y:= else y:=3 + 4 fi, {x -> 7})  ? {x->7, y->5}

4/11/ Example: If Then Else Rule = 5 (2,{x->7})  2 (3,{x->7})  3 7 > 5 = true (2+3, {x->7})  5 (x,{x->7})  7 (5,{x->7})  5 (y:= 2 + 3, {x-> 7} (x > 5, {x -> 7})  true  {x->7, y->5} (if x > 5 then y:= else y:=3 + 4 fi, {x -> 7})  {x->7, y->5}

4/11/ Let in Command (E,m)  v (C,m[I<-v])  m’ (let I = E in C, m)  m’ ’ Where m’’ (y) = m’ (y) for y  I and m’’ (I) = m (I) if m(I) is defined, and m’’ (I) is undefined otherwise

4/11/ Example (x,{x->5})  5 (3,{x->5})  3 (x+3,{x->5})  8 (5,{x->17})  5 (x:=x+3,{x->5})  {x->8} (let x = 5 in (x:=x+3), {x -> 17})  ?

4/11/ Example (x,{x->5})  5 (3,{x->5})  3 (x+3,{x->5})  8 (5,{x->17})  5 (x:=x+3,{x->5})  {x->8} (let x = 5 in (x:=x+3), {x -> 17})  {x->17}

4/11/ Comment Simple Imperative Programming Language introduces variables implicitly through assignment The let-in command introduces scoped variables explictly Clash of constructs apparent in awkward semantics

4/11/ Interpretation Versus Compilation A compiler from language L1 to language L2 is a program that takes an L1 program and for each piece of code in L1 generates a piece of code in L2 of same meaning An interpreter of L1 in L2 is an L2 program that executes the meaning of a given L1 program Compiler would examine the body of a loop once; an interpreter would examine it every time the loop was executed

4/11/ Interpreter An Interpreter represents the operational semantics of a language L1 (source language) in the language of implementation L2 (target language) Built incrementally Start with literals Variables Primitive operations Evaluation of expressions Evaluation of commands/declarations

4/11/ Interpreter Takes abstract syntax trees as input In simple cases could be just strings One procedure for each syntactic category (nonterminal) eg one for expressions, another for commands If Natural semantics used, tells how to compute final value from code If Transition semantics used, tells how to compute next “state” To get final value, put in a loop

4/11/ Natural Semantics Example compute_exp (Var(v), m) = look_up v m compute_exp (Int(n), _) = Num (n) … compute_com(IfExp(b,c1,c2),m) = if compute_exp (b,m) = Bool(true) then compute_com (c1,m) else compute_com (c2,m)

4/11/ Natural Semantics Example compute_com(While(b,c), m) = if compute_exp (b,m) = Bool(false) then m else compute_com (While(b,c), compute_com(c,m)) May fail to terminate - exceed stack limits Returns no useful information then

4/11/ Transition Semantics Form of operational semantics Describes how each program construct transforms machine state by transitions Rules look like (C, m) --> (C’, m’) or (C,m) --> m’ C, C’ is code remaining to be executed m, m’ represent the state/store/memory/environment Partial mapping from identifiers to values Sometimes m (or C) not needed Indicates exactly one step of computation

4/11/ Expressions and Values C, C’ used for commands; E, E’ for expressions; U,V for values Special class of expressions designated as values Eg 2, 3 are values, but 2+3 is only an expression Memory only holds values Other possibilities exist

Evaluation Semantics Transitions successfully stops when E/C is a value/memory Evaluation fails if no transition possible, but not at value/memory Value/memory is the final meaning of original expression/command (in the given state) Coarse semantics: final value / memory More fine grained: whole transition sequence 4/11/

4/11/ Simple Imperative Programming Language I  Identifiers N  Numerals B ::= true | false | B & B | B or B | not B | E < E | E = E E::= N | I | E + E | E * E | E - E | - E C::= skip | C;C | I ::= E | if B then C else C fi | while B do C od

4/11/ Transitions for Expressions Numerals are values Boolean values = {true, false} Identifiers: (I,m) --> (m(I), m)

4/11/ Boolean Operations: Operators: (short-circuit) (false & B, m) --> (false,m) (B, m) --> (B”, m) (true & B, m) --> (B,m) (B & B’, m) --> (B” & B’, m) (true or B, m) --> (true,m) (B, m) --> (B”, m) (false or B, m) --> (B,m) (B or B’, m) --> (B” or B’,m) (not true, m) --> (false,m) (B, m) --> (B’, m) (not false, m) --> (true,m) (not B, m) --> (not B’, m)

4/11/ Relations (E, m) --> (E’’,m) (E ~ E’, m) --> (E’’~E’,m) (E, m) --> (E’,m) (V ~ E, m) --> (V~E’,m) (U ~ V, m) --> (true,m) or (false,m) depending on whether U ~ V holds or not

4/11/ Arithmetic Expressions (E, m) --> (E’’,m) (E op E’, m) --> (E’’ op E’,m) (E, m) --> (E’,m) (V op E, m) --> (V op E’,m) (U op V, m) --> (N,m) where N is the specified value for U op V

4/11/ Commands - in English skip means done evaluating When evaluating an assignment, evaluate the expression first If the expression being assigned is already a value, update the memory with the new value for the identifier When evaluating a sequence, work on the first command in the sequence first If the first command evaluates to a new memory (ie completes), evaluate remainder with new memory

4/11/ Commands (skip, m) --> m (E,m) --> (E’,m) (I::=E,m) --> (I::=E’,m) (I::=V,m) --> m[I <-- V ] (C,m) --> (C”,m’ ) (C,m) --> m’ (C;C’, m) --> (C”;C’,m’) (C;C’, m) --> (C’,m’ )

4/11/ If Then Else Command - in English If the boolean guard in an if_then_else is true, then evaluate the first branch If it is false, evaluate the second branch If the boolean guard is not a value, then start by evaluating it first.

4/11/ If Then Else Command (if true then C else C’ fi, m) --> (C, m) (if false then C else C’ fi, m) --> (C’, m) (B,m) --> (B’,m) (if B then C else C’ fi, m) --> (if B’ then C else C’ fi, m)

4/11/ While Command (while B do C od, m) --> (if B then C; while B do C od else skip fi, m) In English: Expand a While into a test of the boolean guard, with the true case being to do the body and then try the while loop again, and the false case being to stop.

4/11/ Example Evaluation First step: (if x > 5 then y:= else y:=3 + 4 fi, {x -> 7}) --> ?

4/11/ Example Evaluation First step: (x > 5, {x -> 7}) --> ? (if x > 5 then y:= else y:=3 + 4 fi, {x -> 7}) --> ?

4/11/ Example Evaluation First step: (x,{x -> 7}) --> (7, {x -> 7}) (x > 5, {x -> 7}) --> ? (if x > 5 then y:= else y:=3 + 4 fi, {x -> 7}) --> ?

4/11/ Example Evaluation First step: (x,{x -> 7}) --> (7, {x -> 7}) (x > 5, {x -> 7}) --> (7 > 5, {x -> 7}) (if x > 5 then y:= else y:=3 + 4 fi, {x -> 7}) --> ?

4/11/ Example Evaluation First step: (x,{x -> 7}) --> (7, {x -> 7}) (x > 5, {x -> 7}) --> (7 > 5, {x -> 7}) (if x > 5 then y:= else y:=3 + 4 fi, {x -> 7}) --> (if 7 > 5 then y:=2 + 3 else y:=3 + 4 fi, {x -> 7})

4/11/ Example Evaluation Second Step: (7 > 5, {x -> 7}) --> (true, {x -> 7}) (if 7 > 5 then y:=2 + 3 else y:=3 + 4 fi, {x -> 7}) --> (if true then y:=2 + 3 else y:=3 + 4 fi, {x -> 7}) Third Step: (if true then y:=2 + 3 else y:=3 + 4 fi, {x -> 7}) -->(y:=2+3, {x->7})

4/11/ Example Evaluation Fourth Step: (2+3, {x-> 7}) --> (5, {x -> 7}) (y:=2+3, {x->7}) --> (y:=5, {x->7}) Fifth Step: (y:=5, {x->7}) --> {y -> 5, x -> 7}

4/11/ Example Evaluation Bottom Line: (if x > 5 then y:= else y:=3 + 4 fi, {x -> 7}) --> (if 7 > 5 then y:=2 + 3 else y:=3 + 4 fi, {x -> 7}) -->(if true then y:=2 + 3 else y:=3 + 4 fi, {x -> 7}) -->(y:=2+3, {x->7}) --> (y:=5, {x->7}) --> {y -> 5, x -> 7}

4/11/ Transition Semantics Evaluation A sequence of steps with trees of justification for each step (C 1,m 1 ) --> (C 2,m 2 ) --> (C 3,m 3 ) --> … --> m Let -->* be the transitive closure of --> Ie, the smallest transitive relation containing -->

4/11/ Adding Local Declarations Add to expressions: E ::= … | let I = E in E’ | fun I -> E | E E’ fun I -> E is a value Could handle local binding using state, but have assumption that evaluating expressions doesn’t alter the environment We will use substitution here instead Notation: E [E’ / I ] means replace all free occurrence of I by E’ in E

4/11/ Call-by-value (Eager Evaluation) (let I = V in E, m) --> (E[V/ I ],m) (E, m) --> (E’’,m) (let I = E in E’, m) --> (let I = E’’ in E’) ((fun I -> E) V, m) --> (E[V / I ],m) (E’, m) --> (E’’,m) ((fun I -> E) E’, m) --> ((fun I -> E) E’’, m)

4/11/ Call-by-name (Lazy Evaluation) (let I = E in E’, m) --> (E’ [E / I ],m) ((fun I -> E’ ) E, m) --> (E’ [E / I ],m) Question: Does it make a difference? It can depending on the language

4/11/ Church-Rosser Property Church-Rosser Property: If E-->* E 1 and E-->* E 2, if there exists a value V such that E 1 -->* V, then E 2 -->* V Also called confluence or diamond property Example: E= E 1 = E 2 = V =9

4/11/ Does It always Hold? No. Languages with side-effects tend not be Church-Rosser with the combination of call-by- name and call-by-value Alonzo Church and Barkley Rosser proved in 1936 the -calculus does have it Benefit of Church-Rosser: can check equality of terms by evaluating them (Given evaluation strategy might not terminate, though)

4/11/ Transition Semantics for -Calculus Application (version 1) ( x. E) E’ --> E[E’/x] Application (version 2) ( x. E) V --> E[V/x] E’ --> E’’ ( x. E) E’ --> ( x. E) E’’