10 - 2004 10 - 2012 · 10 - 2004 10 - 2012 3/7/12 27 grammar rule semantic rule class → class...

35
INF 3110/4110 - 2004 INF 5110 - 2012 3/7/12 1

Upload: others

Post on 13-Jul-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 10 - 2004 10 - 2012 · 10 - 2004 10 - 2012 3/7/12 27 Grammar Rule Semantic Rule class → class name { decls } decls.enclosingClassName = name.name decls 1 → decls 2; decl decls

INF 3110/4110 - 2004

INF 5110 - 2012

3/7/12 1

Page 2: 10 - 2004 10 - 2012 · 10 - 2004 10 - 2012 3/7/12 27 Grammar Rule Semantic Rule class → class name { decls } decls.enclosingClassName = name.name decls 1 → decls 2; decl decls

INF 3110/4110 - 2004

INF 5110 - 2012

3/7/12 2

Oppgave 6.5

Page 3: 10 - 2004 10 - 2012 · 10 - 2004 10 - 2012 3/7/12 27 Grammar Rule Semantic Rule class → class name { decls } decls.enclosingClassName = name.name decls 1 → decls 2; decl decls

INF 3110/4110 - 2004

INF 5110 - 2012

3/7/12 3

Page 4: 10 - 2004 10 - 2012 · 10 - 2004 10 - 2012 3/7/12 27 Grammar Rule Semantic Rule class → class name { decls } decls.enclosingClassName = name.name decls 1 → decls 2; decl decls

INF 3110/4110 - 2004

INF 5110 - 2012

3/7/12 4

Oppgave 6.7

Page 5: 10 - 2004 10 - 2012 · 10 - 2004 10 - 2012 3/7/12 27 Grammar Rule Semantic Rule class → class name { decls } decls.enclosingClassName = name.name decls 1 → decls 2; decl decls

INF 3110/4110 - 2004

INF 5110 - 2012

3/7/12 5

Page 6: 10 - 2004 10 - 2012 · 10 - 2004 10 - 2012 3/7/12 27 Grammar Rule Semantic Rule class → class name { decls } decls.enclosingClassName = name.name decls 1 → decls 2; decl decls

INF 3110/4110 - 2004

INF 5110 - 2012

3/7/12 6

Oppgave 6.13 a 1)

Page 7: 10 - 2004 10 - 2012 · 10 - 2004 10 - 2012 3/7/12 27 Grammar Rule Semantic Rule class → class name { decls } decls.enclosingClassName = name.name decls 1 → decls 2; decl decls

INF 3110/4110 - 2004

INF 5110 - 2012

3/7/12 7

Page 8: 10 - 2004 10 - 2012 · 10 - 2004 10 - 2012 3/7/12 27 Grammar Rule Semantic Rule class → class name { decls } decls.enclosingClassName = name.name decls 1 → decls 2; decl decls

INF 3110/4110 - 2004

INF 5110 - 2012

3/7/12 8

Oppgave 6.13 a 2)

Page 9: 10 - 2004 10 - 2012 · 10 - 2004 10 - 2012 3/7/12 27 Grammar Rule Semantic Rule class → class name { decls } decls.enclosingClassName = name.name decls 1 → decls 2; decl decls

INF 3110/4110 - 2004

INF 5110 - 2012

3/7/12 9

Page 10: 10 - 2004 10 - 2012 · 10 - 2004 10 - 2012 3/7/12 27 Grammar Rule Semantic Rule class → class name { decls } decls.enclosingClassName = name.name decls 1 → decls 2; decl decls

INF 3110/4110 - 2004

INF 5110 - 2012

3/7/12 10

Page 11: 10 - 2004 10 - 2012 · 10 - 2004 10 - 2012 3/7/12 27 Grammar Rule Semantic Rule class → class name { decls } decls.enclosingClassName = name.name decls 1 → decls 2; decl decls

INF 3110/4110 - 2004

INF 5110 - 2012

3/7/12 11

Page 12: 10 - 2004 10 - 2012 · 10 - 2004 10 - 2012 3/7/12 27 Grammar Rule Semantic Rule class → class name { decls } decls.enclosingClassName = name.name decls 1 → decls 2; decl decls

INF 3110/4110 - 2004

INF 5110 - 2012

3/7/12 12

Page 13: 10 - 2004 10 - 2012 · 10 - 2004 10 - 2012 3/7/12 27 Grammar Rule Semantic Rule class → class name { decls } decls.enclosingClassName = name.name decls 1 → decls 2; decl decls

INF 3110/4110 - 2004

INF 5110 - 2012

3/7/12 13

Page 14: 10 - 2004 10 - 2012 · 10 - 2004 10 - 2012 3/7/12 27 Grammar Rule Semantic Rule class → class name { decls } decls.enclosingClassName = name.name decls 1 → decls 2; decl decls

INF 3110/4110 - 2004

INF 5110 - 2012

3/7/12 14

Page 15: 10 - 2004 10 - 2012 · 10 - 2004 10 - 2012 3/7/12 27 Grammar Rule Semantic Rule class → class name { decls } decls.enclosingClassName = name.name decls 1 → decls 2; decl decls

INF 3110/4110 - 2004

INF 5110 - 2012

3/7/12 15

Oppgave 6.13 b)

Page 16: 10 - 2004 10 - 2012 · 10 - 2004 10 - 2012 3/7/12 27 Grammar Rule Semantic Rule class → class name { decls } decls.enclosingClassName = name.name decls 1 → decls 2; decl decls

INF 3110/4110 - 2004

INF 5110 - 2012

3/7/12 16

Page 17: 10 - 2004 10 - 2012 · 10 - 2004 10 - 2012 3/7/12 27 Grammar Rule Semantic Rule class → class name { decls } decls.enclosingClassName = name.name decls 1 → decls 2; decl decls

INF 3110/4110 - 2004

INF 5110 - 2012

3/7/12 17

Page 18: 10 - 2004 10 - 2012 · 10 - 2004 10 - 2012 3/7/12 27 Grammar Rule Semantic Rule class → class name { decls } decls.enclosingClassName = name.name decls 1 → decls 2; decl decls

INF 3110/4110 - 2004

INF 5110 - 2012

3/7/12 18

Page 19: 10 - 2004 10 - 2012 · 10 - 2004 10 - 2012 3/7/12 27 Grammar Rule Semantic Rule class → class name { decls } decls.enclosingClassName = name.name decls 1 → decls 2; decl decls

INF 3110/4110 - 2004

INF 5110 - 2012

3/7/12 19

Page 20: 10 - 2004 10 - 2012 · 10 - 2004 10 - 2012 3/7/12 27 Grammar Rule Semantic Rule class → class name { decls } decls.enclosingClassName = name.name decls 1 → decls 2; decl decls

INF 3110/4110 - 2004

INF 5110 - 2012

3/7/12 20

Page 21: 10 - 2004 10 - 2012 · 10 - 2004 10 - 2012 3/7/12 27 Grammar Rule Semantic Rule class → class name { decls } decls.enclosingClassName = name.name decls 1 → decls 2; decl decls

INF 3110/4110 - 2004

INF 5110 - 2012

3/7/12 21

Page 22: 10 - 2004 10 - 2012 · 10 - 2004 10 - 2012 3/7/12 27 Grammar Rule Semantic Rule class → class name { decls } decls.enclosingClassName = name.name decls 1 → decls 2; decl decls

INF 3110/4110 - 2004

INF 5110 - 2012

3/7/12 22

Oppgave 6.13 c)

Page 23: 10 - 2004 10 - 2012 · 10 - 2004 10 - 2012 3/7/12 27 Grammar Rule Semantic Rule class → class name { decls } decls.enclosingClassName = name.name decls 1 → decls 2; decl decls

INF 3110/4110 - 2004

INF 5110 - 2012

3/7/12 23

Page 24: 10 - 2004 10 - 2012 · 10 - 2004 10 - 2012 3/7/12 27 Grammar Rule Semantic Rule class → class name { decls } decls.enclosingClassName = name.name decls 1 → decls 2; decl decls

INF 3110/4110 - 2004

INF 5110 - 2012

3/7/12 24

Page 25: 10 - 2004 10 - 2012 · 10 - 2004 10 - 2012 3/7/12 27 Grammar Rule Semantic Rule class → class name { decls } decls.enclosingClassName = name.name decls 1 → decls 2; decl decls

INF 3110/4110 - 2004

INF 5110 - 2012

3/7/12 25

Page 26: 10 - 2004 10 - 2012 · 10 - 2004 10 - 2012 3/7/12 27 Grammar Rule Semantic Rule class → class name { decls } decls.enclosingClassName = name.name decls 1 → decls 2; decl decls

INF 3110/4110 - 2004

INF 5110 - 2012

3/7/12 26

Page 27: 10 - 2004 10 - 2012 · 10 - 2004 10 - 2012 3/7/12 27 Grammar Rule Semantic Rule class → class name { decls } decls.enclosingClassName = name.name decls 1 → decls 2; decl decls

INF 3110/4110 - 2004

INF 5110 - 2012

3/7/12 27

Grammar Rule Semantic Rule

class → class name { decls } decls.enclosingClassName = name.name

decls1 → decls2 ; decl decls2.enclosingClassName = decls1.enclosingClassName decl.enclosingClassName = decls1.enclosingClassName

decls → decl decl.enclosingClassName = decls.enclosingClassName

decl → variable-decl

decl → method-decl method-decl.enclosingClassName = decl.enclosingClassName

type → int type.type = int

type → bool type.type = bool

type → void type.type = void

Page 28: 10 - 2004 10 - 2012 · 10 - 2004 10 - 2012 3/7/12 27 Grammar Rule Semantic Rule class → class name { decls } decls.enclosingClassName = name.name decls 1 → decls 2; decl decls

INF 3110/4110 - 2004

INF 5110 - 2012

3/7/12 28

Grammar Rule Semantic Rule

method-decl → type name ( params ) body

method-decl.OKconstructor = if (name.name = method-decl.enclosingClassName) then if (not(type.type = void))then error(“constructor not of type void”) else ok

Eller

method-decl.OKconstructor = if (name.name = method-decl.enclosingClassName) and (not(type.type = void))then error(“constructor not of type void”) else ok

Page 29: 10 - 2004 10 - 2012 · 10 - 2004 10 - 2012 3/7/12 27 Grammar Rule Semantic Rule class → class name { decls } decls.enclosingClassName = name.name decls 1 → decls 2; decl decls

INF 3110/4110 - 2004

INF 5110 - 2012

2007 – 2b

3/7/12 29

Page 30: 10 - 2004 10 - 2012 · 10 - 2004 10 - 2012 3/7/12 27 Grammar Rule Semantic Rule class → class name { decls } decls.enclosingClassName = name.name decls 1 → decls 2; decl decls

INF 3110/4110 - 2004

INF 5110 - 2012

3/7/12 30

Page 31: 10 - 2004 10 - 2012 · 10 - 2004 10 - 2012 3/7/12 27 Grammar Rule Semantic Rule class → class name { decls } decls.enclosingClassName = name.name decls 1 → decls 2; decl decls

INF 3110/4110 - 2004

INF 5110 - 2012

3/7/12 31

Grammar Rule Semantic Rule

function-decl → type id ( ) body

function-decl.has_parameter = no

function-decl → type id ( parameter ) body

function-decl.has_parameter = yes function-decl.param-kind = parameter.kind function-decl.param-type = parameter.type

parameter → type id parameter.kind = var parameter.type = type.type

parameter → type func id parameter.kind = func parameter.type = type.type

type → int type.type = integer

type → bool type.type = boolean

type → void type.type = void

Page 32: 10 - 2004 10 - 2012 · 10 - 2004 10 - 2012 3/7/12 27 Grammar Rule Semantic Rule class → class name { decls } decls.enclosingClassName = name.name decls 1 → decls 2; decl decls

INF 3110/4110 - 2004

INF 5110 - 2012

3/7/12 32

Grammar Rule Semantic Rule

call → id () call.ok = (lookup(id.name).has_parameter=no)

call → id1(id2) call.ok = (lookup(id1.name).has_parameter=yes) and (lookup(id2.name).kind= (lookup(id1.name).param-kind) and (lookup(id2.name).type= (lookup(id1.name).param-type) and (if lookup(id2.name).kind=func then (lookup(id2.name).has_parameter=no) else true)

Page 33: 10 - 2004 10 - 2012 · 10 - 2004 10 - 2012 3/7/12 27 Grammar Rule Semantic Rule class → class name { decls } decls.enclosingClassName = name.name decls 1 → decls 2; decl decls

INF 3110/4110 - 2004

INF 5110 - 2012

3/7/12 33

Page 34: 10 - 2004 10 - 2012 · 10 - 2004 10 - 2012 3/7/12 27 Grammar Rule Semantic Rule class → class name { decls } decls.enclosingClassName = name.name decls 1 → decls 2; decl decls

INF 3110/4110 - 2004

INF 5110 - 2012

3/7/12 34

Grammar Rule Semantic Rule

func → type func id signature stmt-list

stmt-list.type = type.type

type → int type.type = Integer

type → bool type.type = Boolean

stmt-list1 → stmt-list2 stmt stmt-list2.type = stmt-list1.type stmt.type = stmt-list1.type

stmt-list → stmt stmt.type = stmt-list.type

stmt → return-stmt return-stmt.type = stmt.type

return-stmt → return exp return-stmt.ok = (return-stmt.type = exp.type)

Page 35: 10 - 2004 10 - 2012 · 10 - 2004 10 - 2012 3/7/12 27 Grammar Rule Semantic Rule class → class name { decls } decls.enclosingClassName = name.name decls 1 → decls 2; decl decls

INF 3110/4110 - 2004

INF 5110 - 2012

3/7/12 35

Grammar Rule Semantic Rule

exp → id exp.type = lookup(id.name)

exp → id1 + id2 exp.type = if lookup(id1.name)= Integer and lookup(id2.name)= Integer then Integer else ErrorType

exp → true exp.type = Boolean

exp → false exp.type = Boolean