-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
789b9e9
commit 4d2f687
Showing
50 changed files
with
167 additions
and
16 deletions.
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
+++ | ||
draft = false | ||
title = 'AAA616-22F' | ||
+++ | ||
|
||
# Program Analysis, 2022 Fall | ||
|
||
## Course Information | ||
|
||
- Instructor: [Hakjoo Oh]({{< ref "/members/hakjoo-oh.md" >}}) | ||
- [Syllabus](./syllabus.pdf) | ||
|
||
## Slides | ||
|
||
- [Lecture 0: Program Analysis Overview](./slides/lecture0-overview.pdf) | ||
- [Lecture 1: Preliminaries](./slides/lec1.pdf) | ||
- [Lecture 2: Operational Semantics](./slides/lec2.pdf) | ||
- [Lecture 3: Denotational Semantics](./slides/lec3.pdf) | ||
- [Lecture 4: Introduction to Static Analysis](./slides/lec4.pdf) | ||
- [Lecture 5: Abstract Interpretation Framework](./slides/lec5.pdf) | ||
- [Lecture 6: Abstract Interpretation Example (1)](./slides/lec6.pdf) | ||
- [Lecture 7: Abstract Interpretation Example (2)](./slides/lec7.pdf) | ||
- [Lecture 8: Pointer Analysis](./slides/lec8.pdf) | ||
- [Lecture 9: Control-Flow Analysis](./slides/lec9.pdf) | ||
- [Lecture 10: Data-Flow Analysis](./slides/lec10.pdf) | ||
|
||
## Homework | ||
|
||
- [HW1: Interval Analysis](./homeworks/hw1.pdf) | ||
- [HW2: Interval/Pointer Analysis](./homeworks/hw2.pdf) | ||
- [HW3: Control-Flow Analysis](./homeworks/hw3.pdf) |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
+++ | ||
draft = false | ||
title = 'COSE212-22F' | ||
+++ | ||
|
||
# Programming Languages, 2022 Fall | ||
|
||
## Course Information | ||
|
||
- Instructor: [Hakjoo Oh]({{< ref "/members/hakjoo-oh.md" >}}) | ||
- TAs: Minseok Jeon, Seokhyun Lee | ||
- Lecture: 09:00-11:45 on Tuesdays and Thursdays (8 weeks) | ||
- [Syllabus](./syllabus.pdf) | ||
|
||
## References | ||
|
||
- [프로그래밍 언어의 원리](./pl-book.pdf) | ||
- [Essentials of Programming Languages](http://www.amazon.com/gp/product/0262062798?ie=UTF8&tag=ucmbread-20&linkCode=as2&camp=1789&creative=9325&creativeASIN=0262062798) | ||
- [Notes on Programming Languages (in Korean)](./pl-book-draft.pdf) | ||
|
||
## Slides | ||
|
||
- Course Overview: [lec0.pdf](./slides/lec0.pdf) | ||
- (Part 1) Preliminaries | ||
- Inductive Definitions: [lec1.pdf](./slides/lec1.pdf), [lec2.pdf](./slides/lec2.pdf) | ||
- Functional Programming: [lec3.pdf](./slides/lec3.pdf), [lec4.pdf](./slides/lec4.pdf) | ||
- (Part 2) Basic Concepts | ||
- Expressions: [lec5.pdf](./slides/lec5.pdf), [code](./slides/let.ml) | ||
- Procedures: [lec6.pdf](./slides/lec6.pdf) | ||
- Lexical scoping: [lec7.pdf](./slides/lec7.pdf) | ||
- States: [lec8.pdf](./slides/lec8.pdf) | ||
- Records, Pointers, and garbage collection: [lec9.pdf](./slides/lec9.pdf) | ||
- (Part 3) Advanced Concepts | ||
- Introduction to program analysis: [lec10a.pdf](./slides/lec10a.pdf) | ||
- Static Type System: [lec10.pdf](./slides/lec10.pdf), [lec11.pdf](./slides/lec11.pdf), [lec12.pdf](./slides/lec12.pdf) | ||
- Automatic Type Inference: [lec13.pdf](./slides/lec13.pdf), [lec14.pdf](./slides/lec14.pdf), [lec15.pdf](./slides/lec15.pdf) | ||
- Polymorphic Type System: [lec16.pdf](./slides/lec16.pdf) | ||
- Lambda Calculus: [lec17.pdf](./slides/lec17.pdf) | ||
- Course Review: [lec18.pdf](./slides/lec18.pdf) | ||
|
||
## Homework | ||
|
||
- **[TryML: System for programming assignments](https://tryml.korea.ac.kr/)** | ||
- **[How to use TryML](./homeworks//howtohw.pdf)** | ||
- Homework 1 (Functional Programming 1) [hw1.pdf](./homeworks/hw1.pdf) | ||
- Homework 2 (Functional Programming 2) [hw2.pdf](./homeworks/hw2.pdf) | ||
- Homework 3 (Interpreter for Functional Language) [hw3.pdf](./homeworks/hw3.pdf) | ||
- Homework 4 (Interpreter for Imperative Language) [hw4.pdf](./homeworks/hw4.pdf) | ||
- Homework 5 (Static Type System) [hw5.pdf](./homeworks/hw5.pdf) |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
(* | ||
1. store this file as a file (e.g. "let.ml") | ||
2. type "ocaml let.ml" in the shell command line | ||
*) | ||
|
||
type pgm = exp | ||
and exp = | ||
| CONST of int | ||
| VAR of string | ||
| ADD of exp * exp | ||
| SUB of exp * exp | ||
| ISZERO of exp | ||
| IF of exp * exp * exp | ||
| LET of string * exp * exp | ||
| READ | ||
|
||
(* | ||
let x = 1 in | ||
let y = let x = 2 | ||
in x + x | ||
in x + y | ||
*) | ||
let pgm1 = | ||
LET ("x", CONST 1, | ||
LET ("y", LET ("x", CONST 2, | ||
ADD (VAR "x", VAR "x")), | ||
(ADD (VAR "x", VAR "y")))) | ||
|
||
type value = Int of int | Bool of bool | ||
|
||
module Env = struct | ||
type t = (string * value) list | ||
let empty = [] | ||
let rec lookup x e = | ||
match e with | ||
| [] -> raise (Failure ("Env: Not found: " ^ x)) | ||
| (y,v)::tl -> | ||
if y = x then v else lookup x tl | ||
let update x v e = (x,v)::e | ||
end | ||
|
||
let rec eval : Env.t -> exp -> value | ||
=fun env exp -> | ||
match exp with | ||
| CONST n -> Int n | ||
| VAR x -> Env.lookup x env | ||
| ADD (e1, e2) -> binop env e1 e2 (+) | ||
| SUB (e1, e2) -> binop env e1 e2 (-) | ||
| READ -> Int (read_int ()) | ||
| ISZERO e -> | ||
(match eval env e with | ||
| Int 0 -> Bool true | ||
| Int _ -> Bool false | ||
| _ -> raise (Failure "type error")) | ||
| IF (e1,e2,e3) -> | ||
(match eval env e1 with | ||
| Bool true -> eval env e2 | ||
| Bool false -> eval env e3 | ||
| _ -> raise (Failure "type error")) | ||
| LET (x,e1,e2) -> | ||
let v1 = eval env e1 in | ||
let v = eval (Env.update x v1 env) e2 in | ||
v | ||
|
||
and binop env e1 e2 op = | ||
let v1 = eval env e1 in | ||
let v2 = eval env e2 in | ||
match v1, v2 with | ||
| Int n1, Int n2 -> Int (op n1 n2) | ||
| _ -> raise (Failure ("type error")) | ||
|
||
let print_value v = | ||
print_endline (match v with | ||
| Int n -> string_of_int n | ||
| Bool b -> string_of_bool b) | ||
|
||
let _ = print_value (eval Env.empty pgm1) |
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters