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

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

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

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

1DL321: Kompilatorteknik I (Compiler Design 1)

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

Programming Language Specification and Translation. ICOM 4036 Fall Lecture 3

Compilers. Lecture 2 Overview. (original slides by Sam

Introduction. Compilers and Interpreters

Introduction to Compilers

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

Compilers and Interpreters

CS131: Programming Languages and Compilers. Spring 2017

Principles of Programming Languages. Lecture Outline

trends in programming languages

Lecture 1: Course Introduction

Introduction to Lexical Analysis

CS 415 Midterm Exam Spring 2002

Introduction to Lexical Analysis

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

Lecture 1: Course Introduction

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

Formal Languages and Compilers Lecture I: Introduction to Compilers

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

Introduction. CS 2210 Compiler Design Wonsun Ahn

Compilers. Prerequisites

Lexical Analysis. Lecture 2-4

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

Syntax. 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

Chapter 1 Preliminaries

Chapter 1. Preliminaries

Pioneering Compiler Design

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

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

Programmiersprachen (Programming Languages)

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

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

CS 3360 Design and Implementation of Programming Languages. Exam 1

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

CSE 3302 Programming Languages Lecture 2: Syntax

CS 553 Compiler Construction Fall 2007 Project #1 Adding floats to MiniJava Due August 31, 2005

Parsing Text Input CS 005. This document is aimed at increasing your understanding of parsing text input, as well as informing you of

CSE450 Translation of Programming Languages. Lecture 4: Syntax Analysis

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

Introduction to Compiler Design

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

CS 3360 Design and Implementation of Programming Languages. Exam 1

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

CS101 Introduction to Programming Languages and Compilers

Chapter 1. Preliminaries

Lexical Analysis. Chapter 2

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

Lecture 16: Static Semantics Overview 1

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

CS 321 IV. Overview of Compilation

Programming Languages, Summary CSC419; Odelia Schwartz

Introduction. A. Bellaachia Page: 1

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

Evolution of Fortran. Presented by: Tauqeer Ahmad. Seminar on Languages for Scientific Computing

CSEP 501 Compilers. Languages, Automata, Regular Expressions & Scanners Hal Perkins Winter /8/ Hal Perkins & UW CSE B-1

Compiling Techniques

Compiling and Interpreting Programming. Overview of Compilers and Interpreters

The Structure of a Syntax-Directed Compiler

Semester Review CSC 301

SLIDE 2. At the beginning of the lecture, we answer question: On what platform the system will work when discussing this subject?

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

What are compilers? A Compiler

Working of the Compilers

CMSC 350: COMPILER DESIGN

What Is Computer Science? The Scientific Study of Computation. Expressing or Describing

LECTURE 3. Compiler Phases

Introduction to Compiler Construction

Compiler Theory Introduction and Course Outline Sandro Spina Department of Computer Science

Welcome to CSE131b: Compiler Construction

Introduction to Compiler Construction

A Continuation based Programming Language for Embedded Systems

Regular Expressions. Agenda for Today. Grammar for a Tiny Language. Programming Language Specifications

What are the characteristics of Object Oriented programming language?

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

CS 415 Midterm Exam Spring SOLUTION

CST-402(T): Language Processors

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

Concepts of Programming Languages

Lexical Analysis. Lecture 3-4

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

Outline. Programming Languages 1/16/18 PROGRAMMING LANGUAGE FOUNDATIONS AND HISTORY. Current

Introduction to Compiler Construction

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

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

COP 3402 Systems Software Syntax Analysis (Parser)

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

Compiler Construction D7011E

Compiler Design. Computer Science & Information Technology (CS) Rank under AIR 100

Transcription:

Introduction to Programming Languages and Compilers CS164 11:00-12:30 TT 10 Evans 1

ICOM 4036 - Outline Prontuario Course Outline Brief History of PLs Programming Language Design Criteria Programming Language Implementation 2

Programming Assignments Highlights Implement a compiler in four phases Teams of two students (Choose your partner!) Development in C++ or Java for Linux Use Academic Computer Center (Amadeus) Can work on your personal computers Source Language = COOL (UC Berkeley CS164) Target Language = MIPS Assembly (SPIM) Each project must have some unique feature chosen by the development team Each compiler must pass a minimal set of tests in order to pass the class. 3

Homework for next week Read the COOL Reference Manual http://www-inst.eecs.berkeley.edu/~cs164/public_html-sp03 Choose your partner notify me by email Choose your development language C++ or Java Read the Flex (C++) or JLex (Java) manual http://inst.eecs.berkeley.edu/~cs164/public_html-sp03/documentation.html 4

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

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 wks! 2 hrs) 6

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 FORTRAN I 7

History of Ideas: Abstraction Abstraction = detached from concrete details Abstraction necessary to build software systems Modes of abstraction Via languages/compilers: Higher-level code, few machine dependencies Via subroutines Abstract interface to behavior Via modules Export interfaces; hide implementation Via abstract data types Bundle data with its operations 8

History of Ideas: Types Originally, few types FORTRAN: scalars, arrays LISP: no static type distinctions Realization: Types help Allow the programmer to express abstraction Allow the compiler to check against many frequent errors Sometimes to the point that programs are guaranteed safe More recently Lots of interest in types Experiments with various forms of parameterization Best developed in functional programming 9

History of Ideas: Reuse Reuse = exploits common patterns in software systems Goal: mass-produced software components Reuse is difficult Two popular approaches (combined in C++) Type parameterization (List(int), List(double)) Classes and inheritance: C++ derived classes Inheritance allows Specialization of existing abstraction Extension, modification, hiding behavior 10

Programming Language Economics 101 Languages are adopted to fill a void Enable a previously difficult/impossible application Orthogonal to language design quality (almost) Programmer training is the dominant cost Languages with many users are replaced rarely Popular languages become ossified But easy to start in a new niche... 11

Why So Many Languages? Application domains have distinctive (and conflicting) needs Examples: Scientific Computing: high performance Business: report generation Artificial intelligence: symbolic computation Systems programming: low-level access Special purpose languages 12

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 13

Language Evaluation Criteria Characteristic Criteria Readability Writeability Reliability Simplicity * * * Data types * * * Syntax design * * * Abstraction * * Expressivity * * Type checking * Exception handling * 14

Why Study Languages and Compilers? Increase capacity of expression Improve understanding of program behavior Increase ability to learn new languages Learn to build a large and reliable system See many basic CS concepts at work 15

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 16

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 17

Language Implementations Batch compilation systems dominate E.g., gcc Some languages are primarily interpreted E.g., Java bytecode Some environments (Lisp) provide both Interpreter for development Compiler for production 18

The Structure of a Compiler 1. Lexical Analysis 2. Parsing 3. Semantic Analysis 4. Optimization 5. Code Generation The first 3, at least, can be understood by analogy to how humans comprehend English. 19

Lexical Analysis First step: 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) 20

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 21

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, ; 22

Parsing Once words are understood, the next step is to understand sentence structure Parsing = Diagramming Sentences The diagram is a tree 23

Diagramming a Sentence This line is a longer sentence article noun verb article adjective noun subject object sentence 24

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 assign then-stmt assign else-stmt if-then-else 25

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

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? 27

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

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

Examples of Semantic Checks in PLs Variables defined before used Variables defined once Type compatibility Correct arguments to functions Constants are not modified Inheritance hierarchy has no cycles 30

Optimization No strong counterpart in English, but akin to editing Automatically modify programs so that they Run faster Use less memory In general, conserve some resource The project has no optimization component 31

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

Examples of common optimizations in PLs Dead code elimination Evaluating repeated expressions only once Replace expressions by simpler equivalent expressions Evaluate expressions at compile time Inline procedures Move constant expressions out of loops 33

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

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 1 IL IL s generally ordered in descending level of abstraction Highest is source Lowest is assembly 35

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

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 37

Compilers Today The overall structure of almost every compiler adheres to our outline The proportions have changed since FORTRAN Early: lexing, parsing most complex, expensive Today: optimization dominates all other phases, lexing and parsing are cheap 38

Trends in Compilation Compilation for speed is less interesting. But: scientific programs advanced processors (Digital Signal Processors, advanced speculative architectures) Ideas from compilation used for improving code reliability: memory safety detecting concurrency errors (data races)... 39