Presentation is loading. Please wait.

Presentation is loading. Please wait.

Programming Languages and Compilers (CS 421)

Similar presentations


Presentation on theme: "Programming Languages and Compilers (CS 421)"— Presentation transcript:

1 Programming Languages and Compilers (CS 421)
William Mansky Based in part on slides by Mattox Beckman, as updated by Vikram Adve, Gul Agha, Elsa Gunter, and Dennis Griffith 5/11/2018

2 The Big Picture OCaml/Functional Programming
Continuation Passing Style Type checking/inference Unification Lexing Parsing Operational Semantics Lambda Calculus Hoare Logic 5/11/2018

3 Anatomy of an Interpreter
Program Text Lexing regular expressions/lex Token Buffer Parsing BNF grammar/yacc AST Static Semantics type checking/inference, unification possibly Hoare Logic! Correct AST Dynamic Semantics operational semantics Program Output 5/11/2018

4 regular expressions/lex
Anatomy of a Compiler Program Text Lexing regular expressions/lex Token Buffer Parsing BNF grammar/yacc AST Static Semantics type checking/inference, unification possibly Hoare Logic! Correct AST Translation denotational semantics possibly CPS! } IR Optimization CS 426 Optimized IR Code Generation (denotational semantics again) 5/11/2018 Assembly/Machine Code (or lambda calculus!)

5 What can we do now? Write functional programs (which parallelize well and compute math quickly) Build compilers and interpreters Specify and implement programming languages Prove programs correct Compare various approaches to PL syntax and semantics 5/11/2018

6 Formal Methods The study of proving programs correct
But what is a program? Anything we can model formally/mathematically Computer programs, machines, workflows Compilers, air traffic control protocols, security protocols, simulators, Java programs And how do we prove it correct? Syntax, semantics, formal logic, automatic/interactive provers 5/11/2018

7 Verifying a Compiler “do the same thing” Program Text Lexing
Token Buffer Parsing AST “do the same thing” Static Semantics Correct AST Translation IR Optimization Optimized IR Code Generation 5/11/2018 Assembly/Machine Code

8 Verifying a Compiler have the same semantics? Program Text Lexing
Token Buffer Parsing AST have the same semantics? Static Semantics Correct AST Translation IR Optimization Optimized IR Code Generation 5/11/2018 Assembly/Machine Code

9 Verifying a Compiler have the same semantics Program Text Lexing
Token Buffer Parsing AST Static Semantics Correct AST have the same semantics Translation IR Optimization Optimized IR Code Generation 5/11/2018 Assembly/Machine Code

10 Verifying a Compiler prove this! Semantics Input AST Input Meaning
Translation Semantics Output AST Output Meaning 5/11/2018

11 Verifying a Compiler – Example
PicoML SOS PicoML AST PicoML Value prove this! Denotation LC SOS Lambda-term LC Value 5/11/2018

12 Verifying a Compiler – Example
PicoML SOS PicoML AST PicoML Value prove this! Denotation LC SOS Lambda-term LC Value Can we prove this for every program? 5/11/2018

13 Verifying a Compiler – Example
PicoML SOS PicoML AST PicoML Value prove this! Denotation LC SOS Lambda-term LC Value Can we prove this for every program? Yes. 5/11/2018

14 Verifying a Compiler – Harder Case
Semantics Compiler IR Input Meaning prove this! Optimization Semantics Compiler IR Output Meaning Can we prove this for every program? 5/11/2018

15 Control Flow Graphs ASTs are good for complex expressions
What if we care more about control flow than expression structure? Graphs with commands on nodes, edges showing control flow 5/11/2018

16 Control Flow Graphs 0: x := 1 Entry 1: if x > 0 goto 4
2: x := x + 1 3: goto 5 4: x := x - 1 5: y := x 6: return y Entry seq x := 1 seq if x > 0 seq branch x := x + 1 x := x - 1 seq goto seq branch y := x seq return y seq Exit

17 Semantics on Control Flow Graphs
Configurations are (G, n, m), where G is a graph and n is the currently executing node Small-step for moving between nodes, big-step within a single node E.g. (Assignment Rule): label(G, n) = I := E (E, m) v out(n) = n' (G, n, m)  (G, n', m[x  v]) 5/11/2018

18 Verifying a Compiler – Harder Case
CFG Semantics Input CFG Input Value prove this! Optimization CFG Semantics Output CFG Output Value 5/11/2018

19 Questions? 5/11/2018


Download ppt "Programming Languages and Compilers (CS 421)"

Similar presentations


Ads by Google