Context Analysis. Mooly Sagiv. html://
|
|
- Jennifer Banks
- 6 years ago
- Views:
Transcription
1 Context Analysis Mooly Sagiv html:// 1
2 Short Decaf Program Interface not declared class MyClass implements MyInterface { string myinteger; void dosomething() { int[] x = new string; Type mismatch x[5] = myinteger * y ; y is undefined } Can t multiple integers void dosomething() { Can t redefine functions } int fibonacci(int n) { return dosomething() + fibonacci(n 1); } Can t add void } 2
3 Outline What is Context (Context) Analysis Why is it needed? Scopes and type checking for imperative languages (Chapter 6) Attribute grammars (Chapter 3) 3
4 Context Analysis Requirements related to the context in which a construct occurs Context sensitive requirements - cannot be specified using a context free grammar (Context handling) Requires complicated and unnatural context free grammars Guides subsequent phases 4
5 Basic Compiler Phases Source program (string) Symbol Table Front-End lexical analysis Tokens syntax analysis Abstract syntax tree context analysis Back-End Fin. Assembly 5
6 Example Context Condition In C break statements can only occur inside switch or loop statements 6
7 Stm Exp; Partial Grammar for C Stm if (Exp) Stm Stm if (Exp) Stm else Stm Stm while (Exp) do Stm StList StList Stm StList Stm break; Stm {StList } 7
8 Refined Grammar for C Stm Exp; Stm if (Exp) Stm Stm if (Exp) Stm else Stm Stm while (Exp) do LStm Stm {StList } StList StList Stm StList LStm Exp; LStm if (Exp) LStm LStm if (Exp) LStm else LStm LStm while (Exp) do LStm LStList LStList LStm LStm {LStList } LStm break; LStList 8
9 A Possible Abstract Syntax for C Stmt Exp (Exp) Stmt Stmt (SeqStmt) Exp Stmt Stmt (IfStmt) Exp Stmt (WhileStmt) (BreakSt) 9
10 A Possible Abstract Syntax for C package Absyn; abstract public class Absyn { public int pos ;} class Exp extends Absyn { }; class Stmt extends Absyn {} ; class SeqStmt extends Stmt { public Stmt fstst; public Stmt secondst; SeqStmt(Stmt s1, Stmt s2) { fstst = s1; secondst s2 ; } } class IfStmt extends Stmt { public Exp exp; public Stmt thenst; public Stmt elsest; IfStmt(Exp e, Stmt s1, Stmt s2) { exp = e; thenst = s1; elsest s2 ; } } class WhileStmt extends Stmt {public Exp exp; public Stmt body; WhileSt(Exp e; Stmt s) { exp =e ; body = s; } class BreakSt extends Stmt {}; 10
11 Partial CUP Specification... %% stm::= IF ( exp: e ) stm:s {: RESULT = new IfStm(e, s, null) ; :} IF ( exp: e ) stm:s1 ELSE stm: s2 {: RESULT = new IfStm(e, s1, s2) ; :} WHILE ( exp: e ) stm: s {: RESULT= new WhileStm(e, s); :} { s: stmlist } {: RESULT = s; :} BREAK `;' {: RESULT = new BreakStm(); :} ; stmlist ::= stmlist:s1 stmt:s2 {: RESULT = new SeqStm(s1, s2) ; :} /* empty */ {: RESULT = null ; :} 11
12 A Context Check (on the abstract syntax tree) static void checkbreak(stmt st) { if (st instanceof SeqSt) { SeqSt seqst = (SeqSt) st; checkbreak(seqst.fstst); checkbreak(seqst.secondst); } else if (st instanceof IfSt) { IfSt ifst = (IfSt) st; checkbreak(ifst.thenst); checkbreak(ifst elsest); } else if (st instanceof WhileSt) ; // skip else if (st instanceof BreakeSt) { System.error.println( Break must be enclosed within a loop. st.pos); } } 12
13 Syntax Directed Solution parser code {: public int loop_count = 0 ; :} stm : := exp ; IF ( exp ) stm IF ( exp ) stm ELSE stm WHILE ( exp ) m stm {: loop_count--; :} { stmlist } BREAK ; {: if (loop_count == 0) system.error.println( Break must be enclosed within a loop ); :} ; stmlist ::= stmlist st /* empty */ ; m ::= /* empty */ {: loop_count++ ; :} ; 13
14 Problems with Syntax Directed Translations Grammar specification may be tedious (e.g., to achieve LALR(1)) May need to rewrite the grammar to incorporate different Contexts Modularity is impossible to achieve Some programming languages allow forward declarations (Algol, ML and Java) 14
15 Example Context Condition: Scope Rules Variables must be defined within scope Dynamic vs. Static Scope rules Cannot be coded using a context free grammar 15
16 Dynamic vs. Static Scope Rules procedure p; var x: integer procedure q ; begin { q } x end { q }; procedure r ; var x: integer begin { r } q ; end; { r } begin { p } q ; r ; end { p } 16
17 Example Context Condition In Pascal Types in assignment must be compatible ' 17
18 Stm id Assign Exp Exp IntConst Exp RealConst Exp Exp + Exp Exp Exp -Exp Exp ( Exp ) Partial Grammar for Pascal 18
19 Refined Grammar for Pascal Stm RealId Assign RealExp Stm IntExpAssign IntExp Stm RealId Assign IntExp RealExp RealConst RealIntExp RealId RealExp RealExp + RealExp RealExp RealExp + IntExp RealExp IntExp + RealExp RealExp RealExp -RealExp RealExp RealExp -RealExp RealExp RealExp -IntExp RealExp IntExp -RealExp RealExp ( RealExp ) IntExp IntConst IntExp IntId IntExp IntExp + IntExp IntExp IntExp -IntExp IntExp ( IntExp ) 19
20 Syntax Directed Solution %%... stm : := id:i Assign exp:e {: compatass(lookup(i), e) ; :} ; exp ::= exp:e1 PLUS exp:e2 { : compatop(op.plus, e1, e2); RESULT = optype(op.plus, e1, e2); :} exp:e1 MINUS exp:e2 {: compatop(op.minus, e1, e2); RESULT = optype(op.minus, e1, e2); :} ID: i {: RESULT = lookup(i); :} INCONST {: RESULT = new TyInt() ; :} REALCONST {: RESULT = new TyReal(); :} ( exp: e ) {: RESULT = e ; :} ; 20
21 Type Checking (Imperative languages) Identify the type of every expression Usually one or two passes over the syntax tree Handle scope rules 21
22 Types What is a type Varies from language to language Consensus A set of values A set of operations Classes One instantiation of the modern notion of types 22
23 Why do we need type systems? Consider assembly code add $r1, $r2, $r3 What are the types of $r1, $r2, $r3? 23
24 Types and Operations Certain operations are legal for values of each type It does not make sense to add a function pointer and an integer in C It does make sense to add two integers But both have the same assembly language implementation! 24
25 Type Systems A language s type system specifies which operations are valid for which types The goal of type checking is to ensure that operations are used with the correct types Enforces intended interpretation of values because nothing else will! The goal of type inference is to infer a unique type for every valid expression 25
26 Type Checking Overview Three kinds of languages Statically typed: (Almost) all checking of types is done as part of compilation Context Analysis C, Java, ML Dynamically typed: Almost all checking of types is done as part of program execution Code generation Scheme, Python Untyped No type checking (Machine Code) 26
27 Type Wars Competing views on static vs. dynamic typing Static typing proponents say: Static checking catches many programming errors Prove properties of your code Avoids the overhead of runtime type checks Dynamic typing proponents say Static type systems are restrictive Rapid prototyping difficult with type systems Complicates the programming language and the compiler Compiler optimizations can hide costs 27
28 Type Wars (cont.) In practice, most code is written in statically typed languages with escape mechanisms Unsafe casts in C Java union in C It is debatable whether this compromise represents the best or worst of both worlds 28
29 Soundness of type systems For every expression e, for every value v of e at runtime v val(type(e)) The type may actually describe more values The rules can reject logically correct programs Becomes more complicated with subtyping (inheritance) 29
30 Issues in Context Analysis Implementation Name Resolution Type Checking Type Equivalence Type Coercions Casts Polymorphism Type Constructors 30
31 Name Resolution (Identification) Connect applied occurrences of an identifier/operator to its defining occurrence month: Integer RANGE [1..12]; month := 1 while month <> 12 do print_string(month_name[month]); month:= month +1; done; 31
32 Name Resolution (Identification) Connect applied occurrences of an identifier/operator to its defining occurrence Forward declarations Separate name spaces struct one_int { int i ; } i; i.i = 3; Scope rules 32
33 A Simple Implementation A separate table per scope/name space Record properties of identifiers Create entries for defining occurrences Search for entries for applied occurrences Create table per scope enter Remove table per scope enter Expensive search 33
34 Example void roate(double angle) { } void paint(int left, int right) { Shade matt, signal; { Counter right; wrong ; } level wrong signal right paint printf properties P P P P right P matt P left P rotate P signal null null } 0 scope stack P P 34
35 A Hash-Table Based Implementation A unified hashing table for all occurrences Separate entries for every identifier Ordered lists for different scopes Separate table maps scopes to the entries in the hash Used for ending scopes 35
36 Example void roate(double angle) { } void paint(int left, int right) { Shade matt, signal; { Counter right; wrong ; } hash table id.info name paint macro decl 1 P name signal macro null decl 3 P 0 P name right macro decl 4 P 2 P null null } 36
37 Example(cont.) void roate(double angle) { } void paint(int left, int right) { Shade matt, signal; { Counter right; wrong ; } } level scope stack id.info( wrong ) id.info( right ) id.info( signal ) id.info( mattt ) right 37 null
38 Overloading Some programming languages allow to resolve identifiers based on the context is different than Overloading user defined functions PUT(s: STRING) PUT(i: INTEGER) Type checking and name resolution interact May need several passes 38
39 Type Checking Non-trivial Construct a type table (separate name space) May require several passes 39
40 Type Equivalence Name equivalence TYPE t1 = ARRAY[Integer] of Integer; TYPE t2 = ARRAY[Integer] of Integer; TYPE t3 = ARRAY[Integer] of Integer; TYPE t4 = t3; Structural equivalence TYPE t5= RECORD {c: Integer ; p: Pointer to t5;} TYPE t6= RECORD {c: Integer ; p: Pointer to t6 ;} TYPE t7 = RECORD {c: Integer ; p : Pointer to RECORD {c: Integer ; p: Pointer to t5;}} 40
41 Simple Inference The type of an expression depends on the type of the arguments and the required result If e1 has type Integer and e2 has type Integer then the result has type Integer 41
42 Corner Cases What about power operator 42
43 Casts and Coercions The compiler may need to insert implicit conversions between types float x = 5; The programmer may need to insert explicit conversions between types 43
44 L-values vs. R-values Assignment x := exp is compiled into: Compute the address of x Compute the value of exp Store the value of exp into the address of x Generalization R-value Maps program expressions into Context values L-value Maps program expressions into locations Not always defined Java has no small L-values 44
45 A Simple Example int x = 5; Runtime memory x = x + 1;
46 A Simple Example int x = 5; lvalue(x)=17, rvalue(x) =5 lvalue(5)=, rvalue(5)=5 x = x + 1; Runtime memory 17 6 lvalue(x)=17, rvalue(x) =5 lvalue(5)=, rvalue(5)=5 46
47 Partial rules for Lvalue in C Type of e is pointer to T Type of e1 is integer lvalue(e2) exp lvalue rvalue id location(id) content(location(id)) const value(const) *e rvalue(e) content(rvalue(e)) &e2 lvalue(e2) e + e1 rvalue(e)+sizeof(t)*rvalue(e1) 47
48 Kind Checking Defined L-values in assignments expected found lvalue rvalue lvalue - deref rvalue error - 48
49 Type Constructors Record types Union Types Arrays 49
50 Routine Types Usually not considered as data The data can be a pointer to the generated code 50
51 Dynamic Checks Certain consistencies need to be checked at runtime in general But can be statically checked in many cases Examples Overflow Bad pointers 51
52 Summary Context analysis requires multiple traversals of the AST Is there a generalization? 52
53 Attribute Grammars [Knuth 68] Generalize syntax directed translations Every grammar symbol can have several attributes Every production is associated with evaluation rules Context rules The order of evaluation is automatically determined Dependency order Acyclicity Multiple visits of the abstract syntax tree 53
54 Summary Several ways to enforce Context correctness conditions syntax Regular expressions Context free grammars syntax directed traversals on the abstract syntax tree later compiler phases? Runtime? There are tools that automatically generate Context analyzer from specification (Based on attribute grammars) 62
Semantic Analysis. Outline. The role of semantic analysis in a compiler. Scope. Types. Where we are. The Compiler so far
Outline Semantic Analysis The role of semantic analysis in a compiler A laundry list of tasks Scope Static vs. Dynamic scoping Implementation: symbol tables Types Statically vs. Dynamically typed languages
More informationThe role of semantic analysis in a compiler
Semantic Analysis Outline The role of semantic analysis in a compiler A laundry list of tasks Scope Static vs. Dynamic scoping Implementation: symbol tables Types Static analyses that detect type errors
More informationSemantic Analysis. Outline. The role of semantic analysis in a compiler. Scope. Types. Where we are. The Compiler Front-End
Outline Semantic Analysis The role of semantic analysis in a compiler A laundry list of tasks Scope Static vs. Dynamic scoping Implementation: symbol tables Types Static analyses that detect type errors
More informationTypes. Type checking. Why Do We Need Type Systems? Types and Operations. What is a type? Consensus
Types Type checking What is a type? The notion varies from language to language Consensus A set of values A set of operations on those values Classes are one instantiation of the modern notion of type
More informationAnatomy 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 informationThe Compiler So Far. Lexical analysis Detects inputs with illegal tokens. Overview of Semantic Analysis
The Compiler So Far Overview of Semantic Analysis Adapted from Lectures by Profs. Alex Aiken and George Necula (UCB) Lexical analysis Detects inputs with illegal tokens Parsing Detects inputs with ill-formed
More informationSemantic 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 informationSEMANTIC ANALYSIS TYPES AND DECLARATIONS
SEMANTIC ANALYSIS CS 403: Type Checking Stefan D. Bruda Winter 2015 Parsing only verifies that the program consists of tokens arranged in a syntactically valid combination now we move to check whether
More informationThe Compiler So Far. CSC 4181 Compiler Construction. Semantic Analysis. Beyond Syntax. Goals of a Semantic Analyzer.
The Compiler So Far CSC 4181 Compiler Construction Scanner - Lexical analysis Detects inputs with illegal tokens e.g.: main 5 (); Parser - Syntactic analysis Detects inputs with ill-formed parse trees
More informationSyntax Errors; Static Semantics
Dealing with Syntax Errors Syntax Errors; Static Semantics Lecture 14 (from notes by R. Bodik) One purpose of the parser is to filter out errors that show up in parsing Later stages should not have to
More informationAnnouncements. Written Assignment 2 due today at 5:00PM. Programming Project 2 due Friday at 11:59PM. Please contact us with questions!
Type-Checking Announcements Written Assignment 2 due today at 5:00PM. Programming Project 2 due Friday at 11:59PM. Please contact us with questions! Stop by office hours! Email the staff list! Ask on Piazza!
More informationCompiler construction in4020 lecture 5
Compiler construction in4020 lecture 5 Semantic analysis Assignment #1 Chapter 6.1 Overview semantic analysis identification symbol tables type checking CS assignment yacc LLgen language grammar parser
More informationIntroduction to Programming Using Java (98-388)
Introduction to Programming Using Java (98-388) Understand Java fundamentals Describe the use of main in a Java application Signature of main, why it is static; how to consume an instance of your own class;
More informationCSCE 314 Programming Languages. Type System
CSCE 314 Programming Languages Type System Dr. Hyunyoung Lee 1 Names Names refer to different kinds of entities in programs, such as variables, functions, classes, templates, modules,.... Names can be
More informationCSE P 501 Compilers. Static Semantics Hal Perkins Winter /22/ Hal Perkins & UW CSE I-1
CSE P 501 Compilers Static Semantics Hal Perkins Winter 2008 1/22/2008 2002-08 Hal Perkins & UW CSE I-1 Agenda Static semantics Types Attribute grammars Representing types Symbol tables Note: this covers
More informationPierce Ch. 3, 8, 11, 15. Type Systems
Pierce Ch. 3, 8, 11, 15 Type Systems Goals Define the simple language of expressions A small subset of Lisp, with minor modifications Define the type system of this language Mathematical definition using
More informationCompiler construction 2002 week 5
Compiler construction in400 lecture 5 Koen Langendoen Delft University of Technology The Netherlands Overview semantic analysis identification symbol tables type checking assignment yacc LLgen language
More informationLecture 7: Type Systems and Symbol Tables. CS 540 George Mason University
Lecture 7: Type Systems and Symbol Tables CS 540 George Mason University Static Analysis Compilers examine code to find semantic problems. Easy: undeclared variables, tag matching Difficult: preventing
More informationTopics Covered Thus Far. CMSC 330: Organization of Programming Languages. Language Features Covered Thus Far. Programming Languages Revisited
CMSC 330: Organization of Programming Languages Type Systems, Names & Binding Topics Covered Thus Far Programming languages Syntax specification Regular expressions Context free grammars Implementation
More informationFUNCTIONAL AND LOGIC PROGRAMS
FUNCTIONAL AND LOGIC PROGRAMS Contents Language Specific Compilation Context Handling Identification Scope Overloading Imported Scope Type Checking Type table Type equivalence Coercions Casts and conversions
More informationCMSC 330: Organization of Programming Languages
CMSC 330: Organization of Programming Languages Type Systems, Names and Binding CMSC 330 - Spring 2013 1 Topics Covered Thus Far! Programming languages Ruby OCaml! Syntax specification Regular expressions
More informationScoping and Type Checking
#1 Scoping and Type Checking #2 #3 Recall: Review Sets Exist Ask me to look at your answers! Derivations and parse trees are closely related, but if we ask you to draw a parse tree you must draw the parse
More informationCS1622. 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 informationTypes and Type Inference
Types and Type Inference Mooly Sagiv Slides by Kathleen Fisher and John Mitchell Reading: Concepts in Programming Languages, Revised Chapter 6 - handout on the course homepage Outline General discussion
More informationType systems. Static typing
Type system A type is a set of values and operations on those values A language s type system specifies which operations are valid for a type The aim of type checking is to ensure that operations are used
More informationCompilers. Type checking. Yannis Smaragdakis, U. Athens (original slides by Sam
Compilers Type checking Yannis Smaragdakis, U. Athens (original slides by Sam Guyer@Tufts) Summary of parsing Parsing A solid foundation: context-free grammars A simple parser: LL(1) A more powerful parser:
More informationThe Decaf Language. 1 Lexical considerations
The Decaf Language In this course, we will write a compiler for a simple object-oriented programming language called Decaf. Decaf is a strongly-typed, object-oriented language with support for inheritance
More informationTopics Covered Thus Far CMSC 330: Organization of Programming Languages
Topics Covered Thus Far CMSC 330: Organization of Programming Languages Names & Binding, Type Systems Programming languages Ruby Ocaml Lambda calculus Syntax specification Regular expressions Context free
More informationData Types. Every program uses data, either explicitly or implicitly to arrive at a result.
Every program uses data, either explicitly or implicitly to arrive at a result. Data in a program is collected into data structures, and is manipulated by algorithms. Algorithms + Data Structures = Programs
More informationOverview of Semantic Analysis. Lecture 9
Overview of Semantic Analysis Lecture 9 1 Midterm Thursday In class SCPD students come to campus for the exam Material through lecture 8 Open note Laptops OK, but no internet or computation 2 Outline The
More informationStatic Semantics. Winter /3/ Hal Perkins & UW CSE I-1
CSE 401 Compilers Static Semantics Hal Perkins Winter 2009 2/3/2009 2002-09 Hal Perkins & UW CSE I-1 Agenda Static semantics Types Symbol tables General ideas for now; details later for MiniJava project
More informationCOS 320. Compiling Techniques
Topic 5: Types COS 320 Compiling Techniques Princeton University Spring 2016 Lennart Beringer 1 Types: potential benefits (I) 2 For programmers: help to eliminate common programming mistakes, particularly
More informationSemantic Analysis and Type Checking
Semantic Analysis and Type Checking The compilation process is driven by the syntactic structure of the program as discovered by the parser Semantic routines: interpret meaning of the program based on
More informationAbout Codefrux While the current trends around the world are based on the internet, mobile and its applications, we try to make the most out of it. As for us, we are a well established IT professionals
More informationFaculty 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 informationNames, Scopes, and Bindings II. Hwansoo Han
Names, Scopes, and Bindings II Hwansoo Han Scope Rules A scope is textual region where bindings are active A program section of maximal size Bindings become active at the entry No bindings change in the
More informationAnnouncements. Working on requirements this week Work on design, implementation. Types. Lecture 17 CS 169. Outline. Java Types
Announcements Types Working on requirements this week Work on design, implementation Lecture 17 CS 169 Prof. Brewer CS 169 Lecture 16 1 Prof. Brewer CS 169 Lecture 16 2 Outline Type concepts Where do types
More informationCA Compiler Construction
CA4003 - Compiler Construction Semantic Analysis David Sinclair Semantic Actions A compiler has to do more than just recognise if a sequence of characters forms a valid sentence in the language. It must
More information3.Constructors and Destructors. Develop cpp program to implement constructor and destructor.
3.Constructors and Destructors Develop cpp program to implement constructor and destructor. Constructors A constructor is a special member function whose task is to initialize the objects of its class.
More informationAbout Codefrux While the current trends around the world are based on the internet, mobile and its applications, we try to make the most out of it. As for us, we are a well established IT professionals
More informationStatic 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 informationFaculty 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 informationInformal Semantics of Data. semantic specification names (identifiers) attributes binding declarations scope rules visibility
Informal Semantics of Data semantic specification names (identifiers) attributes binding declarations scope rules visibility 1 Ways to Specify Semantics Standards Documents (Language Definition) Language
More informationSemantic analysis. Semantic analysis. What we ll cover. Type checking. Symbol tables. Symbol table entries
Susan Eggers 1 CSE 401 Semantic analysis Semantic analysis Final part of analysis half of compilation lexical analysis syntactic analysis semantic analysis Afterwards comes synthesis half of compilation
More informationSemantic Processing. Semantic Errors. Semantics - Part 1. Semantics - Part 1
Semantic Processing The Lexer and Parser Found lexical and syntax errors Built Abstract Syntax Tree Now!Find semantic errors.!build information about the program. Later!Generate IR Code!Optimize IR Code!Generate
More informationA Fast Review of C Essentials Part I
A Fast Review of C Essentials Part I Structural Programming by Z. Cihan TAYSI Outline Program development C Essentials Functions Variables & constants Names Formatting Comments Preprocessor Data types
More informationSE352b: Roadmap. SE352b Software Engineering Design Tools. W3: Programming Paradigms
SE352b Software Engineering Design Tools W3: Programming Paradigms Feb. 3, 2005 SE352b, ECE,UWO, Hamada Ghenniwa SE352b: Roadmap CASE Tools: Introduction System Programming Tools Programming Paradigms
More informationType Checking. Outline. General properties of type systems. Types in programming languages. Notation for type rules.
Outline Type Checking General properties of type systems Types in programming languages Notation for type rules Logical rules of inference Common type rules 2 Static Checking Refers to the compile-time
More informationCS 330 Lecture 18. Symbol table. C scope rules. Declarations. Chapter 5 Louden Outline
CS 0 Lecture 8 Chapter 5 Louden Outline The symbol table Static scoping vs dynamic scoping Symbol table Dictionary associates names to attributes In general: hash tables, tree and lists (assignment ) can
More informationType Bindings. Static Type Binding
Type Bindings Two key issues in binding (or associating) a type to an identifier: How is type binding specified? When does the type binding take place? N. Meng, S. Arthur 1 Static Type Binding An explicit
More informationVisitors. Move functionality
Visitors Compiler Construction Visitor pattern, Semantic analysis Lennart Andersson How to modularize in Java (or any other OO language) if we do not have access to AOP mechanisms? Revision 2011-02-08
More informationOutline. General properties of type systems. Types in programming languages. Notation for type rules. Common type rules. Logical rules of inference
Type Checking Outline General properties of type systems Types in programming languages Notation for type rules Logical rules of inference Common type rules 2 Static Checking Refers to the compile-time
More informationG Programming Languages Spring 2010 Lecture 6. Robert Grimm, New York University
G22.2110-001 Programming Languages Spring 2010 Lecture 6 Robert Grimm, New York University 1 Review Last week Function Languages Lambda Calculus SCHEME review 2 Outline Promises, promises, promises Types,
More informationShort Notes of CS201
#includes: Short Notes of CS201 The #include directive instructs the preprocessor to read and include a file into a source code file. The file name is typically enclosed with < and > if the file is a system
More informationThe Decaf language 1
The Decaf language 1 In this course, we will write a compiler for a simple object-oriented programming language called Decaf. Decaf is a strongly-typed, object-oriented language with support for inheritance
More informationCOMP 181. Agenda. Midterm topics. Today: type checking. Purpose of types. Type errors. Type checking
Agenda COMP 181 Type checking October 21, 2009 Next week OOPSLA: Object-oriented Programming Systems Languages and Applications One of the top PL conferences Monday (Oct 26 th ) In-class midterm Review
More informationStatic Checking and Type Systems
1 Static Checking and Type Systems Chapter 6 COP5621 Compiler Construction Copyright Robert van Engelen, Florida State University, 2007-2009 2 The Structure of our Compiler Revisited Character stream Lexical
More informationCS201 - Introduction to Programming Glossary By
CS201 - Introduction to Programming Glossary By #include : The #include directive instructs the preprocessor to read and include a file into a source code file. The file name is typically enclosed with
More informationPreface... (vii) CHAPTER 1 INTRODUCTION TO COMPUTERS
Contents Preface... (vii) CHAPTER 1 INTRODUCTION TO COMPUTERS 1.1. INTRODUCTION TO COMPUTERS... 1 1.2. HISTORY OF C & C++... 3 1.3. DESIGN, DEVELOPMENT AND EXECUTION OF A PROGRAM... 3 1.4 TESTING OF PROGRAMS...
More informationTypes and Type Inference
CS 242 2012 Types and Type Inference Notes modified from John Mitchell and Kathleen Fisher Reading: Concepts in Programming Languages, Revised Chapter 6 - handout on Web!! Outline General discussion of
More informationNOTE: Answer ANY FOUR of the following 6 sections:
A-PDF MERGER DEMO Philadelphia University Lecturer: Dr. Nadia Y. Yousif Coordinator: Dr. Nadia Y. Yousif Internal Examiner: Dr. Raad Fadhel Examination Paper... Programming Languages Paradigms (750321)
More informationThe Structure of a Syntax-Directed Compiler
Source Program (Character Stream) Scanner Tokens Parser Abstract Syntax Tree Type Checker (AST) Decorated AST Translator Intermediate Representation Symbol Tables Optimizer (IR) IR Code Generator Target
More informationCompiler construction
Compiler construction Martin Steffen March 13, 2017 Contents 1 Abstract 1 1.1 Symbol tables. 1 1.1.1 Introduction 1 1.1.2 Symbol table design and interface.. 2 1.1.3 Implementing symbol tables 3 1.1.4
More informationCSE450. 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 informationLecture 09: Data Abstraction ++ Parsing is the process of translating a sequence of characters (a string) into an abstract syntax tree.
Lecture 09: Data Abstraction ++ Parsing Parsing is the process of translating a sequence of characters (a string) into an abstract syntax tree. program text Parser AST Processor Compilers (and some interpreters)
More informationQUIZ. What is wrong with this code that uses default arguments?
QUIZ What is wrong with this code that uses default arguments? Solution The value of the default argument should be placed in either declaration or definition, not both! QUIZ What is wrong with this code
More informationLecture 16: Static Semantics Overview 1
Lecture 16: Static Semantics Overview 1 Lexical analysis Produces tokens Detects & eliminates illegal tokens Parsing Produces trees Detects & eliminates ill-formed parse trees Static semantic analysis
More informationA Short Summary of Javali
A Short Summary of Javali October 15, 2015 1 Introduction Javali is a simple language based on ideas found in languages like C++ or Java. Its purpose is to serve as the source language for a simple compiler
More information5. 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 informationCOP4020 Programming Languages. Compilers and Interpreters Robert van Engelen & Chris Lacher
COP4020 ming Languages Compilers and Interpreters Robert van Engelen & Chris Lacher Overview Common compiler and interpreter configurations Virtual machines Integrated development environments Compiler
More informationChapter 5. Names, Bindings, and Scopes
Chapter 5 Names, Bindings, and Scopes Chapter 5 Topics Introduction Names Variables The Concept of Binding Scope Scope and Lifetime Referencing Environments Named Constants 1-2 Introduction Imperative
More informationCSE 431S Type Checking. Washington University Spring 2013
CSE 431S Type Checking Washington University Spring 2013 Type Checking When are types checked? Statically at compile time Compiler does type checking during compilation Ideally eliminate runtime checks
More informationCompiler construction 2005 lecture 5
Compiler construction in400 lecture 5 Semantic analysis Assignment #1 Chapter 6.1 Overview semantic analysis identification symbol tables type checking CS assignment yacc LLgen language parser generator
More informationData Types (cont.) Administrative Issues. Academic Dishonesty. How do we detect plagiarism? Strongly Typed Languages. Type System
CSE 3302 Programming Languages Data Types (cont.) Chengkai Li Fall 2007 1 Administrative Issues Midterm Exam (in class) Tuesday, Oct. 16 th Schedule Change HW1 HW1 part1 & HW1 part2 Due at the same time,
More informationMotivation for typed languages
Motivation for typed languages Untyped Languages: perform any operation on any data. Example: Assembly movi 5 r0 // Move integer 5 (some representation) to r0 addf 3.6 r0 // Treat bit representation in
More informationConcepts Introduced in Chapter 6
Concepts Introduced in Chapter 6 types of intermediate code representations translation of declarations arithmetic expressions boolean expressions flow-of-control statements backpatching EECS 665 Compiler
More informationHANDLING NONLOCAL REFERENCES
SYMBOL TABLE A symbol table is a data structure kept by a translator that allows it to keep track of each declared name and its binding. Assume for now that each name is unique within its local scope.
More informationProgrammiersprachen (Programming Languages)
2016-05-13 Preface Programmiersprachen (Programming Languages) coordinates: lecturer: web: usable for: requirements: No. 185.208, VU, 3 ECTS Franz Puntigam http://www.complang.tuwien.ac.at/franz/ps.html
More informationCourse Text. Course Description. Course Objectives. StraighterLine Introduction to Programming in C++
Introduction to Programming in C++ Course Text Programming in C++, Zyante, Fall 2013 edition. Course book provided along with the course. Course Description This course introduces programming in C++ and
More information5. 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 informationCS143 Handout 03 Summer 2012 June 27, 2012 Decaf Specification
CS143 Handout 03 Summer 2012 June 27, 2012 Decaf Specification Written by Julie Zelenski and updated by Jerry Cain and Keith Schwarz. In this course, we will write a compiler for a simple object oriented
More informationThe SPL Programming Language Reference Manual
The SPL Programming Language Reference Manual Leonidas Fegaras University of Texas at Arlington Arlington, TX 76019 fegaras@cse.uta.edu February 27, 2018 1 Introduction The SPL language is a Small Programming
More informationAcknowledgement. CS Compiler Design. Semantic Processing. Alternatives for semantic processing. Intro to Semantic Analysis. V.
Acknowledgement CS3300 - Compiler Design Intro to Semantic Analysis V. Krishna Nandivada IIT Madras Copyright c 2000 by Antony L. Hosking. Permission to make digital or hard copies of part or all of this
More informationWriting Evaluators MIF08. Laure Gonnord
Writing Evaluators MIF08 Laure Gonnord Laure.Gonnord@univ-lyon1.fr Evaluators, what for? Outline 1 Evaluators, what for? 2 Implementation Laure Gonnord (Lyon1/FST) Writing Evaluators 2 / 21 Evaluators,
More informationContext-free grammars (CFG s)
Syntax Analysis/Parsing Purpose: determine if tokens have the right form for the language (right syntactic structure) stream of tokens abstract syntax tree (AST) AST: captures hierarchical structure of
More informationPOLYMORPHISM 2 PART Abstract Classes Static and Dynamic Casting Common Programming Errors
POLYMORPHISM 2 PART Abstract Classes Static and Dynamic Casting Common Programming Errors CSC 330 OO Software Design 1 Abstract Base Classes class B { // base class virtual void m( ) =0; // pure virtual
More informationLECTURE 3. Compiler Phases
LECTURE 3 Compiler Phases COMPILER PHASES Compilation of a program proceeds through a fixed series of phases. Each phase uses an (intermediate) form of the program produced by an earlier phase. Subsequent
More informationCompiler Theory. (Semantic Analysis and Run-Time Environments)
Compiler Theory (Semantic Analysis and Run-Time Environments) 005 Semantic Actions A compiler must do more than recognise whether a sentence belongs to the language of a grammar it must do something useful
More information1 Terminology. 2 Environments and Static Scoping. P. N. Hilfinger. Fall Static Analysis: Scope and Types
and Computer Sciences Computer Science Division CS 164 Fall 2006 P. N. Hilfinger Static Analysis: Scope and Types 1 Terminology Programs, in general, are simply collections of definitions of terms, which
More informationPOLYMORPHISM 2 PART. Shared Interface. Discussions. Abstract Base Classes. Abstract Base Classes and Pure Virtual Methods EXAMPLE
Abstract Base Classes POLYMORPHISM 2 PART Abstract Classes Static and Dynamic Casting Common Programming Errors class B { // base class virtual void m( ) =0; // pure virtual function class D1 : public
More informationOutline. Java Models for variables Types and type checking, type safety Interpretation vs. compilation. Reasoning about code. CSCI 2600 Spring
Java Outline Java Models for variables Types and type checking, type safety Interpretation vs. compilation Reasoning about code CSCI 2600 Spring 2017 2 Java Java is a successor to a number of languages,
More informationUndergraduate Compilers in a Day
Question of the Day Backpatching o.foo(); In Java, the address of foo() is often not known until runtime (due to dynamic class loading), so the method call requires a table lookup. After the first execution
More informationSyntax Analysis/Parsing. Context-free grammars (CFG s) Context-free grammars vs. Regular Expressions. BNF description of PL/0 syntax
Susan Eggers 1 CSE 401 Syntax Analysis/Parsing Context-free grammars (CFG s) Purpose: determine if tokens have the right form for the language (right syntactic structure) stream of tokens abstract syntax
More informationCS558 Programming Languages
CS558 Programming Languages Winter 2017 Lecture 7b Andrew Tolmach Portland State University 1994-2017 Values and Types We divide the universe of values according to types A type is a set of values and
More informationCompiler Passes. Semantic Analysis. Semantic Analysis/Checking. Symbol Tables. An Example
Semantic Analysis Having figured out the program s structure, now figure out what it means Compiler Passes Analysis of input program (front-end) character stream Lexical Analysis token stream Syntactic
More informationChapter 3:: Names, Scopes, and Bindings (cont.)
Chapter 3:: Names, Scopes, and Bindings (cont.) Programming Language Pragmatics Michael L. Scott Review What is a regular expression? What is a context-free grammar? What is BNF? What is a derivation?
More informationIntermediate 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 informationCSE P 501 Compilers. Static Semantics Hal Perkins Spring UW CSE P 501 Spring 2018 I-1
CSE P 501 Compilers Static Semantics Hal Perkins Spring 2018 UW CSE P 501 Spring 2018 I-1 Administrivia Parser + AST + print visitors due Mon. 11 pm How s it going? scanner-final and parser-final tags
More informationCS /534 Compiler Construction University of Massachusetts Lowell. NOTHING: A Language for Practice Implementation
CS 91.406/534 Compiler Construction University of Massachusetts Lowell Professor Li Xu Fall 2004 NOTHING: A Language for Practice Implementation 1 Introduction NOTHING is a programming language designed
More informationDecaf Language Reference Manual
Decaf Language Reference Manual C. R. Ramakrishnan Department of Computer Science SUNY at Stony Brook Stony Brook, NY 11794-4400 cram@cs.stonybrook.edu February 12, 2012 Decaf is a small object oriented
More information