1 Lecture 11: Semantic Analysis (Section 4.1- 4.4) CSCI 431 Programming Languages Fall 2002 A modification of slides developed by Felix Hernandez-Campos.

Slides:



Advertisements
Similar presentations
Semantics Static semantics Dynamic semantics attribute grammars
Advertisements

Semantic Analysis Chapter 4. Role of Semantic Analysis Following parsing, the next two phases of the "typical" compiler are – semantic analysis – (intermediate)
CSE 425: Semantic Analysis Semantic Analysis Allows rigorous specification of a program’s meaning –Lets (parts of) programming languages be proven correct.
ISBN Chapter 3 Describing Syntax and Semantics.
Fall Semantics Juan Carlos Guzmán CS 3123 Programming Languages Concepts Southern Polytechnic State University.
CS 355 – Programming Languages
1 COMP 144 Programming Language Concepts Felix Hernandez-Campos Lecture 12: Semantic Analysis COMP 144 Programming Language Concepts Spring 2002 Felix.
Concepts of Programming Languages 1 Describing Syntax and Semantics Brahim Hnich Högskola I Gävle
1 Semantic Processing. 2 Contents Introduction Introduction A Simple Compiler A Simple Compiler Scanning – Theory and Practice Scanning – Theory and Practice.
CS 330 Programming Languages 09 / 13 / 2007 Instructor: Michael Eckmann.
Context-Free Grammars Lecture 7
CS 330 Programming Languages 09 / 18 / 2007 Instructor: Michael Eckmann.
1 COMP 144 Programming Language Concepts Felix Hernandez-Campos Lecture 5: Syntax Analysis COMP 144 Programming Language Concepts Spring 2002 Felix Hernandez-Campos.
ISBN Chapter 4 Lexical and Syntax Analysis The Parsing Problem Recursive-Descent Parsing.
Chapter 3 Describing Syntax and Semantics Sections 1-3.
Slide 1 Chapter 3 Attribute Grammars. Slide 2 Attribute Grammars Certain language structures cannot be described using EBNF. Attribute grammars are extensions.
Topic 5 -Semantic Analysis Dr. William A. Maniatty Assistant Prof. Dept. of Computer Science University At Albany CSI 511 Programming Languages and Systems.
Chapter 3 Describing Syntax and Semantics Sections 1-3.
CS 330 Programming Languages 09 / 16 / 2008 Instructor: Michael Eckmann.
Describing Syntax and Semantics
ISBN Chapter 3 Describing Syntax and Semantics.
(2.1) Grammars  Definitions  Grammars  Backus-Naur Form  Derivation – terminology – trees  Grammars and ambiguity  Simple example  Grammar hierarchies.
Copyright © 2005 Elsevier Chapter 4 :: Semantic Analysis Programming Language Pragmatics Michael L. Scott.
Chapter 5 Syntax-Directed Translation Section 0 Approaches to implement Syntax-Directed Translation 1、Basic idea Guided by context-free grammar (Translating.
Semantic Analysis Legality checks –Check that program obey all rules of the language that are not described by a context-free grammar Disambiguation –Name.
Chapter 9 Syntax Analysis Winter 2007 SEG2101 Chapter 9.
Chapter 10: Compilers and Language Translation Invitation to Computer Science, Java Version, Third Edition.
COP 4620 / 5625 Programming Language Translation / Compiler Writing Fall 2003 Lecture 10, 10/30/2003 Prof. Roy Levow.
Syntax-Directed Translation
1 Semantic Analysis Aaron Bloomfield CS 415 Fall 2005.
COP4020 Programming Languages Semantics Prof. Xin Yuan.
Copyright © 1998 by Addison Wesley Longman, Inc. 1 Chapter 3 Syntax - the form or structure of the expressions, statements, and program units Semantics.
ISBN Chapter 3 Describing Syntax and Semantics.
3-1 Chapter 3: Describing Syntax and Semantics Introduction Terminology Formal Methods of Describing Syntax Attribute Grammars – Static Semantics Describing.
Joey Paquet, Lecture 12 Review. Joey Paquet, Course Review Compiler architecture –Lexical analysis, syntactic analysis, semantic.
ISBN Chapter 3 Describing Semantics -Attribute Grammars -Dynamic Semantics.
TextBook Concepts of Programming Languages, Robert W. Sebesta, (10th edition), Addison-Wesley Publishing Company CSCI18 - Concepts of Programming languages.
CS 363 Comparative Programming Languages Semantics.
1 Lecture 5: Syntax Analysis (Section 2.2) CSCI 431 Programming Languages Fall 2002 A modification of slides developed by Felix Hernandez-Campos at UNC.
Muhammad Idrees Lecturer University of Lahore 1. Outline Introduction The General Problem of Describing Syntax Formal Methods of Describing Syntax Attribute.
Chapter 2. Design of a Simple Compiler J. H. Wang Sep. 21, 2015.
Copyright © 2009 Elsevier Chapter 2 :: Programming Language Syntax Programming Language Pragmatics Michael L. Scott.
Chapter 5: Syntax directed translation –Use the grammar to direct the translation The grammar defines the syntax of the input language. Attributes are.
3.2 Semantics. 2 Semantics Attribute Grammars The Meanings of Programs: Semantics Sebesta Chapter 3.
ISBN Chapter 3 Describing Semantics.
Chapter 3 Part II Describing Syntax and Semantics.
ISBN Chapter 3 Describing Syntax and Semantics.
1 Compiler Construction (CS-636) Muhammad Bilal Bashir UIIT, Rawalpindi.
CS412/413 Introduction to Compilers and Translators Spring ’99 Lecture 3: Introduction to Syntactic Analysis.
ISBN Chapter 3 Describing Syntax and Semantics.
1 / 48 Formal a Language Theory and Describing Semantics Principles of Programming Languages 4.
Compiler Introduction 1 Kavita Patel. Outlines 2  1.1 What Do Compilers Do?  1.2 The Structure of a Compiler  1.3 Compilation Process  1.4 Phases.
Chapter 3 © 2002 by Addison Wesley Longman, Inc Introduction - Who must use language definitions? 1. Other language designers 2. Implementors 3.
1 A Simple Syntax-Directed Translator CS308 Compiler Theory.
Overview of Previous Lesson(s) Over View 3 Model of a Compiler Front End.
Copyright © 2009 Elsevier Chapter 4 :: Semantic Analysis Programming Language Pragmatics Michael L. Scott.
CSC 4181 Compiler Construction
CSE 420 Lecture Program is lexically well-formed: ▫Identifiers have valid names. ▫Strings are properly terminated. ▫No stray characters. Program.
PZ03CX Programming Language design and Implementation -4th Edition Copyright©Prentice Hall, PZ03CX - Language semantics Programming Language Design.
LECTURE 10 Semantic Analysis. REVIEW So far, we’ve covered the following: Compilation methods: compilation vs. interpretation. The overall compilation.
Semantic Analysis Chapter 4.
Compiler Lecture 1 CS510.
CSE 3302 Programming Languages
CS 3304 Comparative Languages
CS 3304 Comparative Languages
Chapter 4 Action Routines.
Chapter 10: Compilers and Language Translation
COP4020 Programming Languages
COP4020 Programming Languages
CH 4 - Language semantics
Presentation transcript:

1 Lecture 11: Semantic Analysis (Section ) CSCI 431 Programming Languages Fall 2002 A modification of slides developed by Felix Hernandez-Campos at UNC Chapel Hill

2 Semantic Analysis From Code Form To Program Meaning Compiler or Interpreter Translation Execution Source Code Target Code Interpre-tation

3 Phases of Compilation

4 Specification of Programming Languages PLs require precise definitions (i.e. no ambiguity)PLs require precise definitions (i.e. no ambiguity) –Language form (Syntax) –Language meaning (Semantics) Consequently, PLs are specified using formal notation:Consequently, PLs are specified using formal notation: –Formal syntax »Tokens »Grammar –Formal semantics »Attribute Grammars (static semantics) »Dynamic Semantics

5 The Semantic Analyzer The principal job of the semantic analyzer is to enforce static semantic rules.The principal job of the semantic analyzer is to enforce static semantic rules. In general, anything that requires the requires the compiler to compare things that are separate by a long distance or to count things ends up being a matter of semantics.In general, anything that requires the requires the compiler to compare things that are separate by a long distance or to count things ends up being a matter of semantics. The semantic analyzer also commonly constructs a syntax tree (usually first), and much of the information it gathers is needed by the code generator.The semantic analyzer also commonly constructs a syntax tree (usually first), and much of the information it gathers is needed by the code generator.

6 Attribute Grammars Context-Free Grammars (CFGs) are used to specify the syntax of programming languagesContext-Free Grammars (CFGs) are used to specify the syntax of programming languages –E.g. arithmetic expressions How do we tie these rules to mathematical concepts?How do we tie these rules to mathematical concepts? Attribute grammars are annotated CFGs in which annotations are used to establish meaning relationships among symbolsAttribute grammars are annotated CFGs in which annotations are used to establish meaning relationships among symbols –Annotations are also known as decorations

7 Attribute Grammars Example Each grammar symbols has a set of attributesEach grammar symbols has a set of attributes –E.g. the value of E 1 is the attribute E 1.val Each grammar rule has a set of rules over the symbol attributesEach grammar rule has a set of rules over the symbol attributes –Copy rules –Semantic Function rules »E.g. sum, quotient

8 Attribute Flow Context-free grammars are not tied to an specific parsing orderContext-free grammars are not tied to an specific parsing order –E.g. Recursive descent, LR parsing Attribute grammars are not tied to an specific evaluation orderAttribute grammars are not tied to an specific evaluation order –This evaluation is known as the annotation or decoration of the parse tree

9 Attribute Flow Example The figure shows the result of annotating the parse tree for (1+3)*2The figure shows the result of annotating the parse tree for (1+3)*2 Each symbols has at most one attribute shown in the corresponding boxEach symbols has at most one attribute shown in the corresponding box –Numerical value in this example –Operator symbols have no value Arrows represent attribute flowArrows represent attribute flow

10 Attribute Flow Example

11 Attribute Flow Synthetic and Inherited Attributes In the previous example, semantic information is pass up the parse treeIn the previous example, semantic information is pass up the parse tree –We call this type of attributes are called synthetic attributes –Attribute grammar with synthetic attributes only are said to be S-attributed Semantic information can also be passed down the parse treeSemantic information can also be passed down the parse tree –Using inherited attributes –Attribute grammar with inherited attributes only are said to be non-S-attributed

12 Attribute Flow Inherited Attributes L-attributed grammars, such as the one on the next slide, can still be evaluated in a single left-to-right pass over the input.L-attributed grammars, such as the one on the next slide, can still be evaluated in a single left-to-right pass over the input. Each synthetic attribute of a LHS symbol (by definition of synthetic)depends only on attributes of its RHS symbols.Each synthetic attribute of a LHS symbol (by definition of synthetic)depends only on attributes of its RHS symbols. Each inherited attribute of a RHS symbol (by definition of L- attributed) depends only on inherited attributes of the LHS symbol or on synthetic or inherited attributes of symbols to its left in the RHS.Each inherited attribute of a RHS symbol (by definition of L- attributed) depends only on inherited attributes of the LHS symbol or on synthetic or inherited attributes of symbols to its left in the RHS. Top-down grammars generally require non-S-attributed flowsTop-down grammars generally require non-S-attributed flows –The previous annotated grammar was an S-attributed LR(1) –L-attributed grammars are the most general class of attribute grammars that can be evaluated during an LL parse.

13 LL Grammar

14 Non-S-Attributed Grammars Example

15 Syntax Tree There is considerable variety in the extent to which parsing, semantic analysis, and intermediate code generation are interleaved.There is considerable variety in the extent to which parsing, semantic analysis, and intermediate code generation are interleaved. A one-pass compiler interleaves scanning, parsing, semantic analysis, and code generation in a single traversal of the input.A one-pass compiler interleaves scanning, parsing, semantic analysis, and code generation in a single traversal of the input. A common approach interleaves construction of a syntax tree with parsing (eliminating the need to build an explicit parse tree), then follows with separate, sequential phases for semantic analysis and code generation.A common approach interleaves construction of a syntax tree with parsing (eliminating the need to build an explicit parse tree), then follows with separate, sequential phases for semantic analysis and code generation.

16 Bottom-up Attribute Grammar to Construct a Syntax Tree

17 Construction of the Syntax Tree

18 Action Routines Automatic tools can construct a parser for a given context-free grammarAutomatic tools can construct a parser for a given context-free grammar –E.g. yacc Automatic tools can construct a semantic analyzer for an attribute grammarAutomatic tools can construct a semantic analyzer for an attribute grammar –An ad hoc techniques is to annotate the grammar with executable rules –These rules are known as action routines

19 Action Rules for the Previous LL(1) attribute grammar E => T { TT.st := T.v } TT { E.v := TT.v } E => T { TT.st := T.v } TT { E.v := TT.v } TT => + T { TT2.st := TT1.st + T.v } TT { TT1.v := TT2.v } TT => + T { TT2.st := TT1.st + T.v } TT { TT1.v := TT2.v } TT => - T { TT2.st := TT1.st - T.v } TT { TT1.v := TT2.v } TT => - T { TT2.st := TT1.st - T.v } TT { TT1.v := TT2.v } TT => { TT.v := TT.st } TT => { TT.v := TT.st } T => F { FT.st := F.v } FT { T.v := FT.v } T => F { FT.st := F.v } FT { T.v := FT.v } FT => * F { FT2.st := FT1.st * F.v } FT { FT1.v := FT2.v } FT => * F { FT2.st := FT1.st * F.v } FT { FT1.v := FT2.v } FT => / F { FT2.st := FT1.st / F.v } FT { FT1.v := FT2.v } FT => / F { FT2.st := FT1.st / F.v } FT { FT1.v := FT2.v } FT => { FT.v := FT.st } FT => { FT.v := FT.st } F => - F { F1.v := - F2.v } F => - F { F1.v := - F2.v } F => ( E ) { F.v := E.v } F => ( E ) { F.v := E.v } F => const { F.v := C.v } F => const { F.v := C.v }

20 Action Rules The ease with which rules were incorporated in the grammar is due to the fact that the attribute grammar is L-attributed.The ease with which rules were incorporated in the grammar is due to the fact that the attribute grammar is L-attributed. The action rules for L-attributed grammars, in which the attribute flow is depth-first left-to-right, can be evaluated in the order of the parse tree prediction for LL grammars.The action rules for L-attributed grammars, in which the attribute flow is depth-first left-to-right, can be evaluated in the order of the parse tree prediction for LL grammars. Action rules for S-attributed grammars can be incorporated at the end of the right-hand sides of LR grammars. But, if action rules are responsible for a significant part of the semantic analysis, they will need more contextual information to do their job.Action rules for S-attributed grammars can be incorporated at the end of the right-hand sides of LR grammars. But, if action rules are responsible for a significant part of the semantic analysis, they will need more contextual information to do their job.

21 Static and Dynamic Semantics Attribute grammars add basic semantic rules to the specification of a languageAttribute grammars add basic semantic rules to the specification of a language –They specify static semantics But they are limited to the semantic form that can be checked at compile timeBut they are limited to the semantic form that can be checked at compile time Other semantic properties cannot be checked at compile timeOther semantic properties cannot be checked at compile time –They are described using dynamic semantics

22 Dynamic Semantics Use to formally specify the behavior of a programming languageUse to formally specify the behavior of a programming language –Semantic-based error detection –Correctness proofs There is not a universally accepted notationThere is not a universally accepted notation –Operational semantics »Executing statements that represent changes in the state of a real or simulated machine –Axiomatic semantics »Using predicate calculus (pre and post-conditions) –Denotational semantics »Using recursive function theory

23 Semantic Specification The most common way of specifying the semantics of a language is plain englishThe most common way of specifying the semantics of a language is plain english – c.html# c.html#24588http://java.sun.com/docs/books/jls/first_edition/html/14.do c.html#24588 There is a lack of formal rigor in the semantic specification of programming languagesThere is a lack of formal rigor in the semantic specification of programming languages –Guess why