62
1 Lecture 9: Grammars and SDT Context-free grammars, disambiguation, syntax-directed translation Ras Bodik Alvin Cheung Maaz Ahmad Talia Ringer Ben Tebbs Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction

Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

1

Lecture 9: Grammars and SDTContext-free grammars, disambiguation, syntax-directed translation

Ras Bodik Alvin CheungMaaz Ahmad

Talia RingerBen Tebbs

Hack Your Language!CSE401 Winter 2016Introduction to Compiler Construction

Page 2: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

Announcements

Project proposal due this Wed

HW3 out today– due this Sunday

PA3 out in two days– be due in roughly 3 weeks

2

Page 3: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

Announcements

Midterm exam in class on 2/10– Covers everything including this week and HW3– Closed book– One letter-size sheet of handwritten notes (one sided)– Previous exams on website– Review session: Sunday 6-7pm EEB 115

3

Page 4: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

Next two lectures will expand on the parser

parserPL desugarASTL AST-based interpreterASTT

parsingprogram text Syntax-directed translationparse tree AST

grammar

Page 5: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

Today

Parse treeThe result of parsing a string with a grammar

Ambiguitieshandling grammars with ambiguous rules

Computations on parse trees Compilation, Interpretation, Type Checking, Doc Layout

Attribute grammargrammar where parse tree nodes have attributes

Syntax-directed evaluationEvaluation of the attributes of a parse tree

[Multi-pass attribute grammars (for layout)]5

Page 6: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

Grammars and parse treesHW3.1a

Page 7: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

A grammar has four components

Example grammar:

E à n | E + E | E * E | ( E )

• Nonterminals: • Start nonterminal: • Terminals: • Productions (rules):

Page 8: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

8

A grammar has four components

Example grammar:

E à n | E + E | E * E | ( E )

• Nonterminals: • Start nonterminal: • Terminals: • Productions (rules):

E

En, +, *, (, )

E à n, E à E + E, E à E * E, Eà(E)

Page 9: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

Parse tree

Produced given a grammar and an input stringsometimes the parse tree is not built explicitly

represents the structure present in flat input strings

composed from productions used to derive the string

9

Page 10: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

10

Parse tree example

Parser input: n(4), *, (, n(2), +, n(3), )

Parse tree:

E à n | E + E | E * E | ( E )

F leaves are tokens (terminals), internal nodes are non-terminals

n(4) * ( n(2) + n(3) )

E

E

E

E E

Page 11: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

12

Another example of parse tree

Source string: if (x == y) { a=1; }Tokenized: IF, LPAR, ID, EQ, ID, RPAR, LBR, ID, AS, INT, SEMI, RBR

Parse tree:

IF LPAR ID EQ ID RPAR LBR ID AS INT SEMI RBR

EXPR EXPR

STMT

BLOCK

STMT

Page 12: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

Ambiguous GrammarsHW3.1b

Page 13: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

Ambiguity

The shape of parse tree depends on the grammar

The grammar is designed so that the parse tree reflects desired operator precedence and associativity

The arithmetic grammar we’ve seen permits multiple parse trees, so this grammar does NOT capture precedence, associativity

Example of multiple parse trees on next slide

15

Page 14: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

Example of ambiguous grammar

16

E à E + E | n

Given input: 1 + 2 + 3:

E

E

1

E

EE +

2 3

+

E

E

3

E

EE +

1 2

+

+ is left associative

Page 15: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

What is an ambiguous grammar?

Ambiguous grammar:

When a (any) string produces more than one parse tree

Why is this bad?

The meaning of the input is not defined

17

Page 16: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

Disambiguation via Grammar RewritingHW3.1c

Page 17: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

Rewriting

Rewrite the grammar into a unambiguous grammarnew grammar defines the same language (set of legal

strings) but eliminates undesirable parse trees

Example: Rewrite E → E + E | E * E | ( E ) | n

into E → E + T | TT → T * n | n | ( E )

Draw a few parse trees and you will see that new grammar– enforces precedence of * over +– enforces left-associativity of + and *

19

Page 18: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

20

Parse tree with the new grammar

The int * int + int has ony one parse tree now

note that new nonterminals have been introduced

E

E

E E

E*

n +

nn

E

T

T n

T+

n

*

E

n

Page 19: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

Usually, this grammar is written with E, T, F

21

E

T

FT

FE

T

F

E

T

F

*)

+

(

2

4

5

E à E + T | TT à T * F | FF à ( E ) | n

Page 20: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

Exercise

E à E + T | TT à T * F | FF à ( E ) | n

Convince yourself that you cannot parse 2+3*4to give + higher precedence than *

22

Page 21: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

Some terminology

Language: set of stringsL(G) – strings generated by grammar GL(N) – strings generated by non-terminal N

Left-recursive grammar: includes rule X à X …generates left-associative expressions

Right-recursive grammar: includes rule X à … Xgenerates right-associative expressions

24

Page 22: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

The Abstract Syntax Tree

a compact representation of the parse tree

Page 23: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

26

AST is a compression of the parse tree

*

NUM(4) +

NUM(2) NUM(3)

n(4) * ( n(2) + n(3) )

E

E

E

E E

E

Page 24: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

27

Another exampleIF-THEN

==

ID ID

=

ID INT

IF LPAR ID EQ ID RPAR LBR ID AS INT SEMI RBR

EXPR EXPR

STMT

BLOCK

STMT

Page 25: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

How to construct an AST?

By evaluating the parse tree! Key steps:

1. Extend nodes with attributesSuch as val attribute for expression nodes

2. Specify how attributes are computed from other attrsThese are assignments of the form E1.val = E2.val + E3.val

3. Determine the evaluation order How will these computations happen? Bottom up, top down, or inorder?(Most often, it’s bottom-up.)

Grammars with attributes are attribute grammars 28

Page 26: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

Attribute Grammars

Page 27: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

What are attribute grammars?

• Grammars with attributes (duh!)

• Grammars with attributes stored at each node– With attribute values computed from other nodes

30

Page 28: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

Two types of attributes

Synthesized: computed from children

Inherited: computed from parent (and siblings)

31

Page 29: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

Attribute grammars

Applications of attribute grammars

– evaluate the input program P (interpret P)– type check the program (look for errors before eval)– construct AST of P (abstract the parse tree)

– generate code (which when executed, will evaluate P)– compile (regular expressions to automata)

– document layout (compute positions, sizes of letters)– programming tools (syntax highlighting)

32

Page 30: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

33

An example attribute grammar (AG)

Idea: evaluate expressions by storing their values as attributesEach node now comes with a “val” attribute

We now need to define rules for computing this attributeE1 ::= E2 +TE1.val = E2.val + T.valE::=T E.val = T.valT1 ::=T2 *F T1.val = T2.val * F.valT ::= F T.val = F.valF ::= n F.val = n.valF ::= (E) F.val = E.val

Is val an inherited or synthesized attribute?

Page 31: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

34

An example attribute grammar (AG)

E1 ::= E2 +TE1.val = E2.val + T.valE::=T E.val = T.valT1 ::=T2 *F T1.val = T2.val * F.valT ::= F T.val = F.valF ::= n F.val = n.valF ::= (E) F.val = E.val

E à E + T| T

T à T * F| F

F → n | ( E )

AG = grammar + “semantic rules”rules show how to evaluate parse tree

Page 32: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

35

Same AG in 401 parser notation

AG for evaluating an expression%%E -> E '+' T %{ return n1.val + n3.val }%

| T %{ return n1.val }% ;

T -> T '*' F %{ return n1.val * n3.val }% | F %{ return n1.val }%;

F -> /[0-9]+/ %{ return int(n1.val) }%| '(' E ')' %{ return n2.val }%;

Compare this with our interpreter

Page 33: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

36

Another AG: Compute type of expression + typecheck

E -> E + E if ((E2.val == INT) and (E3.val == INT))then E1.val = INT else E1.val = ERROR

E -> E and E if ((E2.val == BOOL) and (E3.val == BOOL)) then E1.val = BOOL

else E1.val = ERROR E -> E == E if ((E2.val == E3.val) and

(E2.val != ERROR)) then E1.val = BOOL else E1.val = ERROR

E -> true E.val = BOOL E -> false E.val = BOOL E -> n E.val = INT E -> ( E ) E1.val = E2.val

Page 34: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

Type check example

37

E

5 2

E==

7+

E

E EINT

E -> n E.val = INT

INT

E -> E + Eif ((E2.val == INT) and (E3.val == INT))then E1.val = INT else E1.val = ERROR

INT

E -> E == Eif ((E2.val == E3.val) and (E2.val != ERROR)) then E1.val = BOOL else E1.val = ERROR

INT

BOOL

Page 35: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

Type check example

38

E

5 2

E==

true+

E

E EINT INT

INT

E -> E == Eif ((E2.val == E3.val) and (E2.val != ERROR)) then E1.val = BOOL else E1.val = ERROR

BOOL

E -> true E.val = BOOL

ERROR

Page 36: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

Another AG needing top-down pass

For each leaf node in parse tree, compute distance from the root:

S à NN1 à leaf

| N2 N3

Let’s add a dist attribute

39

N

leaf leaf

N

leaf

N

N N

S

Page 37: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

Another AG needing top-down pass

For each leaf node in parse tree, compute distance from the root:

S à NN1 à leaf

| N2 N3

What kind of attribute is dist?40

N

leaf leaf

N

leaf

N

N N

S

N.dist = 0leaf.dist = N1.dist + 1N2.dist = N1.dist + 1N3.dist = N1.dist + 1

Page 38: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

Syntax-directed translationevaluate parse tree (to produce a value, AST, …)

41

Page 39: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

Syntax-directed translation (SDT)

• Process of converting source language into target driven by actions associated with each rule

• We have seen various examples earlier with attribute grammars

• We have also seen this earlier with our bytecodecompiler (PA2)

42

Page 40: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

43

When is syntax directed translation performed?

Option 1: parse tree built explicitly during parsing– after parsing, parse tree is traversed, rules are evaluated– simpler, less efficient, but simpler; used in the 401 parser– Necessary when the tree must be traversed multiple times

Option 2: parse tree never built– rules evaluated during parsing on a conceptual parse tree– more common in practice– we’ll see this strategy in HW3 (on recursive descent parser)

Page 41: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

Let’s construct an AST from parse tree

• We will use SDT for this purpose

• We will build the AST bottom up

• Each node will have a val attribute that stores the AST we have constructed for its descendants

• Steps:– Define the grammar– Define actions– Associate actions with production rules 44

Page 42: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

45

An AG for AST building

F à int F.val = new IntLitNode(int.value)

F à ( E ) F.val = E.val

T1 à T2 * F T1.val = new TimesNode(T2.val, F.val)

T à F T.val = F.val

E1 à E2 + T E1.val = new PlusNode(E2.val, T.val)

E à T E.val = T.val

Page 43: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

46

Example: build AST for 2 * (4 + 5)

E

T

FT

F

T

F

E

T

F

*

)

+

(n (2)

n (5)

n (4)

F à int

F.val = new IntLitNode(int.value)

4

E

Page 44: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

47

Example: build AST for 2 * (4 + 5)

E

T

FT

F

T

F

E

T

F

*

)

+

(n (2)

n (5)

n (4)

T à F T.val = F.val

4

E

Page 45: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

48

Example: build AST for 2 * (4 + 5)

E

T

FT

F

T

F

E

T

F

*

)

+

(n (2)

n (5)

n (4)

E à T E.val = T.val

4

E

Page 46: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

49

Example: build AST for 2 * (4 + 5)

E

T

FT

F

T

F

E

T

F

*

)

+

(n (2)

n (5)

n (4)

T à F T.val = F.val

5

E

Page 47: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

50

Example: build AST for 2 * (4 + 5)

E

T

FT

F

T

F

E

T

F

*

)

+

(n (2)

n (5)

n (4)

E1 à E2 + T E1.val = new PlusNode(E2.val, T.val)

4 5

E

+

Page 48: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

51

Example: build AST for 2 * (4 + 5)

E

T

FT

F

T

F

E

T

F

*

)

+

(n (2)

n (5)

n (4)

F à ( E )

F.val = E.val

4 5

E

+

Page 49: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

52

Example: build AST for 2 * (4 + 5)

E

T

FT

F

T

F

E

T

F

*

)

+

(n (2)

n (5)

n (4)

T à F T.val = F.val

E

2

Page 50: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

53

Example: build AST for 2 * (4 + 5)

E

T

FT

F

T

F

E

T

F

*

)

+

(n (2)

n (5)

n (4)

T1 à T2 * F T1.val = new TimesNode(T2.val, F.val)

4 5

E

+2

*

Page 51: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

54

Example: build AST for 2 * (4 + 5)

E

T

FT

F

T

F

E

T

F

*

)

+

(n (2)

n (5)

n (4)

E à T E.val = T.val

4 5

E

+2

*

Page 52: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

“Multi-pass” Attribute Grammars

55

Page 53: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

More than one traversal

When is a bottom-up pass insufficient to eval all attrs?

When an attr depends on an parent node attribute:top-down pass is needed

… or when it depends on a left sibling node attribute:in-order pass is needed

Pass = tree traversalbottom up (postorder), top-down (preorder), inorder

56

Page 54: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

Summary

• Four elements of a grammar

• Parse trees from input source code

• Handling ambiguities by grammar rewriting

• Attribute grammars

• Constructing ASTs using Syntax-Driven Translation

57

Page 55: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

Multi-pass AG for simple math layout

Want to write

x sub i sub j

and obtain

𝑥"#

58

Page 56: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

Multi-pass AG for Box layout

Want to write

( x sub i ) sub j

and obtain

𝑥"$

59

Page 57: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

The grammar

B à B1 B2 | B1 sub B2 | ( B1 ) | text

60

Page 58: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

Attributes

What attributes do we need?

61

Page 59: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

The AG

S à B

B à B1 B2

B à B1 sub B2

B à ( B1 )

B à text 62

Page 60: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

The AG

63

Page 61: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

The passes

Example x sub i sub j

64

Page 62: Hack Your Language!...Hack Your Language! CSE401 Winter 2016 Introduction to Compiler Construction. Announcements Project proposal due this Wed ... – Review session: Sunday 6-7pm

Evaluation of x sub i sub j

65