1DL321: Kompilatorteknik I (Compiler Design 1) Introduction to Programming Language Design and to Compilation

Similar documents
1DL321: Kompilatorteknik I (Compiler Design 1)

1DL321: Kompilatorteknik I (Compiler Design 1) Introduction to Programming Language Design and to Compilation

Compiler Design 1. Introduction to Programming Language Design and to Compilation

Introduction to Programming Languages and Compilers. CS164 11:00-12:30 TT 10 Evans. UPRM ICOM 4029 (Adapted from: Prof. Necula UCB CS 164)

PLAGIARISM. Administrivia. Compilers. CS143 11:00-12:15TT B03 Gates. Text. Staff. Instructor. TAs. Office hours, contact info on 143 web site

Administrivia. Compilers. CS143 10:30-11:50TT Gates B01. Text. Staff. Instructor. TAs. The Purple Dragon Book. Alex Aiken. Aho, Lam, Sethi & Ullman

PLAGIARISM. Administrivia. Course home page: Introduction to Programming Languages and Compilers

Introduction to Programming Languages and Compilers. CS164 11:00-12:00 MWF 306 Soda

Programming Language Design and Implementation. Cunning Plan. Your Host For The Semester. Wes Weimer TR 9:30-10:45 MEC 214. Who Are We?

Grade Weights. Language Design and Overview of COOL. CS143 Lecture 2. Programming Language Economics 101. Lecture Outline

COMP 181 Compilers. Administrative. Last time. Prelude. Compilation strategy. Translation strategy. Lecture 2 Overview

ICOM 4036 Spring 2004

Compilers. Lecture 2 Overview. (original slides by Sam

Programming Language Specification and Translation. ICOM 4036 Fall Lecture 3

Introduction. Compilers and Interpreters

Programming Language Design and Implementation. Wes Weimer MW 2:00 3:15 Thornton E-303

Introduction to Compilers

Compilers and Interpreters

Principles of Programming Languages. Lecture Outline

Lecture 1: Course Introduction

CS131: Programming Languages and Compilers. Spring 2017

Lecture 1: Course Introduction

CS 565: Programming Languages. Spring 2008 Tu, Th: 16:30-17:45 Room LWSN 1106

Introduction to Lexical Analysis

trends in programming languages

Syntactic Analysis. CS345H: Programming Languages. Lecture 3: Lexical Analysis. Outline. Lexical Analysis. What is a Token? Tokens

Compilers. Introduction. Yannis Smaragdakis, U. Athens (original slides by Sam

Introduction. CS 2210 Compiler Design Wonsun Ahn

Chapter 1 Preliminaries

Chapter 1. Preliminaries

CS 415 Midterm Exam Spring 2002

Concepts of Programming Languages

Programmiersprachen (Programming Languages)

Formal Languages and Compilers Lecture I: Introduction to Compilers

What is a compiler? var a var b mov 3 a mov 4 r1 cmpi a r1 jge l_e mov 2 b jmp l_d l_e: mov 3 b l_d: ;done

! Broaden your language horizons! Different programming languages! Different language features and tradeoffs. ! Study how languages are implemented

Lexical Analysis. Lecture 2-4

Compilers. Prerequisites

Introduction to Lexical Analysis

CSCI 3136 Principles of Programming Languages

Chapter 1. Preview. Reason for Studying OPL. Language Evaluation Criteria. Programming Domains

Compiling Techniques

Introduction to Compiler Construction

Introduction to Compiler Construction

CS 4120 and 5120 are really the same course. CS 4121 (5121) is required! Outline CS 4120 / 4121 CS 5120/ = 5 & 0 = 1. Course Information

8/27/17. CS-3304 Introduction. What will you learn? Semester Outline. Websites INTRODUCTION TO PROGRAMMING LANGUAGES

Chapter 1. Preliminaries

SKILL AREA 304: Review Programming Language Concept. Computer Programming (YPG)

Programming Languages, Summary CSC419; Odelia Schwartz

Introduction. A. Bellaachia Page: 1

CS415 Compilers Overview of the Course. These slides are based on slides copyrighted by Keith Cooper, Ken Kennedy & Linda Torczon at Rice University

9/5/17. The Design and Implementation of Programming Languages. Compilation. Interpretation. Compilation vs. Interpretation. Hybrid Implementation

What is a compiler? Xiaokang Qiu Purdue University. August 21, 2017 ECE 573

Administrivia. Lexical Analysis. Lecture 2-4. Outline. The Structure of a Compiler. Informal sketch of lexical analysis. Issues in lexical analysis

CS321 Languages and Compiler Design I. Winter 2012 Lecture 1

CS-XXX: Graduate Programming Languages. Lecture 9 Simply Typed Lambda Calculus. Dan Grossman 2012

What is a programming language?

CSE450 Translation of Programming Languages. Lecture 4: Syntax Analysis

Compiler Design. Dr. Chengwei Lei CEECS California State University, Bakersfield

Introduction to Compiler Construction

Pioneering Compiler Design

General Concepts. Abstraction Computational Paradigms Implementation Application Domains Influence on Success Influences on Design

Defining Program Syntax. Chapter Two Modern Programming Languages, 2nd ed. 1

CS2900 Introductory Programming with Python and C++ Kevin Squire LtCol Joel Young Fall 2007

CS 3360 Design and Implementation of Programming Languages. Exam 1

MIDTERM EXAMINATION - CS130 - Spring 2005

Syntax. A. Bellaachia Page: 1

CSE4305: Compilers for Algorithmic Languages CSE5317: Design and Construction of Compilers

CS Exam #1-100 points Spring 2011

Lecture 16: Static Semantics Overview 1

Outline. Introduction to Programming (in C++) Introduction. First program in C++ Programming examples

Why study Programming Language Concepts? Chapter One. Language Evaluation Criteria. Programming Domains. Readability Writability Reliability Cost

COMP-421 Compiler Design. Presented by Dr Ioanna Dionysiou

CSI32 Object-Oriented Programming

! Broaden your language horizons. ! Study how languages are implemented. ! Study how languages are described / specified

Language Evaluation P L COS 301. Fall School of Computing and Information Science University of Maine. Language Evaluation COS 301.

CS101 Introduction to Programming Languages and Compilers

Lexical Analysis. Chapter 2

CS 406/534 Compiler Construction Putting It All Together

Language Translation, History. CS152. Chris Pollett. Sep. 3, 2008.

LING/C SC/PSYC 438/538. Lecture 3 Sandiway Fong

CMSC 330: Organization of Programming Languages

Lexical Analysis. Lecture 3-4

Program Abstractions, Language Paradigms. CS152. Chris Pollett. Aug. 27, 2008.

A Tour of Language Implementation

Chapter 5. Names, Bindings, and Scopes

CS Lecture 2. The Front End. Lecture 2 Lexical Analysis

General Course Information. Catalogue Description. Objectives

CS 3360 Design and Implementation of Programming Languages. Exam 1

CS 415 Midterm Exam Spring SOLUTION

Semester Review CSC 301

CS 113: Introduction to

Topics Covered Thus Far. CMSC 330: Organization of Programming Languages. Language Features Covered Thus Far. Programming Languages Revisited

ECE573 Introduction to Compilers & Translators

Compilers. Pierre Geurts

Welcome to CSE131b: Compiler Construction

COP4020 Programming Languages. Compilers and Interpreters Robert van Engelen & Chris Lacher

G Programming Languages Spring 2010 Lecture 6. Robert Grimm, New York University

COP 3402 Systems Software. Lecture 4: Compilers. Interpreters

Semantic Analysis. Lecture 9. February 7, 2018

Transcription:

1DL321: Kompilatorteknik I (Compiler Design 1) Introduction to Programming Language Design and to Compilation

Administrivia Lecturer: Kostis Sagonas (kostis@it.uu.se) Course home page: http://www.it.uu.se/edu/course/homepage/komp/h18 Assistant(s): Magnus Lång (magnus.lang@it.uu.se) possibly 1/2 more... responsible for the lessons and assignments

Course Structure Course has theoretical and practical aspects Need both in programming languages! Written examination = theory (4 credits) first exam scheduled: 11 January 2019 Four assignments = practice (1 credit) Electronic hand-in to the assistant before the corresponding deadline You can submit one late assignment, if you need to, but it cannot be later than the deadline of the next assignment (for 1-3) or Dec. 29th (for 4th)

Course Literature

Academic Honesty For assignments you are allowed to work in pairs (but no threesomes/foursomes/...) Don t share your work with others e.g. post on public repositories Don t use work from non-cited sources including old assignments PLAGIARISM

How are Languages Implemented? Two major strategies: Interpreters (older, less studied) Compilers (newer, much more studied) Interpreters run programs as is Little or no preprocessing Compilers do extensive preprocessing

Language Implementations Today, batch compilation systems dominate gcc, clang,... Some languages are primarily interpreted Java bytecode compiler (javac) Scripting languages (perl, python, javascript, ruby) Some languages (e.g. Lisp) provide both Interpreter for development Compiler for production

(Short) History of High-Level Languages 1953 IBM develops the 701 Till then, all programming is done in assembly Problem: Software costs exceeded hardware costs! John Backus: Speedcoding An interpreter Ran 10-20 times slower than hand-written assembly

FORTRAN I 1954 IBM develops the 704 John Backus Idea: translate high-level code to assembly Many thought this impossible Had already failed in other projects 1954-7 FORTRAN I project By 1958, >50% of all software is in FORTRAN Cut development time dramatically (2 weeks 2 hours)

FORTRAN I The first compiler Produced code almost as good as hand-written Huge impact on computer science Led to an enormous body of theoretical work Modern compilers preserve the outlines of the FORTRAN I compiler

The Structure of a Compiler 1. Lexical Analysis 2. Syntax Analysis 3. Semantic Analysis 4. IR Optimization 5. Code Generation 6. Low-level Optimization The first 3 phases can be understood by analogy to how humans comprehend natural languages (e.g. Swedish or English).

First Step: Lexical Analysis Recognize words Smallest unit above letters This is a sentence. Note the Capital "T" (start of sentence symbol) Blank " " (word separator) Period "." (end of sentence symbol)

More Lexical Analysis Lexical analysis is not trivial. Consider: ist his ase nte nce Plus, programming languages are typically more cryptic than English: *p->f ++ = -.12345e-5

And More Lexical Analysis Lexical analyzer divides program text into words or tokens if (x == y) then z = 1; else z = 2; Units: if, (, x, ==, y, ), then, z, =, 1, ;, else, z, =, 2, ;

Second Step: Syntax Analysis (Parsing) Once words are identified, the next step is to understand the sentence structure Parsing = Diagramming Sentences The diagram is a tree

Diagramming a Sentence (1) This line is a longer sentence article noun verb article adjective noun noun phrase noun phrase verb phrase sentence

Diagramming a Sentence (2) This line is a longer sentence article noun verb article adjective noun subject object sentence

Parsing Programs Parsing program expressions is the same Consider: if (x == y) then z = 1; else z = 2; Diagrammed: x == y z = 1 z = 2 relation predicate assignment then-stmt if-then-else assignment else-stmt

Third Step: Semantic Analysis Once the sentence structure is understood, we can try to understand its meaning But meaning is too hard for compilers Most compilers perform limited analysis to catch inconsistencies Some optimizing compilers do more analysis to improve the performance of the program

Semantic Analysis in English Example: Jack said Jerry left his assignment at home. What does his refer to? Jack or Jerry? Even worse: Jack said Jack left his assignment at home? How many Jacks are there? Which one left the assignment?

Semantic Analysis in Programming Languages Programming languages define strict rules to avoid such ambiguities This C++ code prints 42; the inner definition is used { } int Jack = 17; { int Jack = 42; cout << Jack; }

More Semantic Analysis Compilers perform many semantic checks besides variable bindings Example: Arnold left her homework at home. A type mismatch between her and Arnold; we know they are different people Presumably Arnold is male

Optimization No strong counterpart in English, but akin to editing Automatically modify programs so that they Run faster avoid some source code redundancy exploit the underlying hardware more effectively Use less memory/cache/power In general, conserve some resource more economically

Optimization Example X = Y * 0 is the same as X = 0 NO! Valid for integers, but not for floating point numbers

Code Generation Produces assembly code (usually) A translation into another language Analogous to human translation

Intermediate Languages Many compilers perform translations between successive intermediate forms All but first and last are intermediate languages internal to the compiler Typically there is one IL Intermediate languages generally ordered in descending level of abstraction Highest is source Lowest is assembly

Intermediate Languages (Cont.) IL s are useful because lower levels expose features hidden by higher levels registers memory/frame layout etc. But lower levels obscure high-level meaning

Issues Compiling is almost this simple, but there are many pitfalls Example: How are erroneous programs handled? Language design has big impact on compiler Determines what is easy and hard to compile Course theme: many trade-offs in language design

Compilers Today The overall structure of almost every compiler adheres to our outline The proportions have changed since FORTRAN Early: lexical analysis, parsing most complex, expensive Today: lexical analysis and parsing are well-understood and cheap semantic analysis and optimization dominate focus on concurrency/parallelism and interactions with the memory model of the underlying platform optimization for code size and energy consumption

Current Trends in Compilation Compilation for speed is less interesting. However, there are exceptions: scientific programs advanced processors (Digital Signal Processors, advanced speculative architectures, GPUs) Ideas from compilation used for improving code reliability: memory safety detecting data races security properties...

Programming Language Economics Programming languages are designed to fill a void enable a previously difficult/impossible application orthogonal to language design quality (almost) Programming training is the dominant cost Languages with a big user base are replaced rarely Popular languages become ossified But it is easy to start in a new niche...

Why So Many Programming Languages? Application domains have distinctive (and sometimes conflicting) needs Examples: Scientific computing: High performance Business: report generation Artificial intelligence: symbolic computation Systems programming: efficient low-level access Web programming: scripts that run everywhere Multicores: concurrency and parallelism Other special purpose languages...

Topic: Language Design No universally accepted metrics for design A good language is one people use NO! Is COBOL the best language? Good language design is hard

Language Evaluation Criteria Characteristic Criteria Readability Writeability Reliability Simplicity YES YES YES Data types YES YES YES Syntax design YES YES YES Abstraction YES YES Expressivity YES YES Type checking YES Exceptions YES

History of Ideas: Abstraction Abstraction = detached from concrete details Necessary for building software systems Modes of abstraction: Via languages/compilers higher-level code; few machine dependencies Via subroutines abstract interface to behavior Via modules export interfaces which hide implementation Via abstract data types bundle data with its operations

History of Ideas: Types Originally, languages had only few types FORTRAN: scalars, arrays LISP: no static type distinctions Realization: types help provide code documentation allow the programmer to express abstraction allow the compiler to check among many frequent errors and sometimes guarantee various forms of safety More recently: experiments with various forms of parameterization best developed in functional languages

History of Ideas: Reuse Exploits common patterns in software development Goal: mass produced software components Reuse is difficult Two popular approaches (combined in C++) Type parameterization (List(Int) & List(Double)) Class and inheritance: C++ derived classes Inheritance allows: specialization of existing abstractions extension, modification and information hiding

Current Trends Language design Many new special-purpose languages Popular languages to stay Compilers More needed and more complex Driven by increasing gap between new languages new architectures Venerable and healthy area

Why Study Compiler Design? Increase your knowledge of common programming constructs and their properties Improve your understanding of program execution Increase your ability to learn new languages Learn how languages are implemented Learn new (programming) techniques See many basic CS concepts at work