EECS 321 Programming Languages

Similar documents
EECS 395 Programming Languages

EECS 321 Programming Languages

CMSC 330: Organization of Programming Languages

UNIT I Programming Language Syntax and semantics. Kainjan Sanghavi

COLLEGE OF ENGINEERING, NASHIK. LANGUAGE TRANSLATOR

Last time. What are compilers? Phases of a compiler. Scanner. Parser. Semantic Routines. Optimizer. Code Generation. Sunday, August 29, 2010

EECS 6083 Intro to Parsing Context Free Grammars

Semantics via Syntax. f (4) = if define f (x) =2 x + 55.

CS152 Programming Language Paradigms Prof. Tom Austin, Fall Syntax & Semantics, and Language Design Criteria

"Good" vs. "Bad" Expressions. ; interp-expr FAE... -> FAE-Value

CPS 506 Comparative Programming Languages. Syntax Specification

Chapter 3: Describing Syntax and Semantics. Introduction Formal methods of describing syntax (BNF)

CSE 12 Abstract Syntax Trees

Programming Language Definition. Regular Expressions

COP 3402 Systems Software Syntax Analysis (Parser)

Welcome to CS 135 (Winter 2018)

Introduction to Parsing

Lecture 10 Parsing 10.1

Syntax. A. Bellaachia Page: 1

Chapter 3: CONTEXT-FREE GRAMMARS AND PARSING Part 1

Lecture 4: Syntax Specification

Higher-Order Functions (Part I)

Context-Free Grammar (CFG)

Syntax. In Text: Chapter 3

CSCI312 Principles of Programming Languages!

Defining syntax using CFGs

EDAN65: Compilers, Lecture 04 Grammar transformations: Eliminating ambiguities, adapting to LL parsing. Görel Hedin Revised:

F453 Module 7: Programming Techniques. 7.2: Methods for defining syntax

Theoretical Part. Chapter one:- - What are the Phases of compiler? Answer:

The syntax and semantics of Beginning Student

The syntax and semantics of Beginning Student

Advanced Topics in Software Engineering (02265) Ekkart Kindler

A programming language requires two major definitions A simple one pass compiler

CS415 Compilers. Syntax Analysis. These slides are based on slides copyrighted by Keith Cooper, Ken Kennedy & Linda Torczon at Rice University

Today. Elements of Programming Languages. Concrete vs. abstract syntax. L Arith. Lecture 1: Abstract syntax

Part 1: Numerical integration reloaded

Examination in Compilers, EDAN65

Creating a Matching Activity using Pictures from the Internet

Outline CS412/413. Administrivia. Review. Grammars. Left vs. Right Recursion. More tips forll(1) grammars Bottom-up parsing LR(0) parser construction

Inside PHP Tom OSCON th July, 2012

Parsing II Top-down parsing. Comp 412

Compiler Construction 1. Introduction. Oscar Nierstrasz

22c:111 Programming Language Concepts. Fall Syntax III

Wednesday, September 9, 15. Parsers

Parsers. What is a parser. Languages. Agenda. Terminology. Languages. A parser has two jobs:

CS 415 Midterm Exam Spring 2002

CMSC 330: Organization of Programming Languages. Context Free Grammars

COP 3402 Systems Software Top Down Parsing (Recursive Descent)

Chapter 3. Describing Syntax and Semantics

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

Exercises Software Development I. 02 Algorithm Testing & Language Description Manual inspection, test plan, grammar, metasyntax notations (BNF, EBNF)

Introduction to Compilers

The Substitution Model

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

Two Problems. Programming Languages and Compilers (CS 421) Type Inference - Example. Type Inference - Outline. Type Inference - Example

Chapter 3 (part 3) Describing Syntax and Semantics

flex is not a bad tool to use for doing modest text transformations and for programs that collect statistics on input.

Building Compilers with Phoenix

Compiler Construction 1. Introduction. Oscar Nierstrasz

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

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

The design recipe. Readings: HtDP, sections 1-5. (ordering of topics is different in lectures, different examples will be used)

Welcome to CS 135 (Fall 2018) Themes of the course. Lectures. cs135/

Formal Languages and Grammars. Chapter 2: Sections 2.1 and 2.2

DSL vs. Library API Shootout

Scientific Computing: Lecture 1

CMSC 330: Organization of Programming Languages. Architecture of Compilers, Interpreters

CSE 351. Introduction & Course Tools

Chapter 3. Describing Syntax and Semantics

Formal Semantics. Prof. Clarkson Fall Today s music: Down to Earth by Peter Gabriel from the WALL-E soundtrack

Preparing for the ACW Languages & Compilers

Ray Pereda Unicon Technical Report UTR-03. February 25, Abstract

Chapter 3. Describing Syntax and Semantics ISBN

Chapter 3. Describing Syntax and Semantics

Survey of Programming Languages Dr. R. M. Siegfried 407 Science (516) (not for homework submission)

Memory and Arrays. CSE 333 Spring Instructor: Justin Hsia

CS 3304 Comparative Languages. Lecture 1: Introduction

CSC172 LAB. THE SCHEME OF THINGS (a bit of a racket)

Welcome to CS 115 (Winter 2018)

CS115 - Module 10 - General Trees

Welcome to CS 115 (Winter 2019)

CS558 Programming Languages

(Provisional) Lecture 22: Rackette Overview, Binary Tree Analysis 10:00 AM, Oct 27, 2017

Architecture of Compilers, Interpreters. CMSC 330: Organization of Programming Languages. Front End Scanner and Parser. Implementing the Front End

CSE 374 Programming Concepts & Tools. Brandon Myers Winter 2015 Lecture 11 gdb and Debugging (Thanks to Hal Perkins)

CSE 413 Programming Languages & Implementation. Hal Perkins Winter 2019 Grammars, Scanners & Regular Expressions

Programming Languages Third Edition

Dr. D.M. Akbar Hussain

Introduction to Data Management CSE 344. Lecture 1: Introduction

Welcome to CS 135 (Winter 2018) Themes of the course. Lectures. cs135/ Instructors: Sandy Graham, Paul Nijjar

Syntax/semantics. Program <> program execution Compiler/interpreter Syntax Grammars Syntax diagrams Automata/State Machines Scanning/Parsing

Part 5 Program Analysis Principles and Techniques

Principles of Programming Languages COMP251: Syntax and Grammars

The Substitution Model. Nate Foster Spring 2018

Introduction to Linux. Fundamentals of Computer Science

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

Object-Oriented Design Lecture 7 CSU 370 Fall 2008 (Pucella) Friday, Oct 3, 2008

SOFTWARE ARCHITECTURE 5. COMPILER

CSCI 334: Principles of Programming Languages. Lecture 2: Lisp Wrapup & Fundamentals. Higher-Order Functions. Activity

Project 2: Scheme Lexer and Parser

Transcription:

EECS 321 Programming Languages Winter 2010 Instructor: Robby Findler

Course Details http://www.eecs.northwestern.edu/~robby/ courses/321-2011-winter/ (or google findler and follow the links)

Programming Language Concepts This course teaches concepts in two ways: By implementing interpreters new concept! new interpreter By using Racket and variants we don t assume that you already know Racket

Interpreters vs Compilers An interpreter takes a program and produces a result DrRacket x86 processor desktop calculator bash Algebra student

Interpreters vs Compilers An interpreter takes a program and produces a result DrRacket x86 processor desktop calculator bash Algebra student A compiler takes a program and produces a program DrRacket x86 processor gcc javac

Interpreters vs Compilers An interpreter takes a program and produces a result DrRacket x86 processor desktop calculator bash Algebra student Good for understanding program behavior, easy to implement A compiler takes a program and produces a program DrRacket x86 processor gcc javac Good for speed, more complex (come back next quarter)

Interpreters vs Compilers An interpreter takes a program and produces a result DrRacket x86 processor desktop calculator bash Algebra student Good for understanding program behavior, easy to implement A compiler takes a program and produces a program DrRacket x86 processor gcc javac Good for speed, more complex (come back next quarter) So, what s a program?

A Grammar for Algebra Programs A grammar of Algebra in BNF (Backus-Naur Form): prog ::= defn * expr defn ::= id ( id ) = expr expr ::= ( expr + expr ) ( expr - expr ) id ( expr ) id num id ::= a variable name: f, x, y, z,... num ::= a number: 1, 42, 17,...

A Grammar for Algebra Programs A grammar of Algebra in BNF (Backus-Naur Form): prog ::= defn * expr defn ::= id ( id ) = expr expr ::= ( expr + expr ) ( expr - expr ) id ( expr ) id num id ::= a variable name: f, x, y, z,... num ::= a number: 1, 42, 17,... Each meta-variable, such as prog, defines a set

Using a BNF Grammar id ::= a variable name: f, x, y, z,... num ::= a number: 1, 42, 17,... The set id is the set of all variable names The set num is the set of all numbers

Using a BNF Grammar id ::= a variable name: f, x, y, z,... num ::= a number: 1, 42, 17,... The set id is the set of all variable names The set num is the set of all numbers To make an example member of num, simply pick an element from the set

Using a BNF Grammar id ::= a variable name: f, x, y, z,... num ::= a number: 1, 42, 17,... The set id is the set of all variable names The set num is the set of all numbers To make an example member of num, simply pick an element from the set 2 " num 298 " num

Using a BNF Grammar expr ::= ( expr + expr ) ( expr - expr ) id ( expr ) id num The set expr is defined in terms of other sets

Using a BNF Grammar expr ::= ( expr + expr ) ( expr - expr ) id ( expr ) id num To make an example expr : choose one case in the grammar pick an example for each meta-variable combine the examples with literal text

Using a BNF Grammar expr ::= ( expr + expr ) ( expr - expr ) id ( expr ) id num To make an example expr : choose one case in the grammar pick an example for each meta-variable combine the examples with literal text

Using a BNF Grammar expr ::= ( expr + expr ) ( expr - expr ) id ( expr ) id num To make an example expr : choose one case in the grammar pick an example for each meta-variable 7 " num combine the examples with literal text

Using a BNF Grammar expr ::= ( expr + expr ) ( expr - expr ) id ( expr ) id num To make an example expr : choose one case in the grammar pick an example for each meta-variable 7 " num combine the examples with literal text 7 " expr

Using a BNF Grammar expr ::= ( expr + expr ) ( expr - expr ) id ( expr ) id num To make an example expr : choose one case in the grammar pick an example for each meta-variable combine the examples with literal text

Using a BNF Grammar expr ::= ( expr + expr ) ( expr - expr ) id ( expr ) id num To make an example expr : choose one case in the grammar pick an example for each meta-variable f " id combine the examples with literal text

Using a BNF Grammar expr ::= ( expr + expr ) ( expr - expr ) id ( expr ) id num To make an example expr : choose one case in the grammar pick an example for each meta-variable f " id 7 " expr combine the examples with literal text

Using a BNF Grammar expr ::= ( expr + expr ) ( expr - expr ) id ( expr ) id num To make an example expr : choose one case in the grammar pick an example for each meta-variable f " id 7 " expr combine the examples with literal text f(7) " expr

Using a BNF Grammar expr ::= ( expr + expr ) ( expr - expr ) id ( expr ) id num To make an example expr : choose one case in the grammar pick an example for each meta-variable f " id f(7) " expr combine the examples with literal text

Using a BNF Grammar expr ::= ( expr + expr ) ( expr - expr ) id ( expr ) id num To make an example expr : choose one case in the grammar pick an example for each meta-variable f " id f(7) " expr combine the examples with literal text f(f(7)) " expr

Using a BNF Grammar prog ::= defn * expr defn ::= id ( id ) = expr f(x) = (x + 1) " defn

Using a BNF Grammar prog ::= defn * expr defn ::= id ( id ) = expr f(x) = (x + 1) " defn To make a prog pick some number of defn s (x + y) " prog f(x) = (x + 1) g(y) = f((y - 2)) g(7) " prog

Programming Language A programming language is defined by a grammar for programs rules for evaluating any program to produce a result

Programming Language A programming language is defined by a grammar for programs rules for evaluating any program to produce a result For example, Algebra evaluation is defined in terms of evaluation steps: (2 + (7-4)) # (2 + 3) # 5

Programming Language A programming language is defined by a grammar for programs rules for evaluating any program to produce a result For example, Algebra evaluation is defined in terms of evaluation steps: f(x) = (x + 1) f(10) # (10 + 1) # 11

Evaluation Evaluation # is defined by a set of pattern-matching rules: (2 + (7-4)) # (2 + 3) due to the pattern rule... (7-4)... #... 3...

Evaluation Evaluation # is defined by a set of pattern-matching rules: f(x) = (x + 1) f(10) # (10 + 1) due to the pattern rule... id 1 ( id 2 ) = expr 1...... id 1 ( expr 2 )... #... expr 3... where expr 3 is expr 1 with id 2 replaced by expr 2

Rules for Evaluation Rule 1 - one pattern... id 1 ( id 2 ) = expr 1...... id 1 ( expr 2 )... #... expr 3... where expr 3 is expr 1 with id 2 replaced by expr 2

Rules for Evaluation Rule 1 - one pattern... id 1 ( id 2 ) = expr 1...... id 1 ( expr 2 )... #... expr 3... where expr 3 is expr 1 with id 2 replaced by expr 2 Rules 2 - $ special cases... (0 + 0)... #... 0...... (0-0)... #... 0...... (1 + 0)... #... 1...... (1-0)... #... 1...... (2 + 0)... #... 2...... (2-0)... #... 2... etc. etc.

Rules for Evaluation Rule 1 - one pattern... id 1 ( id 2 ) = expr 1...... id 1 ( expr 2 )... #... expr 3... where expr 3 is expr 1 with id 2 replaced by expr 2 Rules 2 - $ special cases... (0 + 0)... #... 0...... (0-0)... #... 0...... (1 + 0)... #... 1...... (1-0)... #... 1...... (2 + 0)... #... 2...... (2-0)... #... 2... etc. etc. When the interpreter is a program instead of an Algebra student, the rules look a little different

HW 1 On the course web page: Write an interpreter for a small language of string manipulations Assignment is due Friday