Tiny Compiler: Back End

Size: px
Start display at page:

Download "Tiny Compiler: Back End"

Transcription

1 CS 301 Spring 2016 January 29 Lab Tiny Compiler: Back End Plan Source Program Lexical Analysis Syntax Analysis Semantic Analysis Intermediate Code Generation Machine- Independent Optimization Code Generation Target Program After wrapping up loose ends in the front end of our Tiny compiler, we turn to the back end. Here we make three main steps. Our front end already parses and produces an AST. We first build a translation to from AST to intermediate representation: instructions for an abstract machine with infinitely many named storage locations. Next, we take a quick look at a code generator I have written to translate this intermediate representation to x86 assembly code. Finally, backing up to the intermediate representation again, we add some basic machine-independent optimizations. Directions: Work through this activity in groups of 2-3. Choose different partners than the ones you had on Tuesday. As you work, check in with me when you have questions. I will not collect anything from you, but do write your thoughts down for reference. Naturally, you will want to write down the programming parts too. I do not expect to finish today, but hopefully we will be able to run some compiled code. There is no requirement to continue work on this. Feel free to continue exploring if you are curious, but please prioritize your preparation for the first tutorial meeting. We will take a couple minutes in meetings or lab next week to hit the highlights. Refer to Scala documentation on the tools page as needed: Setup With Mercurial, run: hg commit; hg pull && hg merge && hg commit This will commit your working version, pull my updates, merge them into your code, and commit the result. I have provided a separate project (tiny2) that contains front end code for this part. If you want to keep yours, get the new code and then copy over all the files except Parse.scala. Semantic Analysis We do only minor semantic analysis in our Tiny compiler. Typically that stage involves tasks like typechecking (we have only one type) and checking for proper use of variables. We will check to ensure variables are defined before they are used, but we will do so during the translation from ASTs to intermediate code, since it is so straightforward for Tiny. 1

2 Intermediate Representation The next step is to translate our Tiny AST to intermediate code for a simple abstract machine that is closer to the model of a real computer exposed by assembly language, our eventual target. Unlike ASTs, intermediate code programs have flat, sequential structure. Our abstract machine has infinitely many storage cells, each with a unique name: x 1, x 2, etc. The abstract machine supports a small set of instructions that read operands, perform simple computations on them, and store the result in a destination cell. Instruction operands, o, are either the name of a storage cell (thereby referring to the cell s contents) or a literal number value. A program is a linear sequence of instructions to be executed in order. The abstract machine supports the following instructions: x := o A copy instruction reads the source operand, o, and writes it in the destination cell, x. x := o 1 + o 2 An add instruction reads the two source operands, o 1 and o 2, and stores their sum in the destination cell, x. x := input An input instruction reads an integer input from the user and stores it in the destination cell, x. print o A print instruction reads the source operand and prints it as output. This style of abstract machine language is called three-address code (TAC), since each instruction addresses at most three operands. Exercise 1. What does the following TAC program print if the user provides input 7? x 1 := 3 x 3 := x 1 + x 2 x 4 := x 3 + x 3 print x 4 x 5 := x x 6 := x 5 + x 2 print x 6 Tangent. Look at that TAC again. It looks quite similar to a Tiny source program with mildly different syntax. In fact, putting aside superficial syntax differences, it appears that our TAC language is basically the Tiny language with expression nesting restricted to one level. Nonetheless, we use an explicitly separate TAC representation in our Tiny compiler (and in our later compiler, when there will be wider differences in the languages). Exercise 2. Write a TAC program to print 4i 1 + 2i 2 + 5, given any inputs i 1 and i 2, in that order. As with the original Tiny source syntax, this syntax is just a convenient way to write down a concrete representation of an abstract program structure. Unlike the original Tiny syntax, we will never use this TAC syntax within our compiler. It is just a convenience for pencil and paper. Exercise 3. Read the IR.scala file. Rewrite your answer from Exercise 2 as a Scala expression of type Seq[TacInstruction]. Use a Vector, which is also a Seq, and acts similarly to an array while also supporting insert, prepend, and append operations. A Vector[Int] holding the numbers 1, 2, 3 in order is constructed using the Scala syntax Vector(1,2,3). 2

3 Translating ASTs to TAC Next, we translate a Tiny program AST to an equivalent TAC program. These are rather different structures. The program AST is a hierarchical, non-linear tree. The TAC program is a flat, linear sequence of instructions. ASTs have nested expression nodes. TAC instructions accept only storage cells or literals as operands. We must be sure that our translation is semantics-preserving. That is, the observable behavior (input and output for us) of the translated program must be identical to that of the source program. Like the recursive descent parser used to build the AST from a linear source code string, we will use a recursive algorithm to traverse the AST and emit a new linear structure. The key is to traverse through the AST with a recursive algorithm, emitting one or more TAC instructions for each node. The result of each expression (i.e., each node) will be stored in its own TAC storage cell. To translate an expression node that needs this result, we simply emit an instruction that will read the contents of the cell where the result is to be stored. Let us derive the algorithm for this translation. For now, omit variables and assignments. Exercise 4. Draw the AST for the Tiny program print ( 7 + ( input + 5 ) ) ;. Its TAC translation is shown below. Match each node in the original AST to the corresponding instruction in the translated TAC. What tree traversal order (one of in, pre, post, level) could produce these instructions in this order? Try to reverse-engineer the algorithm that would generate this code given the AST you extracted. (Use pseudocode on paper or whiteboard. Stick to high-level description. Ignore Scala for now.) The algorithm is described below if you get stuck. (Feel free to go straight to that if short on time.) x 1 := 7 x 3 := 5 x 4 := x 2 + x 3 x 5 := x 1 + x 4 print x 5 Tangent. It is tempting to translate an AST for an expression ( ) to a single TAC instruction, x 2 := 3 + 5, or even simpler, x 2 := 8. Resist the urge. Stay away from special cases; they will complicate our translation algorithm. (Spoiler alert: our optimizer will fix this for us later. Let s keep the concerns of translation and optimization separate.) Exercise 5. Try your proposed AST-to-TAC translation algorithm on the program: print ( ( ) + ( ) ) ; Check your answer by running your TAC program manually. TAC Generation. The algorithm for generating TAC from an AST is explained generally here. The commented Scala implementation in IRGen.scala makes this more concrete. We provide part as an example; you implement the rest. For expressions, follow this basic plan: Store the result (if any) of each AST node in a unique TAC cell. (Even an integer literal should be copied into a TAC cell!) Generate code by a post-order traversal of the AST: Emit code for all subexpression children of this node, remembering the destination cell of the last instruction emitted by translating each child node. Emit an instruction for this node, using the child destination cells as the corresponding source operands of the instruction. For statements, emit instructions to compute the expression (using the plan above) and use the last destination cell in the resulting instructions as the source operand for an instruction to implement the statement. 3

4 For programs, simply emit instructions for each statement in order. All three of these get slightly more involved when we introduce variables later. Exercise 6. In IRGen.scala, read the Scala code for translateprogram and the Print case in translatestmt. Ignore the symtab argument and the Assign case for now. Ask questions about anything that does not make sense. The following Scala operations are used (and possibly unfamiliar): Pattern-matching: match with some cases. Quiz your CS 251 teammates about this, check the relevant section in the Scala for Java Programmers tutorial linked on the web page, or ask me. Sequence (Seq) operations. We use immutable Vectors as sequences, applying the following operations: a ++ b produces a new sequence with the elements of a followed by the elements b. seq :+ elem produces a new sequence with the elements of seq followed by elem. seq.last returns the last element of non-empty sequence seq. fresh(), which is provided, returns a new TacCell with a fresh, unique ID every time it is called. Exercise 7. In IRGen.scala, implement translateexpr. The entire body is a single pattern-matching expression with one case for each type of Expr. Each case should return a Seq[TacInstruction]: a sequence of TAC instructions. We provide the Input case. Add the Num case, then test it on a simple program. Repeat for Add. Ignore Vars for now. When you need to call translateexpr, pass the existing symtab argument along. (We use it later for variables.) Variables and Symbol Tables. The last AST-to-TAC translation concern is variables. A natural representation of Tiny variables exists: represent each unique Tiny variable by a unique TAC cell. An assignment statement is translated to a copy instruction that copies the source into the variable s corresponding cell. Later variable references are translated to instructions that copy from the same cell. This requires a durable mapping from variable name to TAC cell, since variable references may appear arbitrarily later in the program. For this, we use a symbol table. (A symbol table has more jobs in a compiler for a larger language.) Translating an assignment statement requires the usual translation of the source expression and an instruction copying the expression result to the assigned variable s TAC cell. If the variable is already mapped in the symbol table, reuse its mapped TAC cell. 1 Otherwise, create a fresh TAC cell, map it in the symbol table, and use the fresh cell. Exercise 8. Draw the AST for the following Tiny program (or use the front end to generate it), then translate the AST to TAC by hand. Build a symbol table as you go to track which variable maps to which TAC cell. Double check your translated code: run it by hand and check the output. x = ( 4 + input ) ; y = input ; print ( x + ( y ) ) ; Exercise 9. Implement translation of assignment statements (the Assign case in translatestmt) and variable reference expressions (the Var case in translateexpr). Test on a few programs. Our Scala code represents the symbol table with a mutable 2 Map[String,TacCell]: a map where keys are source-code variable names (as String) and values are the TAC cells that represent them (as TacCell). This symbol table is shared by all levels of the translation algorithm since Tiny has no scoping or control-flow constructs. Entries for key k in map symtab are accessed with symtab(k) and updated with symtab(k) = v. symtab.contains(k) checks if symtab contains an entry for key k. Exercise 10. If you did not happen to do this in Exercise??, add checks to ensure all variable references occur after definitions of their variables. This is simple: if the variable is not in the symbol table when trying to translate a reference to it, it has not been defined yet. This adds a line or two to translateexpr. 1 CS 251 note: This implements a mutable variable semantics for Tiny. Nonetheless, since Tiny lacks any scoping or controlflow, mutable variables will act identically to immutable bindings with shadowing. In other words, we could just as well map a variable to a fresh cell at every assignment with no discernible difference. This implementation ambivalence is not present in more interesting languages. 2 Immutable would be fine if we also passed its state along in the return values. 4

5 x86 Code Generation The last stage in a compiler is called Code Generation: it translates the intermediate code to code in the target language. For our Tiny-to-x86 compiler, that s x86 assembly language. There are actually many interesting machine-specific optimizations to do at this stage, such as mapping TAC cells to registers in a way the minimizes copying and use of the stack, choosing which variables could be mapped to registers vs. stack locations, selecting the best set of instructions, and more. For the sake of building the Tiny compiler quickly, our code generator is straightforward and applies no optimization at all. It does two basic tasks: 1. Map TAC cells to stack locations in memory, which it does in truly dull fashion by using the TAC cell s ID to assign an offset into the stack frame. 2. Translate each TAC instruction to one or more x86 instructions following a simple template. Feel free to read through this later. After generating x86 assembly code, we run the assembler and linker to build an executable. Exercise 11. (The Link stage will not work on Windows.) Uncomment the CodeGen and Link stages in Compiler.scala. Run your Tiny compiler on a program of your choosing. It should produce an executable file a.out. And, for the moment of truth: run the command./a.out Did it work??? Debug until it does, then celebrate accordingly! Optimization Congrats! You have a compiler that reads Tiny source code and produces an x86 executable! Let s make it even better. We will not improve the simplistic code generator (feel free to think about that on your own), but we will do some machine-independent optimization on the intermediate representation. Just as with the AST-to-TAC translation and the code generation stage, optimizations must be semantics-preserving. Exercise 12. Consider briefly (no more than a minute or two): what are some benefits of doing optimization on intermediate code instead of on source code or machine code? Design. Later in the course, we spend signficant time developing a general framework for expressing optimizations. For now, we implement a few standard optimizations with ad hoc techniques (though later in the course you will be able to look back and see the unifying thread). Just as with AST-to-TAC translation, a key rule for our optimizations is to keep them general. It is tempting to see TAC like: x 1 := 4 x 2 := 5 x 3 := x 1 + x 2 print x 3 and try to build an optimizer that automatically recognizes this pattern all at once and produces the equivalent program print 9. A pattern-based approach is actually useful in efficient machine-code generation, but at this stage, we want to avoid a large, unruly, error-prone collection of special cases. An optimization is just a function that takes a TAC program as input and returns another (equivalent) TAC program as output. This means that we can make a larger optimization by composing two smaller optimization. We therefore develop a small suite of minimal, independent optimizations that do little on their own, but have big impact when composed. Copy Propagation. You have likely been irritated at all of the wasteful copy instructions our AST-to- TAC translation emitted. They are everywhere! The copy propagation optimization will help eliminate them. Here is the basic idea: if a TAC instruction i has a storage cell as a source operand and this cell was last updated by a copy instruction, it is equivalent for i to use the source operand of that copy instruction instead. For example, we may safely replace this code: 5

6 x 1 := 300 x 3 := x 2 x 4 := x 1 + x 3 print x 4 with this code: x 1 := 300 x 3 := x 2 x 4 := x 2 print x 4 via two copy propagations in x 4 := x 1 + x 3 : 1. Replace the source operand x 1 by 300, since x 1 was last updated by copying Replace the source operand x 3 by x 2, since x 3 was last updated by copying the contents of x 2. Copy propagation stops here: we cannot predict the input that will be stored into x 2 when the program is run, so we cannot propagate it as an input to the add instruction. The print instruction uses x 4, but it was produced by an add instruction, not a copy instruction. Exercise 13. Read the code for copypropagate in Opt.scala and try to understand how it performs copy propagation algorithmically. Dead Code Elimination. Dead code is code that does nothing useful: code that computes a result that never affects any observable behavior of the program. (In Tiny, that means it does not affect input/print.) For example, the second line of this Tiny program is dead code: x = input ; y = ( x + 4 ) ; print ( x + x ) ; A result is computed and stored in y, but y never affects any printed output. We could remove the second line without changing the observable behavior of the program. This is the purpose of the dead code elimination optimization. Feel free to take a look at the implementation in Opt.scala. Is it useful? Our AST-to-TAC translation never introduces dead code. Tiny programmers may write dead code, but even if they do not, this optimization is still useful because of copy propagation. Looking back at the copy propagation example, note that the unoptimized code contained no dead code, but the optimized code offers dead code elimination a moment to shine: a dead copy instruction x 3 := x 2. Constant Folding. Our last classic optimization is constant folding. If a computation instruction (e.g., add) has literals (constants) for all source operands, pre-compute the result at compile time and replace the instruction with a simple copy instruction, where the source is the literal pre-computed answer. In our case, this means replace instructions like x 1 := with x 1 := 301. Exercise 14. Implement constantfold in Opt.scala. Use the map method of sequences to produce a new sequence of TAC instructions where instructions meeting the constant-folding criteria are replaced and the rest stay as is. Consult examples in copypropagate or deadcodeelim, your CS 251 teammates, or Ben for help with map. Scala s anonymous function syntax is (param => body). constantfold is much smaller than the other two optimization. My implementation is 4-5 sparse lines. Composing Optimizations. Interestingly, our AST-to-TAC translation never produces instructions that can be constant-folded! But just as with dead code elimination, constant folding becomes useful when copy propagation is used. 6

7 Exercise 15. Apply copy propagation to this code. Then apply dead code elimination to the result. Then apply constant folding to that result. What do you get? Can you reapply optimizations to make the program even smaller? x 1 := 7 x 2 := 8 x 3 := x 1 + x 2 print x 3 It turns out that these three optimizations can feed off each other if composed repeatedly. To get the best result, we run them until a fixed point, a TAC program for which a pass through all three optimizations produces the exact same program. At this point, there is nothing more for them to do. Exercise 16. In the apply method in Opt.scala, replace once with fixpoint. Run the compiler on a couple Tiny programs to see how much the fixpoint improves optimization. Reflections At this point we have an optimizing compiler for Tiny. It could use smarter code generation and a few other improvements, but we have managed to consider interesting problems and solutions at just about every stage in a typical compiler architecture. Compilers for larger languages will complicate these problems significantly, so as we move on to start our deeper consideration of each compiler stage over the course of the semester, keep the following in mind: The combined jobs of a compiler are complicated overall if we consider a compiler as a black box. A key to a clean, approachable implementation is to decompose large complicated problems into smaller simpler problems, solve those individual problems in a simple, elegant way, and then compose the solutions. This is true at a small scale, in the way we design recursive case-by-case translations or many simple individual optimizations. It is just as true at a large scale, where we break the compiler down into several independent stages. I hope you enjoyed this exercise and find it useful to gain an initial perspective for the rest of the semester. If you have any thoughts on how helpful it was or how to improve it, please let me know. Happy compiling! 7

CSE413: Programming Languages and Implementation Racket structs Implementing languages with interpreters Implementing closures

CSE413: Programming Languages and Implementation Racket structs Implementing languages with interpreters Implementing closures CSE413: Programming Languages and Implementation Racket structs Implementing languages with interpreters Implementing closures Dan Grossman Fall 2014 Hi! I m not Hal J I love this stuff and have taught

More information

PRINCIPLES OF COMPILER DESIGN UNIT I INTRODUCTION TO COMPILERS

PRINCIPLES OF COMPILER DESIGN UNIT I INTRODUCTION TO COMPILERS Objective PRINCIPLES OF COMPILER DESIGN UNIT I INTRODUCTION TO COMPILERS Explain what is meant by compiler. Explain how the compiler works. Describe various analysis of the source program. Describe the

More information

Intermediate Code, Object Representation, Type-Based Optimization

Intermediate Code, Object Representation, Type-Based Optimization CS 301 Spring 2016 Meetings March 14 Intermediate Code, Object Representation, Type-Based Optimization Plan Source Program Lexical Syntax Semantic Intermediate Code Generation Machine- Independent Optimization

More information

A Simple Syntax-Directed Translator

A Simple Syntax-Directed Translator Chapter 2 A Simple Syntax-Directed Translator 1-1 Introduction The analysis phase of a compiler breaks up a source program into constituent pieces and produces an internal representation for it, called

More information

CSE 413 Languages & Implementation. Hal Perkins Winter 2019 Structs, Implementing Languages (credits: Dan Grossman, CSE 341)

CSE 413 Languages & Implementation. Hal Perkins Winter 2019 Structs, Implementing Languages (credits: Dan Grossman, CSE 341) CSE 413 Languages & Implementation Hal Perkins Winter 2019 Structs, Implementing Languages (credits: Dan Grossman, CSE 341) 1 Goals Representing programs as data Racket structs as a better way to represent

More information

COMPILER CONSTRUCTION Seminar 02 TDDB44

COMPILER CONSTRUCTION Seminar 02 TDDB44 COMPILER CONSTRUCTION Seminar 02 TDDB44 Martin Sjölund (martin.sjolund@liu.se) Adrian Horga (adrian.horga@liu.se) Department of Computer and Information Science Linköping University LABS Lab 3 LR parsing

More information

COMPILER CONSTRUCTION LAB 2 THE SYMBOL TABLE. Tutorial 2 LABS. PHASES OF A COMPILER Source Program. Lab 2 Symbol table

COMPILER CONSTRUCTION LAB 2 THE SYMBOL TABLE. Tutorial 2 LABS. PHASES OF A COMPILER Source Program. Lab 2 Symbol table COMPILER CONSTRUCTION Lab 2 Symbol table LABS Lab 3 LR parsing and abstract syntax tree construction using ''bison' Lab 4 Semantic analysis (type checking) PHASES OF A COMPILER Source Program Lab 2 Symtab

More information

Project 5 - The Meta-Circular Evaluator

Project 5 - The Meta-Circular Evaluator MASSACHVSETTS INSTITVTE OF TECHNOLOGY Department of Electrical Engineering and Computer Science 6.001 Structure and Interpretation of Computer Programs Fall Semester, 2005 Project 5 - The Meta-Circular

More information

Lecture 8 CS 412/413 Spring '00 -- Andrew Myers 2. Lecture 8 CS 412/413 Spring '00 -- Andrew Myers 4

Lecture 8 CS 412/413 Spring '00 -- Andrew Myers 2. Lecture 8 CS 412/413 Spring '00 -- Andrew Myers 4 CS412/413 Introduction to Compilers and Translators Spring 00 Outline Typechecking Symbol tables Using symbol tables for analysis Lecture 8: Semantic Analysis and Symbol Tables Lecture 8 CS 412/413 Spring

More information

Faculty of Electrical Engineering, Mathematics, and Computer Science Delft University of Technology

Faculty of Electrical Engineering, Mathematics, and Computer Science Delft University of Technology Faculty of Electrical Engineering, Mathematics, and Computer Science Delft University of Technology exam Compiler Construction in4020 July 5, 2007 14.00-15.30 This exam (8 pages) consists of 60 True/False

More information

Optimizing Closures in O(0) time

Optimizing Closures in O(0) time Optimizing Closures in O(0 time Andrew W. Keep Cisco Systems, Inc. Indiana Univeristy akeep@cisco.com Alex Hearn Indiana University adhearn@cs.indiana.edu R. Kent Dybvig Cisco Systems, Inc. Indiana University

More information

CS 360 Programming Languages Interpreters

CS 360 Programming Languages Interpreters CS 360 Programming Languages Interpreters Implementing PLs Most of the course is learning fundamental concepts for using and understanding PLs. Syntax vs. semantics vs. idioms. Powerful constructs like

More information

Object-oriented Compiler Construction

Object-oriented Compiler Construction 1 Object-oriented Compiler Construction Extended Abstract Axel-Tobias Schreiner, Bernd Kühl University of Osnabrück, Germany {axel,bekuehl}@uos.de, http://www.inf.uos.de/talks/hc2 A compiler takes a program

More information

Intermediate Code Generation

Intermediate Code Generation Intermediate Code Generation In the analysis-synthesis model of a compiler, the front end analyzes a source program and creates an intermediate representation, from which the back end generates target

More information

COMPILER CONSTRUCTION Seminar 03 TDDB

COMPILER CONSTRUCTION Seminar 03 TDDB COMPILER CONSTRUCTION Seminar 03 TDDB44 2016 Martin Sjölund (martin.sjolund@liu.se) Mahder Gebremedhin (mahder.gebremedhin@liu.se) Department of Computer and Information Science Linköping University LABS

More information

CSE341: Programming Languages Lecture 17 Implementing Languages Including Closures. Dan Grossman Autumn 2018

CSE341: Programming Languages Lecture 17 Implementing Languages Including Closures. Dan Grossman Autumn 2018 CSE341: Programming Languages Lecture 17 Implementing Languages Including Closures Dan Grossman Autumn 2018 Typical workflow concrete syntax (string) "(fn x => x + x) 4" Parsing Possible errors / warnings

More information

Lecture 15-16: Intermediate Code-Generation

Lecture 15-16: Intermediate Code-Generation Lecture 15-16: Intermediate Code-Generation Dr Kieran T. Herley Department of Computer Science University College Cork 2017-2018 KH (16/11/17) Lecture 15-16: Intermediate Code-Generation 2017-2018 1 /

More information

Compiler Code Generation COMP360

Compiler Code Generation COMP360 Compiler Code Generation COMP360 Students who acquire large debts putting themselves through school are unlikely to think about changing society. When you trap people in a system of debt, they can t afford

More information

Compilers. Intermediate representations and code generation. Yannis Smaragdakis, U. Athens (original slides by Sam

Compilers. Intermediate representations and code generation. Yannis Smaragdakis, U. Athens (original slides by Sam Compilers Intermediate representations and code generation Yannis Smaragdakis, U. Athens (original slides by Sam Guyer@Tufts) Today Intermediate representations and code generation Scanner Parser Semantic

More information

My malloc: mylloc and mhysa. Johan Montelius HT2016

My malloc: mylloc and mhysa. Johan Montelius HT2016 1 Introduction My malloc: mylloc and mhysa Johan Montelius HT2016 So this is an experiment where we will implement our own malloc. We will not implement the world s fastest allocator, but it will work

More information

Project 5 - The Meta-Circular Evaluator

Project 5 - The Meta-Circular Evaluator MASSACHVSETTS INSTITVTE OF TECHNOLOGY Department of Electrical Engineering and Computer Science 6.001 Structure and Interpretation of Computer Programs Spring Semester, 2005 Project 5 - The Meta-Circular

More information

IR Generation. May 13, Monday, May 13, 13

IR Generation. May 13, Monday, May 13, 13 IR Generation May 13, 2013 Monday, May 13, 13 Monday, May 13, 13 Monday, May 13, 13 Midterm Results Grades already in Repeal policy Talk to TA by the end of the Tuesday reserve the right to regrade the

More information

Sardar Vallabhbhai Patel Institute of Technology (SVIT), Vasad M.C.A. Department COSMOS LECTURE SERIES ( ) (ODD) Code Optimization

Sardar Vallabhbhai Patel Institute of Technology (SVIT), Vasad M.C.A. Department COSMOS LECTURE SERIES ( ) (ODD) Code Optimization Sardar Vallabhbhai Patel Institute of Technology (SVIT), Vasad M.C.A. Department COSMOS LECTURE SERIES (2018-19) (ODD) Code Optimization Prof. Jonita Roman Date: 30/06/2018 Time: 9:45 to 10:45 Venue: MCA

More information

Compilers and Code Optimization EDOARDO FUSELLA

Compilers and Code Optimization EDOARDO FUSELLA Compilers and Code Optimization EDOARDO FUSELLA The course covers Compiler architecture Pre-requisite Front-end Strong programming background in C, C++ Back-end LLVM Code optimization A case study: nu+

More information

CSE 401/M501 Compilers

CSE 401/M501 Compilers CSE 401/M501 Compilers ASTs, Modularity, and the Visitor Pattern Hal Perkins Autumn 2018 UW CSE 401/M501 Autumn 2018 H-1 Agenda Today: AST operations: modularity and encapsulation Visitor pattern: basic

More information

Recap: Functions as first-class values

Recap: Functions as first-class values Recap: Functions as first-class values Arguments, return values, bindings What are the benefits? Parameterized, similar functions (e.g. Testers) Creating, (Returning) Functions Iterator, Accumul, Reuse

More information

UNIVERSITY OF CALIFORNIA Department of Electrical Engineering and Computer Sciences Computer Science Division. P. N. Hilfinger

UNIVERSITY OF CALIFORNIA Department of Electrical Engineering and Computer Sciences Computer Science Division. P. N. Hilfinger UNIVERSITY OF CALIFORNIA Department of Electrical Engineering and Computer Sciences Computer Science Division CS 164 Spring 2018 P. N. Hilfinger Project #2: Static Analyzer Due: Friday, 6 April 2018 The

More information

Topic 7: Intermediate Representations

Topic 7: Intermediate Representations Topic 7: Intermediate Representations COS 320 Compiling Techniques Princeton University Spring 2016 Lennart Beringer 1 2 Intermediate Representations 3 Intermediate Representations 4 Intermediate Representations

More information

Semantic actions for expressions

Semantic actions for expressions Semantic actions for expressions Semantic actions Semantic actions are routines called as productions (or parts of productions) are recognized Actions work together to build up intermediate representations

More information

CS 4240: Compilers and Interpreters Project Phase 1: Scanner and Parser Due Date: October 4 th 2015 (11:59 pm) (via T-square)

CS 4240: Compilers and Interpreters Project Phase 1: Scanner and Parser Due Date: October 4 th 2015 (11:59 pm) (via T-square) CS 4240: Compilers and Interpreters Project Phase 1: Scanner and Parser Due Date: October 4 th 2015 (11:59 pm) (via T-square) Introduction This semester, through a project split into 3 phases, we are going

More information

Wellesley College CS251 Programming Languages Spring, 2000 FINAL EXAM REVIEW PROBLEM SOLUTIONS

Wellesley College CS251 Programming Languages Spring, 2000 FINAL EXAM REVIEW PROBLEM SOLUTIONS Wellesley College CS251 Programming Languages Spring, 2000 FINAL EXAM REVIEW PROBLEM SOLUTIONS This document contains solutions to the problems on the final exam review problems posted earlier except for

More information

Intermediate Representations

Intermediate Representations COMP 506 Rice University Spring 2018 Intermediate Representations source code IR Front End Optimizer Back End IR target code Copyright 2018, Keith D. Cooper & Linda Torczon, all rights reserved. Students

More information

Lecture 6: The Declarative Kernel Language Machine. September 13th, 2011

Lecture 6: The Declarative Kernel Language Machine. September 13th, 2011 Lecture 6: The Declarative Kernel Language Machine September 13th, 2011 Lecture Outline Computations contd Execution of Non-Freezable Statements on the Abstract Machine The skip Statement The Sequential

More information

CPL 2016, week 10. Clojure functional core. Oleg Batrashev. April 11, Institute of Computer Science, Tartu, Estonia

CPL 2016, week 10. Clojure functional core. Oleg Batrashev. April 11, Institute of Computer Science, Tartu, Estonia CPL 2016, week 10 Clojure functional core Oleg Batrashev Institute of Computer Science, Tartu, Estonia April 11, 2016 Overview Today Clojure language core Next weeks Immutable data structures Clojure simple

More information

CS422 - Programming Language Design

CS422 - Programming Language Design 1 CS422 - Programming Language Design Continuation-Passing Style (CPS) Transformation Grigore Roşu Department of Computer Science University of Illinois at Urbana-Champaign 2 On Data Versus Control Context

More information

5. Semantic Analysis!

5. Semantic Analysis! 5. Semantic Analysis! Prof. O. Nierstrasz! Thanks to Jens Palsberg and Tony Hosking for their kind permission to reuse and adapt the CS132 and CS502 lecture notes.! http://www.cs.ucla.edu/~palsberg/! http://www.cs.purdue.edu/homes/hosking/!

More information

Three-Address Code IR

Three-Address Code IR Three-Address Code IR Announcements Programming Project 3 due tonight at 11:59PM. OH today after lecture. Ask questions on Piazzza! Ask questions via email! Programming Project 4 out, due Wednesday, August

More information

IR Optimization. May 15th, Tuesday, May 14, 13

IR Optimization. May 15th, Tuesday, May 14, 13 IR Optimization May 15th, 2013 Tuesday, May 14, 13 But before we talk about IR optimization... Wrapping up IR generation Tuesday, May 14, 13 Three-Address Code Or TAC The IR that you will be using for

More information

Semantic Analysis. Lecture 9. February 7, 2018

Semantic Analysis. Lecture 9. February 7, 2018 Semantic Analysis Lecture 9 February 7, 2018 Midterm 1 Compiler Stages 12 / 14 COOL Programming 10 / 12 Regular Languages 26 / 30 Context-free Languages 17 / 21 Parsing 20 / 23 Extra Credit 4 / 6 Average

More information

CS 4120 Introduction to Compilers

CS 4120 Introduction to Compilers CS 4120 Introduction to Compilers Andrew Myers Cornell University Lecture 12: Modules, Type representations, Visitors 1 Structuring Analysis Analysis is a traversal of AST Technique used in lecture: recursion

More information

CS558 Programming Languages

CS558 Programming Languages CS558 Programming Languages Fall 2016 Lecture 3a Andrew Tolmach Portland State University 1994-2016 Formal Semantics Goal: rigorous and unambiguous definition in terms of a wellunderstood formalism (e.g.

More information

Faculty of Electrical Engineering, Mathematics, and Computer Science Delft University of Technology

Faculty of Electrical Engineering, Mathematics, and Computer Science Delft University of Technology Faculty of Electrical Engineering, Mathematics, and Computer Science Delft University of Technology exam Compiler Construction in4303 April 9, 2010 14.00-15.30 This exam (6 pages) consists of 52 True/False

More information

CS 132 Compiler Construction

CS 132 Compiler Construction CS 132 Compiler Construction 1. Introduction 2 2. Lexical analysis 31 3. LL parsing 58 4. LR parsing 110 5. JavaCC and JTB 127 6. Semantic analysis 150 7. Translation and simplification 165 8. Liveness

More information

6.001 Notes: Section 15.1

6.001 Notes: Section 15.1 6.001 Notes: Section 15.1 Slide 15.1.1 Our goal over the next few lectures is to build an interpreter, which in a very basic sense is the ultimate in programming, since doing so will allow us to define

More information

An Overview of Compilation

An Overview of Compilation An Overview of Compilation (www.cse.iitb.ac.in/ uday) Department of Computer Science and Engineering, Indian Institute of Technology, Bombay January 2014 cs306 Compilation Overview: Outline 1/18 Outline

More information

Hard deadline: 3/28/15 1:00pm. Using software development tools like source control. Understanding the environment model and type inference.

Hard deadline: 3/28/15 1:00pm. Using software development tools like source control. Understanding the environment model and type inference. CS 3110 Spring 2015 Problem Set 3 Version 0 (last modified March 12, 2015) Soft deadline: 3/26/15 11:59pm Hard deadline: 3/28/15 1:00pm Overview In this assignment you will implement several functions

More information

Intro. Scheme Basics. scm> 5 5. scm>

Intro. Scheme Basics. scm> 5 5. scm> Intro Let s take some time to talk about LISP. It stands for LISt Processing a way of coding using only lists! It sounds pretty radical, and it is. There are lots of cool things to know about LISP; if

More information

Compilers and computer architecture From strings to ASTs (2): context free grammars

Compilers and computer architecture From strings to ASTs (2): context free grammars 1 / 1 Compilers and computer architecture From strings to ASTs (2): context free grammars Martin Berger October 2018 Recall the function of compilers 2 / 1 3 / 1 Recall we are discussing parsing Source

More information

UNIVERSITY OF CALIFORNIA Department of Electrical Engineering and Computer Sciences Computer Science Division. P. N. Hilfinger

UNIVERSITY OF CALIFORNIA Department of Electrical Engineering and Computer Sciences Computer Science Division. P. N. Hilfinger UNIVERSITY OF CALIFORNIA Department of Electrical Engineering and Computer Sciences Computer Science Division CS 164 Spring 2010 P. N. Hilfinger CS 164: Final Examination (revised) Name: Login: You have

More information

About the Tutorial. Audience. Prerequisites. Copyright & Disclaimer. Compiler Design

About the Tutorial. Audience. Prerequisites. Copyright & Disclaimer. Compiler Design i About the Tutorial A compiler translates the codes written in one language to some other language without changing the meaning of the program. It is also expected that a compiler should make the target

More information

CS 415 Midterm Exam Spring SOLUTION

CS 415 Midterm Exam Spring SOLUTION CS 415 Midterm Exam Spring 2005 - SOLUTION Name Email Address Student ID # Pledge: This exam is closed note, closed book. Questions will be graded on quality of answer. Please supply the best answer you

More information

MP 3 A Lexer for MiniJava

MP 3 A Lexer for MiniJava MP 3 A Lexer for MiniJava CS 421 Spring 2012 Revision 1.0 Assigned Wednesday, February 1, 2012 Due Tuesday, February 7, at 09:30 Extension 48 hours (penalty 20% of total points possible) Total points 43

More information

Anatomy of a Compiler. Overview of Semantic Analysis. The Compiler So Far. Why a Separate Semantic Analysis?

Anatomy of a Compiler. Overview of Semantic Analysis. The Compiler So Far. Why a Separate Semantic Analysis? Anatomy of a Compiler Program (character stream) Lexical Analyzer (Scanner) Syntax Analyzer (Parser) Semantic Analysis Parse Tree Intermediate Code Generator Intermediate Code Optimizer Code Generator

More information

Question Points Score

Question Points Score CS 453 Introduction to Compilers Midterm Examination Spring 2009 March 12, 2009 75 minutes (maximum) Closed Book You may use one side of one sheet (8.5x11) of paper with any notes you like. This exam has

More information

Static Semantics. Lecture 15. (Notes by P. N. Hilfinger and R. Bodik) 2/29/08 Prof. Hilfinger, CS164 Lecture 15 1

Static Semantics. Lecture 15. (Notes by P. N. Hilfinger and R. Bodik) 2/29/08 Prof. Hilfinger, CS164 Lecture 15 1 Static Semantics Lecture 15 (Notes by P. N. Hilfinger and R. Bodik) 2/29/08 Prof. Hilfinger, CS164 Lecture 15 1 Current Status Lexical analysis Produces tokens Detects & eliminates illegal tokens Parsing

More information

Faculty of Electrical Engineering, Mathematics, and Computer Science Delft University of Technology

Faculty of Electrical Engineering, Mathematics, and Computer Science Delft University of Technology Faculty of Electrical Engineering, Mathematics, and Computer Science Delft University of Technology exam Compiler Construction in4020 January 19, 2006 14.00-15.30 This exam (8 pages) consists of 60 True/False

More information

CS251 Programming Languages Handout # 29 Prof. Lyn Turbak March 7, 2007 Wellesley College

CS251 Programming Languages Handout # 29 Prof. Lyn Turbak March 7, 2007 Wellesley College CS5 Programming Languages Handout # 9 Prof. Lyn Turbak March, 00 Wellesley College Postfix: A Simple Stack Language Several exercises and examples in this course will involve the Postfix mini-language.

More information

3 ADT Implementation in Java

3 ADT Implementation in Java Object-Oriented Design Lecture 3 CS 3500 Spring 2010 (Pucella) Tuesday, Jan 19, 2010 3 ADT Implementation in Java Last time, we defined an ADT via a signature and a specification. We noted that the job

More information

CS 406/534 Compiler Construction Putting It All Together

CS 406/534 Compiler Construction Putting It All Together CS 406/534 Compiler Construction Putting It All Together Prof. Li Xu Dept. of Computer Science UMass Lowell Fall 2004 Part of the course lecture notes are based on Prof. Keith Cooper, Prof. Ken Kennedy

More information

CSE450. Translation of Programming Languages. Lecture 11: Semantic Analysis: Types & Type Checking

CSE450. Translation of Programming Languages. Lecture 11: Semantic Analysis: Types & Type Checking CSE450 Translation of Programming Languages Lecture 11: Semantic Analysis: Types & Type Checking Structure Project 1 - of a Project 2 - Compiler Today! Project 3 - Source Language Lexical Analyzer Syntax

More information

CS2112 Fall Assignment 4 Parsing and Fault Injection. Due: March 18, 2014 Overview draft due: March 14, 2014

CS2112 Fall Assignment 4 Parsing and Fault Injection. Due: March 18, 2014 Overview draft due: March 14, 2014 CS2112 Fall 2014 Assignment 4 Parsing and Fault Injection Due: March 18, 2014 Overview draft due: March 14, 2014 Compilers and bug-finding systems operate on source code to produce compiled code and lists

More information

Programming Paradigms

Programming Paradigms PP 2016/17 Unit 5 Recursion 1/32 Programming Paradigms Unit 5 Recursion J. Gamper Free University of Bozen-Bolzano Faculty of Computer Science IDSE PP 2016/17 Unit 5 Recursion 2/32 Outline 1 Recursion

More information

CS164: Programming Assignment 2 Dlex Lexer Generator and Decaf Lexer

CS164: Programming Assignment 2 Dlex Lexer Generator and Decaf Lexer CS164: Programming Assignment 2 Dlex Lexer Generator and Decaf Lexer Assigned: Thursday, September 16, 2004 Due: Tuesday, September 28, 2004, at 11:59pm September 16, 2004 1 Introduction Overview In this

More information

CS5363 Final Review. cs5363 1

CS5363 Final Review. cs5363 1 CS5363 Final Review cs5363 1 Programming language implementation Programming languages Tools for describing data and algorithms Instructing machines what to do Communicate between computers and programmers

More information

CSCI 3155: Lab Assignment 6

CSCI 3155: Lab Assignment 6 CSCI 3155: Lab Assignment 6 Fall 2012: Due Saturday, December 1, 2012 Unlike the last few labs, our primary focus in the lab is not new language features. Instead, we will explore some related topics that

More information

CSCI Compiler Design

CSCI Compiler Design CSCI 565 - Compiler Design Spring 2015 Midterm Exam March 04, 2015 at 8:00 AM in class (RTH 217) Duration: 2h 30 min. Please label all pages you turn in with your name and student number. Name: Number:

More information

TDDD55 - Compilers and Interpreters Lesson 3

TDDD55 - Compilers and Interpreters Lesson 3 TDDD55 - Compilers and Interpreters Lesson 3 November 22 2011 Kristian Stavåker (kristian.stavaker@liu.se) Department of Computer and Information Science Linköping University LESSON SCHEDULE November 1,

More information

Data-Flow Analysis Foundations

Data-Flow Analysis Foundations CS 301 Spring 2016 Meetings April 11 Data-Flow Foundations Plan Source Program Lexical Syntax Semantic Intermediate Code Generation Machine- Independent Optimization Code Generation Target Program This

More information

CIS 194: Homework 5. Due Monday, 18 February. Expressions. (2 + 3) 4 would be represented by the value

CIS 194: Homework 5. Due Monday, 18 February. Expressions. (2 + 3) 4 would be represented by the value CIS 194: Homework 5 Due Monday, 18 February Files you should submit: Calc.hs, containing a module of the same name. As we saw in class, Haskell s type classes provide ad-hoc polymorphism, that is, the

More information

CS61C Machine Structures. Lecture 8 - Introduction to the MIPS Processor and Assembly Language. 9/14/2007 John Wawrzynek

CS61C Machine Structures. Lecture 8 - Introduction to the MIPS Processor and Assembly Language. 9/14/2007 John Wawrzynek CS61C Machine Structures Lecture 8 - Introduction to the MIPS Processor and Assembly Language 9/14/2007 John Wawrzynek (www.cs.berkeley.edu/~johnw) www-inst.eecs.berkeley.edu/~cs61c/ CS 61C L08 C Introduction

More information

Compilers CS S-08 Code Generation

Compilers CS S-08 Code Generation Compilers CS414-2017S-08 Code Generation David Galles Department of Computer Science University of San Francisco 08-0: Code Generation Next Step: Create actual assembly code. Use a tree tiling strategy:

More information

CS1 Lecture 5 Jan. 25, 2019

CS1 Lecture 5 Jan. 25, 2019 CS1 Lecture 5 Jan. 25, 2019 HW1 due Monday, 9:00am. Notes: Do not write all the code at once before starting to test. Take tiny steps. Write a few lines test... add a line or two test... add another line

More information

ENCM 369 Winter 2019 Lab 6 for the Week of February 25

ENCM 369 Winter 2019 Lab 6 for the Week of February 25 page of ENCM 369 Winter 29 Lab 6 for the Week of February 25 Steve Norman Department of Electrical & Computer Engineering University of Calgary February 29 Lab instructions and other documents for ENCM

More information

CMSC 330: Organization of Programming Languages. Operational Semantics

CMSC 330: Organization of Programming Languages. Operational Semantics CMSC 330: Organization of Programming Languages Operational Semantics Notes about Project 4, Parts 1 & 2 Still due today (7/2) Will not be graded until 7/11 (along with Part 3) You are strongly encouraged

More information

infix expressions (review)

infix expressions (review) Outline infix, prefix, and postfix expressions queues queue interface queue applications queue implementation: array queue queue implementation: linked queue application of queues and stacks: data structure

More information

Fundamentals of Compilation

Fundamentals of Compilation PART ONE Fundamentals of Compilation 1 Introduction A compiler was originally a program that compiled subroutines [a link-loader]. When in 1954 the combination algebraic compiler came into use, or rather

More information

Recap: Typical Compiler Structure. G53CMP: Lecture 2 A Complete (Albeit Small) Compiler. This Lecture (2) This Lecture (1)

Recap: Typical Compiler Structure. G53CMP: Lecture 2 A Complete (Albeit Small) Compiler. This Lecture (2) This Lecture (1) Recap: Typical Compiler Structure G53CMP: Lecture 2 A Complete (Albeit Small) Compiler Henrik Nilsson Front End sequence of characters scanner Lexical Analysis sequence of tokens parser Syntactic Analysis/Parsing

More information

Lecture 15 CIS 341: COMPILERS

Lecture 15 CIS 341: COMPILERS Lecture 15 CIS 341: COMPILERS Announcements HW4: OAT v. 1.0 Parsing & basic code generation Due: March 28 th No lecture on Thursday, March 22 Dr. Z will be away Zdancewic CIS 341: Compilers 2 Adding Integers

More information

Compilers and computer architecture: Semantic analysis

Compilers and computer architecture: Semantic analysis 1 / 1 Compilers and computer architecture: Semantic analysis Martin Berger Alex Jeffery October 2018 Recall the function of compilers 2 / 1 3 / 1 Recall the structure of compilers Source program Lexical

More information

Homework 6: Higher-Order Procedures Due: 11:59 PM, Oct 16, 2018

Homework 6: Higher-Order Procedures Due: 11:59 PM, Oct 16, 2018 Integrated Introduction to Computer Science Klein Homework 6: Higher-Order Procedures Due: 11:59 PM, Oct 16, 2018 Contents 1 Fun with map (Practice) 2 2 Unfold (Practice) 3 3 Map2 3 4 Fold 4 5 All You

More information

CS558 Programming Languages

CS558 Programming Languages CS558 Programming Languages Winter 2017 Lecture 4a Andrew Tolmach Portland State University 1994-2017 Semantics and Erroneous Programs Important part of language specification is distinguishing valid from

More information

Functional Parsing A Multi-Lingual Killer- Application

Functional Parsing A Multi-Lingual Killer- Application RIT Scholar Works Presentations and other scholarship 2008 Functional Parsing A Multi-Lingual Killer- Application Axel-Tobias Schreiner James Heliotis Follow this and additional works at: http://scholarworks.rit.edu/other

More information

CS4120/4121/5120/5121 Spring /6 Programming Assignment 4

CS4120/4121/5120/5121 Spring /6 Programming Assignment 4 CS4120/4121/5120/5121 Spring 2016 Programming Assignment 4 Intermediate Code Generation Due: Friday March 18, 11:59pm This programming assignment requires you to implement an IR generator for the Xi programming

More information

RIS shading Series #2 Meet The Plugins

RIS shading Series #2 Meet The Plugins RIS shading Series #2 Meet The Plugins In this tutorial I will be going over what each type of plugin is, what their uses are, and the basic layout of each. By the end you should understand the three basic

More information

CMPE 152 Compiler Design

CMPE 152 Compiler Design San José State University Department of Computer Engineering CMPE 152 Compiler Design Section 1 (Class) Sections 2 and 3 (Labs) Spring 2019 Course and Contact Information Instructor: Ron Mak Office Location:

More information

Table-Driven Top-Down Parsers

Table-Driven Top-Down Parsers Table-Driven Top-Down Parsers Recursive descent parsers have many attractive features. They are actual pieces of code that can be read by programmers and extended. This makes it fairly easy to understand

More information

Lab 9: More Sorting Algorithms 12:00 PM, Mar 21, 2018

Lab 9: More Sorting Algorithms 12:00 PM, Mar 21, 2018 CS18 Integrated Introduction to Computer Science Fisler, Nelson Lab 9: More Sorting Algorithms 12:00 PM, Mar 21, 2018 Contents 1 Heapsort 2 2 Quicksort 2 3 Bubble Sort 3 4 Merge Sort 3 5 Mirror Mirror

More information

Stating the obvious, people and computers do not speak the same language.

Stating the obvious, people and computers do not speak the same language. 3.4 SYSTEM SOFTWARE 3.4.3 TRANSLATION SOFTWARE INTRODUCTION Stating the obvious, people and computers do not speak the same language. People have to write programs in order to instruct a computer what

More information

Principle of Complier Design Prof. Y. N. Srikant Department of Computer Science and Automation Indian Institute of Science, Bangalore

Principle of Complier Design Prof. Y. N. Srikant Department of Computer Science and Automation Indian Institute of Science, Bangalore Principle of Complier Design Prof. Y. N. Srikant Department of Computer Science and Automation Indian Institute of Science, Bangalore Lecture - 20 Intermediate code generation Part-4 Run-time environments

More information

The Environment Model. Nate Foster Spring 2018

The Environment Model. Nate Foster Spring 2018 The Environment Model Nate Foster Spring 2018 Review Previously in 3110: Interpreters: ASTs, evaluation, parsing Formal syntax: BNF Formal semantics: dynamic: small-step substitution model static semantics

More information

LL(k) Compiler Construction. Top-down Parsing. LL(1) parsing engine. LL engine ID, $ S 0 E 1 T 2 3

LL(k) Compiler Construction. Top-down Parsing. LL(1) parsing engine. LL engine ID, $ S 0 E 1 T 2 3 LL(k) Compiler Construction More LL parsing Abstract syntax trees Lennart Andersson Revision 2011 01 31 2010 Related names top-down the parse tree is constructed top-down recursive descent if it is implemented

More information

Tail Calls. CMSC 330: Organization of Programming Languages. Tail Recursion. Tail Recursion (cont d) Names and Binding. Tail Recursion (cont d)

Tail Calls. CMSC 330: Organization of Programming Languages. Tail Recursion. Tail Recursion (cont d) Names and Binding. Tail Recursion (cont d) CMSC 330: Organization of Programming Languages Tail Calls A tail call is a function call that is the last thing a function does before it returns let add x y = x + y let f z = add z z (* tail call *)

More information

Compilers and computer architecture: A realistic compiler to MIPS

Compilers and computer architecture: A realistic compiler to MIPS 1 / 1 Compilers and computer architecture: A realistic compiler to MIPS Martin Berger November 2017 Recall the function of compilers 2 / 1 3 / 1 Recall the structure of compilers Source program Lexical

More information

UNIVERSITY OF CALIFORNIA Department of Electrical Engineering and Computer Sciences Computer Science Division. P. N. Hilfinger

UNIVERSITY OF CALIFORNIA Department of Electrical Engineering and Computer Sciences Computer Science Division. P. N. Hilfinger UNIVERSITY OF CALIFORNIA Department of Electrical Engineering and Computer Sciences Computer Science Division CS 164 Spring 2009 P. N. Hilfinger CS 164: Final Examination (corrected) Name: Login: You have

More information

CS1622. Semantic Analysis. The Compiler So Far. Lecture 15 Semantic Analysis. How to build symbol tables How to use them to find

CS1622. Semantic Analysis. The Compiler So Far. Lecture 15 Semantic Analysis. How to build symbol tables How to use them to find CS1622 Lecture 15 Semantic Analysis CS 1622 Lecture 15 1 Semantic Analysis How to build symbol tables How to use them to find multiply-declared and undeclared variables. How to perform type checking CS

More information

Prof. Mohamed Hamada Software Engineering Lab. The University of Aizu Japan

Prof. Mohamed Hamada Software Engineering Lab. The University of Aizu Japan Language Processing Systems Prof. Mohamed Hamada Software Engineering Lab. The University of Aizu Japan Semantic Analysis Compiler Architecture Front End Back End Source language Scanner (lexical analysis)

More information

Where we are. What makes a good IR? Intermediate Code. CS 4120 Introduction to Compilers

Where we are. What makes a good IR? Intermediate Code. CS 4120 Introduction to Compilers Where we are CS 4120 Introduction to Compilers Andrew Myers Cornell University Lecture 13: Intermediate Code 25 Sep 09 Source code (character stream) Token stream Abstract syntax tree Abstract syntax tree

More information

Homework 8. What To Turn In. Reading. Self Check. Problems. Handout 19 CSCI 334: Spring, 2017

Homework 8. What To Turn In. Reading. Self Check. Problems. Handout 19 CSCI 334: Spring, 2017 Homework 8 Due 25 April Handout 19 CSCI 334: Spring, 2017 What To Turn In Please hand in work in two pieces, one for the Problems and one for the Programming (Partner Optional): Problems: Turn in handwritten

More information

CSE200 Lecture 6: RECURSION

CSE200 Lecture 6: RECURSION Table of Contents Review of functions (using factorial example)... 1 Recursion... 1 Step by step run through of recursive factorial... 2 Recursion vs. iteration (for and while loops)... 3 Helper functions:...

More information

5. Semantic Analysis. Mircea Lungu Oscar Nierstrasz

5. Semantic Analysis. Mircea Lungu Oscar Nierstrasz 5. Semantic Analysis Mircea Lungu Oscar Nierstrasz Thanks to Jens Palsberg and Tony Hosking for their kind permission to reuse and adapt the CS132 and CS502 lecture notes. http://www.cs.ucla.edu/~palsberg/

More information