Language Translation A programming language processor is any system that manipulates programs expressed in a PL A source program in some source language.

Slides:



Advertisements
Similar presentations
Semantic Analysis Chapter 6. Two Flavors  Static (done during compile time) –C –Ada  Dynamic (done during run time) –LISP –Smalltalk  Optimization.
Advertisements

1 Languages and Compilers (SProg og Oversættere) Code Generation.
Names and Bindings.
Chapter 5: Elementary Data Types Properties of types and objects –Data objects, variables and constants –Data types –Declarations –Type checking –Assignment.
UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering CSCE 531 Compiler Construction Ch. 3: Compilation Spring 2007 Marco Valtorta.
UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering CSCE 330 Programming Language Structures Ch.2: Syntax and Semantics Fall 2005.
C. Varela; Adapted w/permission from S. Haridi and P. Van Roy1 Declarative Computation Model Defining practical programming languages Carlos Varela RPI.
PLLab, NTHU Cs2403 Programming Languages Implementation Issues Cs2403 Programming Language Spring 2005 Kun-Yuan Hsieh.
1 Languages and Compilers (SProg og Oversættere) Lecture 2 Bent Thomsen Department of Computer Science Aalborg University With acknowledgement to Norm.
Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 2nd edition Tucker and Noonan Chapter 2 Syntax A language that is simple to parse.
UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering CSCE 531 Compiler Construction Ch. 3: Compilation Spring 2008 Marco Valtorta.
Denotational Semantics Syntax-directed approach, generalization of attribute grammars: –Define context-free abstract syntax –Specify syntactic categories.
Programming Language Semantics Mooly SagivEran Yahav Schrirber 317Open space html://
Compiler Design Lexical Analysis Syntactical Analysis Semantic Analysis Optimization Code Generation.
Chapter 3 Program translation1 Chapt. 3 Language Translation Syntax and Semantics Translation phases Formal translation models.
Slide 1 Chapter 3 Attribute Grammars. Slide 2 Attribute Grammars Certain language structures cannot be described using EBNF. Attribute grammars are extensions.
Semantics with Applications Mooly Sagiv Schrirber html:// Textbooks:Winskel The.
Introduction and Syntax. Course objectives Discuss features of programming languages. Discuss how the features are implemented in a simple computer architecture.
UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering CSCE 531 Compiler Construction Ch.1 Spring 2010 Marco Valtorta
Syntax Analysis (Chapter 4) 1 Course Overview PART I: overview material 1Introduction 2Language processors (tombstone diagrams, bootstrapping) 3Architecture.
CSC 8310 Programming Languages Meeting 2 September 2/3, 2014.
Chapter 2 Syntax A language that is simple to parse for the compiler is also simple to parse for the human programmer. N. Wirth.
Chapter 8 High-Level Programming Languages (modified by Erin Chambers)
High level & Low level language High level programming languages are more structured, are closer to spoken language and are more intuitive than low level.
Syntax Analysis (Chapter 4) 1 Course Overview PART I: overview material 1Introduction 2Language processors (tombstone diagrams, bootstrapping) 3Architecture.
COP4020 Programming Languages
Languages and Compilers (SProg og Oversættere)
CSC3315 (Spring 2009)1 CSC 3315 Programming Languages Hamid Harroud School of Science and Engineering, Akhawayn University
Bindings and scope  Bindings and environments  Scope and block structure  Declarations Programming Languages 3 © 2012 David A Watt, University.
CS 326 Programming Languages, Concepts and Implementation Instructor: Mircea Nicolescu Lecture 2.
C H A P T E R TWO Syntax and Semantic.
Languages and Compilers (SProg og Oversættere) Bent Thomsen Department of Computer Science Aalborg University.
TextBook Concepts of Programming Languages, Robert W. Sebesta, (10th edition), Addison-Wesley Publishing Company CSCI18 - Concepts of Programming languages.
Introduction (Chapter 1) 1 Course Overview PART I: overview material 1Introduction 2Language processors (tombstone diagrams, bootstrapping) 3Architecture.
1 Programming Languages Fundamentals Cao Hoaøng Truï Khoa Coâng Ngheä Thoâng Tin Ñaïi Hoïc Baùch Khoa TP. HCM.
COP4020 Programming Languages Names, Scopes, and Bindings Prof. Xin Yuan.
1 Languages and Compilers (SProg og Oversættere) Bent Thomsen Department of Computer Science Aalborg University With acknowledgement to Norm Hutchinson.
Languages and Compilers (SProg og Oversættere) Bent Thomsen Department of Computer Science Aalborg University.
Introduction to Language Processing Technology Natawut Nupairoj, Ph.D. Department of Computer Engineering Chulalongkorn University.
Contextual Analysis (Chapter 5) 1 Course Overview PART I: overview material 1Introduction 2Language processors (tombstone diagrams, bootstrapping) 3Architecture.
Programming Languages
1 Language translation Programming Language Design and Implementation (4th Edition) by T. Pratt and M. Zelkowitz Prentice Hall, 2001 Sections
LESSON 04.
The Model of Compilation Natawut Nupairoj, Ph.D. Department of Computer Engineering Chulalongkorn University.
The Interpreter Pattern (Behavioral) ©SoftMoore ConsultingSlide 1.
 Fall Chart 2  Translators and Compilers  Textbook o Programming Language Processors in Java, Authors: David A. Watts & Deryck F. Brown, 2000,
Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 2nd edition Tucker and Noonan Chapter 2 Syntax A language that is simple to parse.
Overview of Previous Lesson(s) Over View 3 Model of a Compiler Front End.
1 Languages and Compilers (SProg og Oversættere) Semantic Analysis.
UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering CSCE 330 Programming Language Structures Operational Semantics (Slides mainly.
COP4020 Programming Languages Introduction Prof. Robert van Engelen (modified by Prof. Em. Chris Lacher)
Presented by : A best website designer company. Chapter 1 Introduction Prof Chung. 1.
Programming Languages Concepts Chapter 1: Programming Languages Concepts Lecture # 4.
Software Engineering Algorithms, Compilers, & Lifecycle.
Chapter 3 – Describing Syntax CSCE 343. Syntax vs. Semantics Syntax: The form or structure of the expressions, statements, and program units. Semantics:
Compilers Principles, Techniques, & Tools Taught by Jing Zhang
Chapter 3 – Describing Syntax
Describing Syntax and Semantics
Chapter 1 Introduction.
CS 326 Programming Languages, Concepts and Implementation
System Software Unit-1 (Language Processors) A TOY Compiler
Chapter 3 – Describing Syntax
Chapter 1 Introduction.
Semantic Analysis Chapter 6.
COP4020 Programming Languages
Lecture 4: Lexical Analysis & Chomsky Hierarchy
CSCE 330 Programming Language Structures Ch.2: Syntax and Semantics
Programming Languages 2nd edition Tucker and Noonan
Semantic Analysis Chapter 6.
Compilers Principles, Techniques, & Tools Taught by Jing Zhang
Presentation transcript:

Language Translation A programming language processor is any system that manipulates programs expressed in a PL A source program in some source language is translated into an object program in some target language Translators are assemblers or compilers An assembler translates from assembly language to machine language A compiler translates from a high-level language into a low-level language – the compiler is written in its implementation language An interpreter is a program that accepts a source program and runs it immediately An interpretive compiler translates a source program into an intermediate language, and the resulting object program is then executed by an interpreter

Example of Language Translators Compilers for Fortran, COBOL, C, C++ Interpretive compilers for Pascal (P-Code), Prolog (Warren Abstract Machine) and Java (Java Virtual Machine) Interpreters for APL, Scheme, Haskell, Python, and (early) LISP

Levels of Programming Languages High-level program class Triangle {... float surface() return b*h/2; } class Triangle {... float surface() return b*h/2; } Low-level program (in an assembly language) LOAD r1,b LOAD r2,h MUL r1,r2 DIV r1,#2 RET LOAD r1,b LOAD r2,h MUL r1,r2 DIV r1,#2 RET Executable machine code ( a string of bits)

Machine Code and Assembly A machine code program (or just “machine code”) is a sequence of instructions, where each instruction is a bit string that is interpreted by the machine to perform an operation The process of translating each instruction into machine code is called assembly Machine languages and assembly languages are low-level languages However, the notion of low- and high-level is relative

Features of High-Level Languages Expressions Data types Control structures Declarations Control abstraction (via routines) Data abstraction (via encapsulation)

Declarations, Expressions, Commands A command is executed to update variables and perform I/O An expression is evaluated to yield a value A declaration is elaborated (at compile time) to produce bindings. It may also have the side effect of allocating and initializing variables

Language Translation A source program in some source language is translated into an object program in some target language An assembler translates from assembly language to machine language A compiler translates from a high-level language into a low-level language – the compiler is written in its implementation language An interpreter is a program that accepts a source program and runs it immediately An interpretive compiler translates a source program into an intermediate language, and the resulting object program is then executed by an interpreter

Programming in the Large

Terminology Translatorinputoutput source program object program is expressed in the source language is expressed in the implementation language is expressed in the target language Q: Which programming languages play a role in this picture? A: All of them!

Syntax Specification Syntax is specified using Context Free Grammars: – A finite set of terminal symbols – A finite set of non-terminal symbols – A start symbol – A finite set of production rules Usually CFG are written in Backus-Naur Form (or Backus Normal Form) or BNF notation. A production rule in BNF notation is written as: N ::=  where N is a non terminal and  a sequence of terminals and non-terminals N ::=  is an abbreviation for several rules with N on the left-hand side.

Syntax Specification A CFG defines a set of strings. This is called the language of the CFG. Example: Start ::= Letter | Start Letter | Start Digit Letter ::= a | b | c | d |... | z Digit ::= 0 | 1 | 2 |... | 9 Q: What is the “language” defined by this grammar? Note: see the first correction on the errata sheet for the textbook concerning the set of letters in Mini- Triangle.

Syntax of Mini Triangle Mini triangle is a very simple Pascal-like programming language. An example program: !This is a comment. let const m ~ 7; var n in begin n := 2 * m * m ; putint(n) end !This is a comment. let const m ~ 7; var n in begin n := 2 * m * m ; putint(n) end Declarations Command Expression

Syntax of Mini Triangle Program ::= single-Command single-Command ::= V-name := Expression | Identifier ( Expression ) | if Expression then single-Command else single-Command | while Expression do single-Command | let Declaration in single-Command | begin Command end Command ::= single-Command | Command ; single-Command... Program ::= single-Command single-Command ::= V-name := Expression | Identifier ( Expression ) | if Expression then single-Command else single-Command | while Expression do single-Command | let Declaration in single-Command | begin Command end Command ::= single-Command | Command ; single-Command...

Syntax of Mini Triangle (continued) Expression ::= primary-Expression | Expression Operator primary-Expression primary-Expression ::= Integer-Literal | V-name | Operator primary-Expression | ( Expression ) V-name ::= Identifier Identifier ::= Letter | Identifier Letter | Identifier Digit Integer-Literal ::= Digit | Integer-Literal Digit Operator ::= + | - | * | / | | = Expression ::= primary-Expression | Expression Operator primary-Expression primary-Expression ::= Integer-Literal | V-name | Operator primary-Expression | ( Expression ) V-name ::= Identifier Identifier ::= Letter | Identifier Letter | Identifier Digit Integer-Literal ::= Digit | Integer-Literal Digit Operator ::= + | - | * | / | | =

Syntax of Mini Triangle Declaration ::= single-Declaration | Declaration ; single-Declaration single-Declaration ::= const Identifier ~ Expression | var Identifier : Type-denoter Type-denoter ::= Identifier Declaration ::= single-Declaration | Declaration ; single-Declaration single-Declaration ::= const Identifier ~ Expression | var Identifier : Type-denoter Type-denoter ::= Identifier Comment ::= ! CommentLine eol CommentLine ::= Graphic CommentLine Graphic ::= any printable character or space Comment ::= ! CommentLine eol CommentLine ::= Graphic CommentLine Graphic ::= any printable character or space

Syntax Trees A syntax tree is an ordered labeled tree such that: a) terminal nodes (leaf nodes) are labeled by terminal symbols b) non-terminal nodes (internal nodes) are labeled by non terminal symbols. c) each non-terminal node labeled by N has children X 1,X 2,...X n (in this order) such that N := X 1,X 2,...X n is a production.

Syntax Trees Example: Expression V-name primary-Exp. Expression Ident d + primary-Exp OpInt-Lit 10* Op V-name primary-Exp. Ident d Expression ::= Expression Op primary-Exp

Contextual Constraints Syntax rules alone are not enough to specify the format of well-formed programs. Example 1: let const m~2 in m + x Example 2: let const m~2 ; var n:Boolean in begin n := m<4; n := n+1 end Undefined! Scope Rules Type error! Type Rules

Scope Rules Scope rules regulate visibility of identifiers. They relate every applied occurrence of an identifier to a binding occurrence Example 1 let const m~2; var r:Integer in r := 10*m Binding occurence Applied occurence Terminology: Static binding vs. dynamic binding Example 2: let const m~2 in m + x ?

Type Rules Type rules regulate the expected types of arguments and types of returned values for the operations of a language. Examples Terminology: Static typing vs. dynamic typing Type rule of < : E1 < E2 is type correct and of type Boolean if E1 and E2 are type correct and of type Integer Type rule of while : while E do C is type correct if E is of type Boolean and C is type correct

Semantics Specification of semantics is concerned with specifying the “meaning” of well-formed programs. Terminology: Expressions are evaluated and yield values (and may or may not perform side effects) Commands are executed and perform side effects. Declarations are elaborated to produce bindings Side effects: change the values of variables perform input/output

Semantics Example: The (informally specified) semantics of commands in mini Triangle. Commands are executed to update variables and/or perform input/output. The assignment command V := E is executed as follows: first the expression E is evaluated to yield a value v then v is assigned to the variable named V The sequential command C1;C2 is executed as follows: first the command C1 is executed then the command C2 is executed, Etc.

Semantics Example: The semantics of expressions. An expression is evaluated to yield a value. An (integer literal expression) IL yields the integer value of IL The (variable or constant name) expression V yields the value of the variable or constant named V The (binary operation) expression E1 O E2 yields the value obtained by applying the binary operation O to the values yielded by (the evaluation of) expressions E1 and E2 etc.

Semantics Example: The semantics of declarations. A declaration is elaborated to produce bindings. It may also have the side effect of allocating (memory for) variables. The constant declaration const I~E is elaborated by binding the identifier value I to the value yielded by E The constant declaration var I:T is elaborated by binding I to a newly allocated variable, whose initial value is undefined. The variable will be deallocated on exit from the let block containing the declaration. The sequential declaration D1;D2 is elaborated by elaborating D1 followed by D2 combining the bindings produced by both. D2 is elaborated in the environment of the sequential declaration overlaid by the bindings produced by D1