Compiler construction 2002 week 5

Similar documents
Compiler construction in4020 lecture 5

Compiler construction 2005 lecture 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 LAB 2 THE SYMBOL TABLE. Tutorial 2 LABS. PHASES OF A COMPILER Source Program. Lab 2 Symbol table

Compiler construction lecture 3

Compiler construction in4303 lecture 3

CSCI Compiler Design

Compiler construction in4303 answers

FUNCTIONAL AND LOGIC PROGRAMS

Using an LALR(1) Parser Generator

Yacc: A Syntactic Analysers Generator

CSE302: Compiler Design

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

Compiler Construction

Lexical and Syntax Analysis

Compiler Construction

Compiler Lab. Introduction to tools Lex and Yacc

LECTURE 11. Semantic Analysis and Yacc

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

SEMANTIC ANALYSIS TYPES AND DECLARATIONS

Syntax-Directed Translation

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

TDDD55 - Compilers and Interpreters Lesson 3

COMPILER CONSTRUCTION Seminar 02 TDDB44

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

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

COMPILERS AND INTERPRETERS Lesson 4 TDDD16

Compilers Project 3: Semantic Analyzer

Engineering project Compiler Construction Assignments

Principles of Programming Languages

Compiler construction 2002 week 2

Context-free grammars

Yacc Yet Another Compiler Compiler

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

UNIVERSITY OF CALIFORNIA

TDDD55- Compilers and Interpreters Lesson 3

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

Compiler Construction: Parsing

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

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

JavaCC Parser. The Compilation Task. Automated? JavaCC Parser

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

COMP-421 Compiler Design. Presented by Dr Ioanna Dionysiou

Compiler construction assignments

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

Conflicts in LR Parsing and More LR Parsing Types

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

PRACTICAL CLASS: Flex & Bison

Compiler Construction

Semantic actions for declarations and expressions

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

Programming Languages

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

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

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

An Introduction to LEX and YACC. SYSC Programming Languages

Semantic Analysis. Lecture 9. February 7, 2018

Introduction to Lex & Yacc. (flex & bison)

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

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.

Parser Tools: lex and yacc-style Parsing

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

Parser Tools: lex and yacc-style Parsing

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

Syntax Analysis The Parser Generator (BYacc/J)

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

Topic 5: Syntax Analysis III

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

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

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

Preparing for the ACW Languages & Compilers

Question Points Score

COP4020 Programming Assignment 2 - Fall 2016

Syntax Analysis Part VIII

Context Analysis. Mooly Sagiv. html://

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

Automatic Scanning and Parsing using LEX and YACC

CS415 Compilers Context-Sensitive Analysis Type checking Symbol tables

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

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

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

Single-pass Static Semantic Check for Efficient Translation in YAPL

CSE 401 Midterm Exam Sample Solution 11/4/11

Chapter 2: Syntax Directed Translation and YACC

The role of semantic analysis in a compiler

Semantic actions for declarations and expressions

Introduction to Compilers and Language Design

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

Programming Project II

Principles of Programming Languages [PLP-2015] Detailed Syllabus

Software II: Principles of Programming Languages

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

Project Compiler. CS031 TA Help Session November 28, 2011

Undergraduate Compilers in a Day

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

Compiler Construction Assignment 3 Spring 2018

Transcription:

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 parser generator program text lexical analysis tokens syntax analysis AST context handling 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 lexical analysis syntax analysis context handling 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 rvalue: value lvalue: location VAR p : Real VAR q : Real... p := q insert coercion to dereference variable checking rules: := found lvalue rvalue lvalue - ERROR expected rvalue deref - (location of) p deref (location of) q Exercise (5 min.) Assignment (practicum) complete the table expression construct result kind (lvalue/rvalue) constant rvalue identifier &lvalue *rvalue V[rvalue] V.selector rvalue + rvalue lvalue = rvalue V stands for lvalue or rvalue 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 lexical analysis syntax analysis context handling code generation C-code Yet another compiler compiler 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 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 3

Yacc interface to lexical analyzer Yacc interface to back-end 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 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) Yacc-based input file (desk0) 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 > Yacc-based input file (desk0) 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 *3+4 14 Operator precedence in Yacc Exercise (7 min.) 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 ')' $$ = $ 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) 4

Answers 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 main : [line]+ line int e : expr(&e) '\n' printf("%d\n", e) expr(int *e) int t : term(e) [ '+' term(&t) *e += t ]* term(int *t) int f : factor(t) [ '*' factor(&f) *t *= f ]* factor(int *f) : '(' expr(f) ')' *f = yylval semantics LLgen interface to lexical analyzer LLgen interface to back-end 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 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 5

Exercise (5 min.) Answers extend LLgen-based interpreter to a desk calculator with registers named a z. Example input: v=3*(w+4) Homework study sections:..4.6 LLgen..5.9 yacc assignment 1: replace yacc with LLgen deadline April 9 08:59 print handout for next week [blackboard] 6