Compiler construction 2005 lecture 5

Similar documents
Compiler construction in4020 lecture 5

Compiler construction 2002 week 5

IN4305 Engineering project Compiler construction

Prof. Mohamed Hamada Software Engineering Lab. The University of Aizu Japan

Parsing How parser works?

Syntax Analysis Part IV

Compiler construction assignments

COMPILER CONSTRUCTION LAB 2 THE SYMBOL TABLE. Tutorial 2 LABS. PHASES OF A COMPILER Source Program. Lab 2 Symbol table

Compiler construction lecture 3

Using an LALR(1) Parser Generator

CSCI Compiler Design

CSE302: Compiler Design

Compiler construction in4303 lecture 3

Yacc: A Syntactic Analysers Generator

As we have seen, token attribute values are supplied via yylval, as in. More on Yacc s value stack

Compiler Construction

Compiler Construction

Lexical and Syntax Analysis

Compiler Lab. Introduction to tools Lex and Yacc

LECTURE 11. Semantic Analysis and Yacc

FUNCTIONAL AND LOGIC PROGRAMS

SEMANTIC ANALYSIS TYPES AND DECLARATIONS

TDDD55 - Compilers and Interpreters Lesson 3

Faculty of Electrical Engineering, Mathematics, and Computer Science Delft University of Technology

Syntax-Directed Translation

COMPILER CONSTRUCTION Seminar 02 TDDB44

Yacc. Generator of LALR(1) parsers. YACC = Yet Another Compiler Compiler symptom of two facts: Compiler. Compiler. Parser

UNIVERSITY OF CALIFORNIA

L L G E N. Generator of syntax analyzier (parser)

COMPILERS AND INTERPRETERS Lesson 4 TDDD16

Context-free grammars

Yacc Yet Another Compiler Compiler

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

Compiler Construction: Parsing

Principles of Programming Languages

SYED AMMAL ENGINEERING COLLEGE (An ISO 9001:2008 Certified Institution) Dr. E.M. Abdullah Campus, Ramanathapuram

EDAN65: Compilers, Lecture 06 A LR parsing. Görel Hedin Revised:

Compilers Project 3: Semantic Analyzer

TDDD55- Compilers and Interpreters Lesson 3

Engineering project Compiler Construction Assignments

G53CMP: Lecture 4. Syntactic Analysis: Parser Generators. Henrik Nilsson. University of Nottingham, UK. G53CMP: Lecture 4 p.1/32

Faculty of Electrical Engineering, Mathematics, and Computer Science Delft University of Technology

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

A clarification on terminology: Recognizer: accepts or rejects strings in a language. Parser: recognizes and generates parse trees (imminent topic)

Semantic actions for declarations and expressions

Semantic actions for declarations and expressions. Monday, September 28, 15

Conflicts in LR Parsing and More LR Parsing Types

COMPILER (CSE 4120) (Lecture 6: Parsing 4 Bottom-up Parsing )

Undergraduate Compilers in a Day

The Compiler So Far. CSC 4181 Compiler Construction. Semantic Analysis. Beyond Syntax. Goals of a Semantic Analyzer.

Syntax Analysis Part VIII

Syn S t yn a t x a Ana x lysi y s si 1

PRACTICAL CLASS: Flex & Bison

Compiler Construction

Parser Tools: lex and yacc-style Parsing

Programming Languages

CS1622. Semantic Analysis. The Compiler So Far. Lecture 15 Semantic Analysis. How to build symbol tables How to use them to find

Introduction to Yacc. General Description Input file Output files Parsing conflicts Pseudovariables Examples. Principles of Compilers - 16/03/2006

Lex & Yacc (GNU distribution - flex & bison) Jeonghwan Park

Semantic Analysis. Lecture 9. February 7, 2018

An Introduction to LEX and YACC. SYSC Programming Languages

Lex & Yacc. By H. Altay Güvenir. A compiler or an interpreter performs its task in 3 stages:

Compiler construction in4303 answers

Introduction to Lex & Yacc. (flex & bison)

Lex & Yacc. by H. Altay Güvenir. A compiler or an interpreter performs its task in 3 stages:

Project Compiler. CS031 TA Help Session November 28, 2011

A Bison Manual. You build a text file of the production (format in the next section); traditionally this file ends in.y, although bison doesn t care.

Today's Topics. CISC 458 Winter J.R. Cordy

Programming Project II

Parser Tools: lex and yacc-style Parsing

CS143 Handout 12 Summer 2011 July 1 st, 2011 Introduction to bison

RYERSON POLYTECHNIC UNIVERSITY DEPARTMENT OF MATH, PHYSICS, AND COMPUTER SCIENCE CPS 710 FINAL EXAM FALL 96 INSTRUCTIONS

Syntax Analysis The Parser Generator (BYacc/J)

Topic 5: Syntax Analysis III

JavaCC Parser. The Compilation Task. Automated? JavaCC Parser

Big Picture: Compilation Process. CSCI: 4500/6500 Programming Languages. Big Picture: Compilation Process. Big Picture: Compilation Process.

CS415 Compilers Context-Sensitive Analysis Type checking Symbol tables

Preparing for the ACW Languages & Compilers

Simple LR (SLR) LR(0) Drawbacks LR(1) SLR Parse. LR(1) Start State and Reduce. LR(1) Items 10/3/2012

Compilerconstructie. najaar Rudy van Vliet kamer 124 Snellius, tel rvvliet(at)liacs.

COP4020 Programming Assignment 2 - Fall 2016

Chapter 2: Syntax Directed Translation and YACC

Semantic actions for declarations and expressions

Automatic Scanning and Parsing using LEX and YACC

COMP 181. Prelude. Prelude. Summary of parsing. A Hierarchy of Grammar Classes. More power? Syntax-directed translation. Analysis

COMP 181. Agenda. Midterm topics. Today: type checking. Purpose of types. Type errors. Type checking

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

Compiler Construction Assignment 3 Spring 2018

Part III : Parsing. From Regular to Context-Free Grammars. Deriving a Parser from a Context-Free Grammar. Scanners and Parsers.

CS 426 Fall Machine Problem 1. Machine Problem 1. CS 426 Compiler Construction Fall Semester 2017

Homework #3: CMPT-379

Bottom-Up Parsing. Lecture 11-12

Static Semantics. Lecture 15. (Notes by P. N. Hilfinger and R. Bodik) 2/29/08 Prof. Hilfinger, CS164 Lecture 15 1

Faculty of Electrical Engineering, Mathematics, and Computer Science Delft University of Technology

Semantic Analysis. Outline. The role of semantic analysis in a compiler. Scope. Types. Where we are. The Compiler Front-End

Hyacc comes under the GNU General Public License (Except the hyaccpar file, which comes under BSD License)

COMP-421 Compiler Design. Presented by Dr Ioanna Dionysiou

Project 2 Interpreter for Snail. 2 The Snail Programming Language

The role of semantic analysis in a compiler

Introduction to Compilers and Language Design

Transcription:

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 program text tokens AST annotated AST Semantic analysis Symbol table information is scattered throughout the program identifiers serve as connectors find defining occurrence of each applied occurrence of an identifier in the AST undefined identifiers error unused identifiers warning check rules in the language definition type checking control flow (dead code) global storage used by all compiler phases holds information about identifiers: type location size program text annotated AST optimizations code generation executable s y m b o l t a b l e Symbol table implementation Identification extensible string-indexable array linear list next tree name type hash table bucket 0 bucket 1 bucket bucket 3 hash function: string int next name type aap next name type noot mies different kinds of identifiers variables type names int j field selectors name spaces scopes typedef int i void foo(int j) struct i i i i i: i.i = 3 printf( "%d\n", i.i) 1

Handling scopes A scoped hash-based symbol table Stack of scope elements when entering a scope a new element is pushed on the stack declared identifiers are entered in the top scope element applied identifiers are looked up in the scope elements from top to bottom the top element is removed upon scope exit aap( int noot) int mies, aap... hash table bucket 0 bucket 1 bucket bucket 3 noot decl aap decl mies decl scope stack 1 1 prop 0 prop 0 prop level prop Identification: complications overloading operators: N* prijs*.0371 functions: PUT(s:STRING) PUT(i:INTEGER) Type checking operators and functions impose restrictions on the types of the arguments solution: yield set of possibilities (to be constrained by type checking) imported scopes C++ scope resolution operator x:: Modula FROM module IMPORT... solution: stack (or merge) the new scope types basic types structured types type names typedef struct double re double im complex Forward declarations Type equivalence recursive data structures TYPE Tree = POINTER TO Node Type Node = RECORD element : Integer left, right : Tree END RECORD type information must be stored type table type information must be resolved undefined types circularities name equivalence [all types get a unique name] VAR a : ARRAY [Integer 1..10] OF Real VAR b : ARRAY [Integer 1..10] OF Real structural equivalence [difficult to check] TYPE c = RECORD i : Integer p : POINTER TO c END RECORD TYPE d = RECORD i : Integer p : POINTER TO RECORD i : Integer p : POINTER to c END RECORD END RECORD

Coercions implicit data and type conversion to match operand (argument) type coercions complicate identification (ambiguity) VAR a : Real... a := 5 3.14 + 7 8 + 9 two phase approach expand a type to a set by applying coercions reduce type sets based on constraints imposed by (overloaded) operators and language semantics Variable: value or location? two usages of variables : value : location VAR p : Real VAR q : Real... p := q insert coercion to dereference variable checking rules: := found - ERROR expected deref - (location of) p deref (location of) q Exercise (3 min.) Assignment for CS students complete the table expression construct constant variable identifier (non-variable) & * V[] + = V stands for or result kind (/) V Asterix compiler token description Asterix lex yacc 1. replace yacc by LLgen. make Asterix object-oriented classes and objects inheritance and dynamic binding Asterix program code generation C-code Assignment for CE students Practical work Asterix compiler token description Asterix 1. extend Asterix with records. code generation lex yacc Asterix program code generation groups of students BOF: CS or CE assistance Leon Planken Joost Cassee Deadlines 08:59 1. November 14. January 9 Wednesday + Thursday 9:00 1:30 Rooms: G + P (Zuidpl) Peterpaul Klein Haneveld Sep 1 Oct 0 Gertjan Halkes Nov 9 Dec C-code 3

Case study: parser generators Yet another compiler compiler Yacc bottom-up LALR(1) LLgen top-down LL(1) language parser generator program text tokens AST annotated AST yacc (bison): parser generator for UNIX LALR(1) C code format of the yacc input file: definitions rules user code tokens + properties rules + actions auxiliary C-code Yacc-based Yacc interface to lexical analyzer input file %token DIGIT line : expr '\n' printf("%d\n", $1) expr : expr '+' expr $$ = $1 + $3 expr '*' expr $$ = $1 * $3 '(' expr ')' $$ = $ semantics yacc maintains a stack of values that may be referenced ($i) in the semantic actions yacc invokes yylex() to get the next token the value of a token must be stored in the global variable yylval the default value type is int, but can be changed yylex() int c c = getchar() if (isdigit(c)) yylval = c - '0' return DIGIT return c Yacc interface to back-end Yacc-based yacc generates a function named yyparse() syntax errors are reported by invoking a callback function yyerror() yylex()... main() yyparse() yyerror() printf("syntax error\n") exit(1) input file (desk0.y) run yacc line : expr '\n' printf("%d\n", $1) expr : expr '+' expr $$ = $1 + $3 expr '*' expr $$ = $1 * $3 '(' expr ')' $$ = $ > make desk0 bison -v desk0.y desk0.y contains 4 shift/reduce conflicts. gcc -o desk0 desk0.tab.c > 4

Yacc-based input file (desk0.y) line : expr '\n' printf("%d\n", $1) expr : expr '+' expr $$ = $1 + $3 expr '*' expr $$ = $1 * $3 '(' expr ')' $$ = $ run yacc run desk0, is it correct? NO > desk0 operator precedence: *3+4 14 Meneer Please Van Excuse DalenMy Wacht Dear Op Aunt Antwoord Sally Operator precedence in Yacc priority from top (low) to bottom (high) %token DIGIT %left '+' %left '*' line : expr '\n' printf("%d\n", $1) expr : expr '+' expr $$ = $1 + $3 expr '*' expr $$ = $1 * $3 '(' expr ')' $$ = $ Exercise (5 min.) Answers multiple lines: lines: line lines line line : expr '\n' printf("%d\n", $1) expr : expr '+' expr $$ = $1 + $3 expr '*' expr $$ = $1 * $3 '(' expr ')' $$ = $ Extend the interpreter to a desk calculator with registers named a z. Example input: v=3*(w+4) LLgen: LL(1) parser generator LLgen is part of the Amsterdam Compiler Kit takes LL(1) + semantic actions in C and generates a recursive descent parser LLgen features: repetition operators advanced error handling parameter passing control over semantic actions dynamic conflict resolvers LLgen example: start from LR(1) make LL(1) left recursion operator precedence use repetition operators add semantic actions attach parameters to rules insert C-code between the symbols %token DIGIT main : line+ line : expr '\n' expr : term [ '+' term ]* term : factor [ '*' factor ]* factor : '(' expr ') LLgen 5

main : line+ line int e : expr(&e) '\n' printf("%d\n", e) expr(int *e) int t : term(e) [ '+' term(&t) *e = *e + t ]* term(int *t) int f : factor(t) [ '*' factor(&f) *t = *t * f ]* factor(int *f) : '(' expr(f) ')' *f = yylval LLgen interface to lexical analyzer by default LLgen invokes yylex() to get the next token the value of a token can be stored in any global variable (yylval) of any type (int) yylex() int c c = getchar() if (isdigit(c)) yylval = c - '0' return DIGIT return c semantics LLgen interface to back-end Exercise (5 min.) LLgen generates a user-named function (parse) LLgen handles syntax errors by inserting missing tokens and deleting unexpected tokens LLmessage() is invoked to notify the lexical analyzer %start parse, main LLmessage(int class) switch (class) case -1: printf("expecting EOF, ") case 0: printf("deleting token (%d)\n",llsymb) break default: /* push back token LLsymb */ printf("inserting token (%d)\n",class) break extend LLgen-based interpreter to a desk calculator with registers named a z. Example input: v=3*(w+4) Answers Homework study sections:..4.6 LLgen..5.9 yacc assignment 1: CS: replace yacc with LLgen CE: add records print handout for next lecture [blackboard] 6