Profile Language Compiler Chao Gong, Paaras Kumar May 7, 2001

Size: px
Start display at page:

Download "Profile Language Compiler Chao Gong, Paaras Kumar May 7, 2001"

Transcription

1 Profile Language Compiler Chao Gong, Paaras Kumar May 7, 2001 Abstract Our final project for CS227b is to implement a profile language compiler using PRECCX. The profile, which is a key component in the Data Centers project, is described with the profile language. This paper presents the design and implementation of the profile language compiler. 1. Introduction The Data Centers project is a joint research work held in Brandeis University, Brown University, and University of California, Berkeley. The goal of this project is to support profile-driven data management of large-scale, autonomous data sources (e.g., the web). Profile-driven data management is a framework for determining and implementing data management policies upon the analysis of user data requirements specified in profiles. The fundamental enabler to this approach is the profile. The profile is a formal specification of user/application-level data requirements. Our final project is to implement a profile language compiler using PRECCX (PREttier Compiler Compiler). The profile compiler translates a profile written in ASCII file format into a Java program. Compiling and executing the Java program will construct a series of Java objects representing contents of the profile. These Java objects are resources of information about profile in the profile processing. 2. Profile Language A user's profile describes what data objects are considered interesting and how useful these data objects are relative to each other. The profile language is defined in the parameterized grammar. A parameterized grammar (also called a modular grammar) is a partially specified grammar that includes certain nonterminals (the parameters) that are never reduced. That is, a grammar's parameters appear in the bodies but never in the heads of production rules. Such grammars are partial language specifications; instantiation of parameterized grammars with the missing production rules "completes" the language definition. The variation in instantiations of parameterized grammars means that there are many concrete profile language grammars. These grammars are same in the most part except the definitions of certain nonterminals (the parameters). It's tedious and inefficient to implement a new complier for each concrete profile language grammar. The efficient way is to implement a basic compiler for the parameterized grammar, which is the common part in all profile language grammars, and to implement a specific compiler for every profile language grammar that compiles the part of definitions of the parameters. When we need a compiler for a specific profile language, we combine the basic compiler and the specific compiler for that profile language to get the compiler we need. 1

2 3. PRECCX PRECCX is a compiler compiler. It converts PRECCX-style context-grammar definition scripts (with a.y extension) into ANSI C code scripts (with a.c extension). The output C code is a topdown (LL) parser that can parse grammar defined in the PRECCX-style context-grammar definition scripts. The output code compiles under the GNU Software Foundations ANSI C compiler, gcc. PRECCX is coded in ANSI C generated by PRECCX itself from its own definition script, and is fully portable. Compared with the Unix yacc utility, PRECCX extends facilities in many facets. We list these new facilities that are relevant to our final project below: (1). Modular output Parts of a script can be preccx'ed separately, compiled separately, and then linked together later, which makes maintenance and version control easy. That is the reason why we chose PRECCX as the tool to build the profile compiler. We can write separate PRECCX definition scripts for the basic compiler and the specific compilers. These scripts are preccx'ed and compiled separately, thus we get separate object codes of these compilers. We link together the object code of basic compiler and the object code of a specific compiler to get the compiler for a specific profile language. (2). Infinite lookahead PRECCX is "infinite lookahead", so it will investigate each branch of the grammar to the maximum depth. But it is often the case that grammars do not have explicit termination markers (such as an ENDIF or ENDBLOCK) and then it may be that an initial segment of the token stream will satisfy the grammar specification as well as the full stream will. To preclude this possibility, the potentially longest matches must come first in PRECCX definition scripts, to force the longest matches to be sought first. So in PRECCX one must b where in yacc one would have written a:b bc ; In the PRECCX definition scripts, we re-ordered production rules with the same head to make sure that the longest matches to be sought first. (3). Built-in lexer PRECCX includes a trivial default built-in lexer that passes characters through to PRECCX as tokens. We didn't use other lexical analyses such as lex but build-in lexer in our final project. 2

3 (4). Parameterized grammar definitions That allows context-dependent grammars. With that utility, we can recognize keywords(e.g. PROFILE, UPTO) in the profile grammar use one production rule. In the PRECCX definition script profile.y, that String(s) = ) *(char*)s==0 < *(char*)s > String( ((char*)s) + 1 ) 4. Running Profile Compiler 4.1 Files Our project consists of following files: profile.y: preccx definition script for the basic compiler. profile.h: header file included in profile.y. Contains C macros and C functions checking the attributes of a character. action.h: header file included in profile.y. Contains C functions to write output Java codes of profile compiler into files. stack.h: header file included in profile.y. Contains C functions for operations on stacks used in the parsing process. DExpURL.y: preccx definition script for parameter nonterminal <DomainSetExp>. <DomainSetExp> is defined as URL. OExpURL.y: preccx definition script for parameter nonterminal <ObjectExp>. <ObjecttExp> is defined as the age of a webpage. DExpURL.y and OExpURL.y are preccx definition scripts for the specific compiler that compiles URL_based profiles. traveler: an example Search-Engine-Based profile. investor: an example URL-Based profile. script: commands to run PRECCX and get profile compiler. 4.2 Construct profile compiler We execute PRECCX to convert preccx definition scripts into ANSI C code scripts, then compile and link C code scripts, the obtained executable file is the profile compiler. Below we use the process of constructing the URL_based profile compiler as an example to illustrate the process of constructing the profile compiler. 1. Install PRECCX (read PRECCX user manual for details) Make sure the library and header files are installed in appropriate directories. They will be used in the compile and link process. 2. Execute PRECCX to convert preccx definition scripts into ANSI C code scripts. preccx -p64 profile.y profile.c preccx DExpURL.y DExpURL.c preccx OExpURL.y OExpURL.c 3

4 The flag -p64 specifies the size in Kb of the internal program (tables) built by PRECCX during the scan of a specification script. It correlates with the maximum number of symbols in a single production rule. Default size 20Kb isn't enough for scanning preccx definition script profile.y. 3. Compile C code scripts to get objective codes. gcc -c profile.c -I../include gcc -c DExpURL.c -I../include gcc -c OExpURL.c -I../include PRECCX header file ccx.h is in directory specified by flag -I. If you installed PRECCX header file in a different directory, the flag -I has different form. 4. Link object codes together to get executable file. gcc -o profile profile.o OExpURL.o DExpURL.o -L../lib -lcc1 Library libcc1.a is in the directory specified by flag -I. If you installed PRECCX library in a different directory, the flag -I has different form. Executable file profile is the URL_based profile compiler. 4.3 Run profile compiler We also use the URL_based profile compiler as an example. 1. Execute profile compiler with profile as input. ASCII file investor is a URL-Based profile. Execute command profile < investor We get the output file Actions.java. Actions.java consists of Java statements that call constructors of Java classes to construct Java objects representing contents of the profile. The Java classes are defined in other Java files written by Eddie and David. 2. Compile these Java file and execute Actions class to get Java objects. javac *.java java Actions 5. Implementation In this section, we describe our work in detail. This section is organized as following: In 5.1 we describe the modified profile grammar that maintains the same semantics. In 5.2 we present production rules written in PRECCX. In 5.3 we present actions in PRECCX definition script. 5.1 Modification of profile language grammar Preccx parsers are top-down and left to right. That means we can NOT write production rules in left recursion! We can write rules in right recursion representing same semantics. For example, NEVER write "foo = foo bar bar"! instead, write "foo = bar foo bar". Moreover, END is a keyword in PRECCX, we can't write END in production rules. 4

5 So we made a little modification to the profile language grammar but didn t change the semantics. In the grammar, the production rules of Conds are: Conds :: Sconds Conds AND SCond Conds OR SCond NOT '(' Conds ')' We changed left recursion to right recursion, the modified production rules of Conds are: Conds :: SCond SCond AND Conds SCond OR Conds NOT '(' Conds ')' The production rule of Profile is: Profile :: PROFILE IDENT DomainClause UtilityClause END We replace END with FINISH, the modified production rule of Profile is: Profile :: PROFILE IDENT DomainClause UtilityClause FINISH 5.2 Production rules in PRECCX definition script Because PRECCX is "infinite lookahead", we wrote production rules with the same head into PRECCX definition scripts in the order that longer match is in front of short match. So the longest matches will be sought first. For example, we wrote the production rules of Conds in the order as Conds = Scond ws AND ws SCond ws OR ws NOT ws <'('> ws Conds ws <')'> 5.3 Actions in PRECCX definition script The profile compiler translates a profile written in ASCII file format into a Java program. The Java program constructs a series of Java objects representing contents of the profile. We use 15 classes to represent the parameterized grammar for profile language. For example, we use the PLProfile class to represent the Profile. An object of PLProfile class represents a Profile, it contains 3 data members: ident, domainclause, utilityclause. Ident is a string object representing the identifier of the profile; domainclause is an object of PLDomainClause class representing DomainClause in the Profile, utilityclause is an object of PLUtilityClause class representing UtilityClause in the Profile. We use interfaces to represent parameter nonterminals and use classes implementing the interfaces to represent parameter instantiations. For example, interface PLDomainSetExpParam represents parameter nonterminal <DomainSetExp>, class PLDomainSetExpParamURL implements interface PLDomainSetExpParam and represents URL instantiation of <DomainSetExp>. 5

6 Whenever a rule is reduced, the compiler will execute the action associated with the rule. The action is C codes that write Java codes to output file. The Java codes are statement to call constructors of appropriate Java classes to construct Java objects. Representing a profile need multiple same kind of objects. For example, we use PLSCond class to represent SCond in the profile. It's often the case that a profile contains many SConds, so in Java codes there are many objects of PLSCond class. How to name these objects of the same class? We use an array to store objects of one class, so we can identify an object through the array name and index. Because a legal profile contains just one Profile, one DomainClause, and one UtilityClause, we use one object of PLProfile class, one object of PLDomainClause class, and one object of PLUtilityClause class to represent them. In output Java codes, we should define an array with a specific size before referencing it. Only after finishing parsing, the compiler knows the number of every kind of objects to represent a profile. During parsing process, the compiler writes Java statements that call class constructors into a temporary file "Tmp_Actions.java". After finishing parsing, the compiler writes Java statements that declare object arrays with definite sizes and other necessary codes into the file "Actions.java", then copy the content of temporary file "Tmp_Actions.java" to the end of "Actions.java" and delete the temporary file. Now the file "Actions.java" is the output file. To construct an object in the parsing process, the compiler have to remember its data members that have been parsed. For example, when the production rule UtExp :: UPTO(Integer, UtExp, UtExp) is reduced, the compiler will construct a UtExp object by call appropriate constructor of PLUtExp class with parameters of an integer and two UtExp objects. So the compiler has to remember these parameters. We use stack data structure to remember data objects. The stack is implemented through the chain. We use 4 stacks in the profile compiler, one stack for Java objects, one for identifiers, one for integers, one for relational operators. The reason for that we employ 4 stacks is that the structure of element of each stack is different from each other. The element of the stack for Java objects consists of an integer and a pointer to the element under itself. The integer is the index of object in the array storing that kind of objects. Because the compiler can infer the type of object popped from the stack using the production rule being parsed, we don't record object type in the stack. The element of the stack for identifiers consists of a pointer to a character array with IDENT_LEN size and a pointer to the element under itself. The character array contains an identifier. The structures of elements of the stacks for integers and relational operators are similar to that of the stack for identifiers. The only difference is that the character pointer points to different size character array. 6

7 6. Future Work 1. If we can find and use a Java-base compiler compiler that supports modular output, we can implement a profile compiler that translates profile directly into Java objects. The performance will be better. 2. Error checking of our compiler is simple. When parsing a profile with syntax errors, the profile compiler can output indication of meeting error, but can't output indication of where and what the error is. References [1]. Mitch Cherniack, Michael Franklin, Stan Zdonik, Profile_driven data management [2]. P.T. Breuer, J.P. Bowen, PRECCX user manual 7

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

COMPILER CONSTRUCTION LAB 2 THE SYMBOL TABLE. Tutorial 2 LABS. PHASES OF A COMPILER Source Program. Lab 2 Symbol table COMPILER CONSTRUCTION Lab 2 Symbol table LABS Lab 3 LR parsing and abstract syntax tree construction using ''bison' Lab 4 Semantic analysis (type checking) PHASES OF A COMPILER Source Program Lab 2 Symtab

More information

Grammars and Parsing, second week

Grammars and Parsing, second week Grammars and Parsing, second week Hayo Thielecke 17-18 October 2005 This is the material from the slides in a more printer-friendly layout. Contents 1 Overview 1 2 Recursive methods from grammar rules

More information

LL(k) Parsing. Predictive Parsers. LL(k) Parser Structure. Sample Parse Table. LL(1) Parsing Algorithm. Push RHS in Reverse Order 10/17/2012

LL(k) Parsing. Predictive Parsers. LL(k) Parser Structure. Sample Parse Table. LL(1) Parsing Algorithm. Push RHS in Reverse Order 10/17/2012 Predictive Parsers LL(k) Parsing Can we avoid backtracking? es, if for a given input symbol and given nonterminal, we can choose the alternative appropriately. his is possible if the first terminal of

More information

Compiler Design. Computer Science & Information Technology (CS) Rank under AIR 100

Compiler Design. Computer Science & Information Technology (CS) Rank under AIR 100 GATE- 2016-17 Postal Correspondence 1 Compiler Design Computer Science & Information Technology (CS) 20 Rank under AIR 100 Postal Correspondence Examination Oriented Theory, Practice Set Key concepts,

More information

Yacc: A Syntactic Analysers Generator

Yacc: A Syntactic Analysers Generator Yacc: A Syntactic Analysers Generator Compiler-Construction Tools The compiler writer uses specialised tools (in addition to those normally used for software development) that produce components that can

More information

CA Compiler Construction

CA 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 information

Lexical Analysis. Dragon Book Chapter 3 Formal Languages Regular Expressions Finite Automata Theory Lexical Analysis using Automata

Lexical Analysis. Dragon Book Chapter 3 Formal Languages Regular Expressions Finite Automata Theory Lexical Analysis using Automata Lexical Analysis Dragon Book Chapter 3 Formal Languages Regular Expressions Finite Automata Theory Lexical Analysis using Automata Phase Ordering of Front-Ends Lexical analysis (lexer) Break input string

More information

Building Compilers with Phoenix

Building Compilers with Phoenix Building Compilers with Phoenix Syntax-Directed Translation Structure of a Compiler Character Stream Intermediate Representation Lexical Analyzer Machine-Independent Optimizer token stream Intermediate

More information

Section A. A grammar that produces more than one parse tree for some sentences is said to be ambiguous.

Section A. A grammar that produces more than one parse tree for some sentences is said to be ambiguous. Section A 1. What do you meant by parser and its types? A parser for grammar G is a program that takes as input a string w and produces as output either a parse tree for w, if w is a sentence of G, or

More information

COLLEGE OF ENGINEERING, NASHIK. LANGUAGE TRANSLATOR

COLLEGE OF ENGINEERING, NASHIK. LANGUAGE TRANSLATOR Pune Vidyarthi Griha s COLLEGE OF ENGINEERING, NASHIK. LANGUAGE TRANSLATOR By Prof. Anand N. Gharu (Assistant Professor) PVGCOE Computer Dept.. 22nd Jan 2018 CONTENTS :- 1. Role of lexical analysis 2.

More information

CST-402(T): Language Processors

CST-402(T): Language Processors CST-402(T): Language Processors Course Outcomes: On successful completion of the course, students will be able to: 1. Exhibit role of various phases of compilation, with understanding of types of grammars

More information

Abstract Syntax Trees & Top-Down Parsing

Abstract Syntax Trees & Top-Down Parsing Abstract Syntax Trees & Top-Down Parsing Review of Parsing Given a language L(G), a parser consumes a sequence of tokens s and produces a parse tree Issues: How do we recognize that s L(G)? A parse tree

More information

Abstract Syntax Trees & Top-Down Parsing

Abstract Syntax Trees & Top-Down Parsing Review of Parsing Abstract Syntax Trees & Top-Down Parsing Given a language L(G), a parser consumes a sequence of tokens s and produces a parse tree Issues: How do we recognize that s L(G)? A parse tree

More information

A programming language requires two major definitions A simple one pass compiler

A programming language requires two major definitions A simple one pass compiler A programming language requires two major definitions A simple one pass compiler [Syntax: what the language looks like A context-free grammar written in BNF (Backus-Naur Form) usually suffices. [Semantics:

More information

Syntax-Directed Translation. Lecture 14

Syntax-Directed Translation. Lecture 14 Syntax-Directed Translation Lecture 14 (adapted from slides by R. Bodik) 9/27/2006 Prof. Hilfinger, Lecture 14 1 Motivation: parser as a translator syntax-directed translation stream of tokens parser ASTs,

More information

JavaCC Parser. The Compilation Task. Automated? JavaCC Parser

JavaCC Parser. The Compilation Task. Automated? JavaCC Parser JavaCC Parser The Compilation Task Input character stream Lexer stream Parser Abstract Syntax Tree Analyser Annotated AST Code Generator Code CC&P 2003 1 CC&P 2003 2 Automated? JavaCC Parser The initial

More information

Abstract Syntax Trees & Top-Down Parsing

Abstract Syntax Trees & Top-Down Parsing Review of Parsing Abstract Syntax Trees & Top-Down Parsing Given a language L(G), a parser consumes a sequence of tokens s and produces a parse tree Issues: How do we recognize that s L(G)? A parse tree

More information

The Structure of a Syntax-Directed Compiler

The 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 information

Structure of a compiler. More detailed overview of compiler front end. Today we ll take a quick look at typical parts of a compiler.

Structure of a compiler. More detailed overview of compiler front end. Today we ll take a quick look at typical parts of a compiler. More detailed overview of compiler front end Structure of a compiler Today we ll take a quick look at typical parts of a compiler. This is to give a feeling for the overall structure. source program lexical

More information

CSC 467 Lecture 3: Regular Expressions

CSC 467 Lecture 3: Regular Expressions CSC 467 Lecture 3: Regular Expressions Recall How we build a lexer by hand o Use fgetc/mmap to read input o Use a big switch to match patterns Homework exercise static TokenKind identifier( TokenKind token

More information

CS 415 Midterm Exam Spring SOLUTION

CS 415 Midterm Exam Spring SOLUTION CS 415 Midterm Exam Spring 2005 - SOLUTION Name Email Address Student ID # Pledge: This exam is closed note, closed book. Questions will be graded on quality of answer. Please supply the best answer you

More information

Regular Expressions. Agenda for Today. Grammar for a Tiny Language. Programming Language Specifications

Regular Expressions. Agenda for Today. Grammar for a Tiny Language. Programming Language Specifications Agenda for Today Regular Expressions CSE 413, Autumn 2005 Programming Languages Basic concepts of formal grammars Regular expressions Lexical specification of programming languages Using finite automata

More information

11. a b c d e. 12. a b c d e. 13. a b c d e. 14. a b c d e. 15. a b c d e

11. a b c d e. 12. a b c d e. 13. a b c d e. 14. a b c d e. 15. a b c d e CS-3160 Concepts of Programming Languages Spring 2015 EXAM #1 (Chapters 1-6) Name: SCORES MC: /75 PROB #1: /15 PROB #2: /10 TOTAL: /100 Multiple Choice Responses Each multiple choice question in the separate

More information

Syntax. Syntax. We will study three levels of syntax Lexical Defines the rules for tokens: literals, identifiers, etc.

Syntax. Syntax. We will study three levels of syntax Lexical Defines the rules for tokens: literals, identifiers, etc. Syntax Syntax Syntax defines what is grammatically valid in a programming language Set of grammatical rules E.g. in English, a sentence cannot begin with a period Must be formal and exact or there will

More information

flex is not a bad tool to use for doing modest text transformations and for programs that collect statistics on input.

flex is not a bad tool to use for doing modest text transformations and for programs that collect statistics on input. flex is not a bad tool to use for doing modest text transformations and for programs that collect statistics on input. More often than not, though, you ll want to use flex to generate a scanner that divides

More information

Chapter 3: Lexing and Parsing

Chapter 3: Lexing and Parsing Chapter 3: Lexing and Parsing Aarne Ranta Slides for the book Implementing Programming Languages. An Introduction to Compilers and Interpreters, College Publications, 2012. Lexing and Parsing* Deeper understanding

More information

Lexical and Syntax Analysis

Lexical and Syntax Analysis Lexical and Syntax Analysis In Text: Chapter 4 N. Meng, F. Poursardar Lexical and Syntactic Analysis Two steps to discover the syntactic structure of a program Lexical analysis (Scanner): to read the input

More information

COMPILER CONSTRUCTION Seminar 02 TDDB44

COMPILER CONSTRUCTION Seminar 02 TDDB44 COMPILER CONSTRUCTION Seminar 02 TDDB44 Martin Sjölund (martin.sjolund@liu.se) Adrian Horga (adrian.horga@liu.se) Department of Computer and Information Science Linköping University LABS Lab 3 LR parsing

More information

1 Lexical Considerations

1 Lexical Considerations Massachusetts Institute of Technology Department of Electrical Engineering and Computer Science 6.035, Spring 2013 Handout Decaf Language Thursday, Feb 7 The project for the course is to write a compiler

More information

Semantic Analysis. Lecture 9. February 7, 2018

Semantic 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 information

Syntax Analysis. Martin Sulzmann. Martin Sulzmann Syntax Analysis 1 / 38

Syntax Analysis. Martin Sulzmann. Martin Sulzmann Syntax Analysis 1 / 38 Syntax Analysis Martin Sulzmann Martin Sulzmann Syntax Analysis 1 / 38 Syntax Analysis Objective Recognize individual tokens as sentences of a language (beyond regular languages). Example 1 (OK) Program

More information

MIDTERM EXAM (Solutions)

MIDTERM EXAM (Solutions) MIDTERM EXAM (Solutions) Total Score: 100, Max. Score: 83, Min. Score: 26, Avg. Score: 57.3 1. (10 pts.) List all major categories of programming languages, outline their definitive characteristics and

More information

Syntax Analysis MIF08. Laure Gonnord

Syntax Analysis MIF08. Laure Gonnord Syntax Analysis MIF08 Laure Gonnord Laure.Gonnord@univ-lyon1.fr Goal of this chapter Understand the syntaxic structure of a language; Separate the different steps of syntax analysis; Be able to write a

More information

Parser and syntax analyzer. Context-Free Grammar Definition. Scanning and parsing. How bottom-up parsing works: Shift/Reduce tecnique.

Parser and syntax analyzer. Context-Free Grammar Definition. Scanning and parsing. How bottom-up parsing works: Shift/Reduce tecnique. POLITECNICO I TORINO Parser and syntax analyzer (01JEUHT) Formal Languages and Compilers Laboratory N 2 Stefano Scanzio mail: Web: http://www.skenz.it/compilers Given a non-ambiguous grammar and a sequence

More information

Using an LALR(1) Parser Generator

Using an LALR(1) Parser Generator Using an LALR(1) Parser Generator Yacc is an LALR(1) parser generator Developed by S.C. Johnson and others at AT&T Bell Labs Yacc is an acronym for Yet another compiler compiler Yacc generates an integrated

More information

Top down vs. bottom up parsing

Top down vs. bottom up parsing Parsing A grammar describes the strings that are syntactically legal A recogniser simply accepts or rejects strings A generator produces sentences in the language described by the grammar A parser constructs

More information

programming languages need to be precise a regular expression is one of the following: tokens are the building blocks of programs

programming languages need to be precise a regular expression is one of the following: tokens are the building blocks of programs Chapter 2 :: Programming Language Syntax Programming Language Pragmatics Michael L. Scott Introduction programming languages need to be precise natural languages less so both form (syntax) and meaning

More information

5. Semantic Analysis. Mircea Lungu Oscar Nierstrasz

5. 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 information

10/4/18. Lexical and Syntactic Analysis. Lexical and Syntax Analysis. Tokenizing Source. Scanner. Reasons to Separate Lexical and Syntactic Analysis

10/4/18. Lexical and Syntactic Analysis. Lexical and Syntax Analysis. Tokenizing Source. Scanner. Reasons to Separate Lexical and Syntactic Analysis Lexical and Syntactic Analysis Lexical and Syntax Analysis In Text: Chapter 4 Two steps to discover the syntactic structure of a program Lexical analysis (Scanner): to read the input characters and output

More information

A simple syntax-directed

A simple syntax-directed Syntax-directed is a grammaroriented compiling technique Programming languages: Syntax: what its programs look like? Semantic: what its programs mean? 1 A simple syntax-directed Lexical Syntax Character

More information

Lexing, Parsing. Laure Gonnord sept Master 1, ENS de Lyon

Lexing, Parsing. Laure Gonnord  sept Master 1, ENS de Lyon Lexing, Parsing Laure Gonnord http://laure.gonnord.org/pro/teaching/capm1.html Laure.Gonnord@ens-lyon.fr Master 1, ENS de Lyon sept 2017 Analysis Phase source code lexical analysis sequence of lexems (tokens)

More information

10/5/17. Lexical and Syntactic Analysis. Lexical and Syntax Analysis. Tokenizing Source. Scanner. Reasons to Separate Lexical and Syntax Analysis

10/5/17. Lexical and Syntactic Analysis. Lexical and Syntax Analysis. Tokenizing Source. Scanner. Reasons to Separate Lexical and Syntax Analysis Lexical and Syntactic Analysis Lexical and Syntax Analysis In Text: Chapter 4 Two steps to discover the syntactic structure of a program Lexical analysis (Scanner): to read the input characters and output

More information

Languages and Compilers

Languages and Compilers Principles of Software Engineering and Operational Systems Languages and Compilers SDAGE: Level I 2012-13 4. Lexical Analysis (Scanning) Dr Valery Adzhiev vadzhiev@bournemouth.ac.uk Office: TA-121 For

More information

CSCI312 Principles of Programming Languages!

CSCI312 Principles of Programming Languages! CSCI312 Principles of Programming Languages!! Chapter 3 Regular Expression and Lexer Xu Liu Recap! Copyright 2006 The McGraw-Hill Companies, Inc. Clite: Lexical Syntax! Input: a stream of characters from

More information

Left to right design 1

Left to right design 1 Left to right design 1 Left to right design The left to right design method suggests that the structure of the program should closely follow the structure of the input. The method is effective when the

More information

8 Parsing. Parsing. Top Down Parsing Methods. Parsing complexity. Top down vs. bottom up parsing. Top down vs. bottom up parsing

8 Parsing. Parsing. Top Down Parsing Methods. Parsing complexity. Top down vs. bottom up parsing. Top down vs. bottom up parsing 8 Parsing Parsing A grammar describes syntactically legal strings in a language A recogniser simply accepts or rejects strings A generator produces strings A parser constructs a parse tree for a string

More information

COMPILER DESIGN LECTURE NOTES

COMPILER DESIGN LECTURE NOTES COMPILER DESIGN LECTURE NOTES UNIT -1 1.1 OVERVIEW OF LANGUAGE PROCESSING SYSTEM 1.2 Preprocessor A preprocessor produce input to compilers. They may perform the following functions. 1. Macro processing:

More information

Alternatives for semantic processing

Alternatives for semantic processing Semantic Processing Copyright c 2000 by Antony L. Hosking. Permission to make digital or hard copies of part or all of this work for personal or classroom use is granted without fee provided that copies

More information

COMPILER DESIGN. For COMPUTER SCIENCE

COMPILER DESIGN. For COMPUTER SCIENCE COMPILER DESIGN For COMPUTER SCIENCE . COMPILER DESIGN SYLLABUS Lexical analysis, parsing, syntax-directed translation. Runtime environments. Intermediate code generation. ANALYSIS OF GATE PAPERS Exam

More information

Principles of Programming Languages COMP251: Syntax and Grammars

Principles of Programming Languages COMP251: Syntax and Grammars Principles of Programming Languages COMP251: Syntax and Grammars Prof. Dekai Wu Department of Computer Science and Engineering The Hong Kong University of Science and Technology Hong Kong, China Fall 2007

More information

CSEP 501 Compilers. Languages, Automata, Regular Expressions & Scanners Hal Perkins Winter /8/ Hal Perkins & UW CSE B-1

CSEP 501 Compilers. Languages, Automata, Regular Expressions & Scanners Hal Perkins Winter /8/ Hal Perkins & UW CSE B-1 CSEP 501 Compilers Languages, Automata, Regular Expressions & Scanners Hal Perkins Winter 2008 1/8/2008 2002-08 Hal Perkins & UW CSE B-1 Agenda Basic concepts of formal grammars (review) Regular expressions

More information

Types. Type checking. Why Do We Need Type Systems? Types and Operations. What is a type? Consensus

Types. 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 information

UNIT -1 1.1 OVERVIEW OF LANGUAGE PROCESSING SYSTEM 1.2 Preprocessor A preprocessor produce input to compilers. They may perform the following functions. 1. Macro processing: A preprocessor may allow a

More information

Final Term Papers 2013

Final Term Papers 2013 Solved by: Sahar (well wisher) Class BSCS 6 th Semester Subject CS606 (COMPILER CONSTRUCTION) Solution Type: Final Term Solved Subjective including Papers of Year : 2013,2012,2011,2010,2009 2006 Institute:

More information

LECTURE 6 Scanning Part 2

LECTURE 6 Scanning Part 2 LECTURE 6 Scanning Part 2 FROM DFA TO SCANNER In the previous lectures, we discussed how one might specify valid tokens in a language using regular expressions. We then discussed how we can create a recognizer

More information

Language Translation. Compilation vs. interpretation. Compilation diagram. Step 1: compile. Step 2: run. compiler. Compiled program. program.

Language Translation. Compilation vs. interpretation. Compilation diagram. Step 1: compile. Step 2: run. compiler. Compiled program. program. Language Translation Compilation vs. interpretation Compilation diagram Step 1: compile program compiler Compiled program Step 2: run input Compiled program output Language Translation compilation is translation

More information

Compiler Construction Assignment 3 Spring 2018

Compiler Construction Assignment 3 Spring 2018 Compiler Construction Assignment 3 Spring 2018 Robert van Engelen µc for the JVM µc (micro-c) is a small C-inspired programming language. In this assignment we will implement a compiler in C++ for µc.

More information

Software II: Principles of Programming Languages

Software II: Principles of Programming Languages Software II: Principles of Programming Languages Lecture 4 Language Translation: Lexical and Syntactic Analysis Translation A translator transforms source code (a program written in one language) into

More information

Lexical Considerations

Lexical Considerations Massachusetts Institute of Technology Department of Electrical Engineering and Computer Science 6.035, Fall 2005 Handout 6 Decaf Language Wednesday, September 7 The project for the course is to write a

More information

COP4020 Programming Assignment 2 - Fall 2016

COP4020 Programming Assignment 2 - Fall 2016 COP4020 Programming Assignment 2 - Fall 2016 To goal of this project is to implement in C or C++ (your choice) an interpreter that evaluates arithmetic expressions with variables in local scopes. The local

More information

LECTURE 3. Compiler Phases

LECTURE 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 information

CSE431 Translation of Computer Languages

CSE431 Translation of Computer Languages CSE431 Translation of Computer Languages Top Down Parsers Doug Shook Top Down Parsers Two forms: Recursive Descent Table Also known as LL(k) parsers: Read tokens from Left to right Produces a Leftmost

More information

PESIT Bangalore South Campus Hosur road, 1km before Electronic City, Bengaluru -100 Department of Computer Science and Engineering

PESIT Bangalore South Campus Hosur road, 1km before Electronic City, Bengaluru -100 Department of Computer Science and Engineering TEST 1 Date : 24 02 2015 Marks : 50 Subject & Code : Compiler Design ( 10CS63) Class : VI CSE A & B Name of faculty : Mrs. Shanthala P.T/ Mrs. Swati Gambhire Time : 8:30 10:00 AM SOLUTION MANUAL 1. a.

More information

UMBC CMSC 331 Final Exam

UMBC CMSC 331 Final Exam UMBC CMSC 331 Final Exam Name: UMBC Username: You have two hours to complete this closed book exam. We reserve the right to assign partial credit, and to deduct points for answers that are needlessly wordy

More information

5. Semantic Analysis!

5. 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 information

Compilation: a bit about the target architecture

Compilation: a bit about the target architecture Compilation: a bit about the target architecture MIF08 Laure Gonnord Laure.Gonnord@univ-lyon1.fr Plan 1 The LEIA architecture in a nutshell 2 One example Laure Gonnord (Lyon1/FST) Compilation: a bit about

More information

Formats of Translated Programs

Formats of Translated Programs Formats of Translated Programs Compilers differ in the format of the target code they generate. Target formats may be categorized as assembly language, relocatable binary, or memory-image. Assembly Language

More information

CS 230 Programming Languages

CS 230 Programming Languages CS 230 Programming Languages 10 / 16 / 2013 Instructor: Michael Eckmann Today s Topics Questions/comments? Top Down / Recursive Descent Parsers Top Down Parsers We have a left sentential form xa Expand

More information

Programming Project II

Programming Project II Programming Project II CS 322 Compiler Construction Winter Quarter 2006 Due: Saturday, January 28, at 11:59pm START EARLY! Description In this phase, you will produce a parser for our version of Pascal.

More information

Compiler Theory. (Semantic Analysis and Run-Time Environments)

Compiler 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 information

A lexical analyzer generator for Standard ML. Version 1.6.0, October 1994

A lexical analyzer generator for Standard ML. Version 1.6.0, October 1994 A lexical analyzer generator for Standard ML. Version 1.6.0, October 1994 Andrew W. Appel 1 James S. Mattson David R. Tarditi 2 1 Department of Computer Science, Princeton University 2 School of Computer

More information

Pioneering Compiler Design

Pioneering Compiler Design Pioneering Compiler Design NikhitaUpreti;Divya Bali&Aabha Sharma CSE,Dronacharya College of Engineering, Gurgaon, Haryana, India nikhita.upreti@gmail.comdivyabali16@gmail.com aabha6@gmail.com Abstract

More information

Lisp: Lab Information. Donald F. Ross

Lisp: Lab Information. Donald F. Ross Lisp: Lab Information Donald F. Ross General Model program source text stream What you need to write lexical analysis lexemes tokens syntax analysis is_id, is_number etc. + grammar rules + symbol table

More information

CSE 3302 Programming Languages Lecture 2: Syntax

CSE 3302 Programming Languages Lecture 2: Syntax CSE 3302 Programming Languages Lecture 2: Syntax (based on slides by Chengkai Li) Leonidas Fegaras University of Texas at Arlington CSE 3302 L2 Spring 2011 1 How do we define a PL? Specifying a PL: Syntax:

More information

Semantic Analysis and Type Checking

Semantic 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 information

22c:111 Programming Language Concepts. Fall Syntax III

22c:111 Programming Language Concepts. Fall Syntax III 22c:111 Programming Language Concepts Fall 2008 Syntax III Copyright 2007-08, The McGraw-Hill Company and Cesare Tinelli. These notes were originally developed by Allen Tucker, Robert Noonan and modified

More information

Automatic Scanning and Parsing using LEX and YACC

Automatic Scanning and Parsing using LEX and YACC Available Online at www.ijcsmc.com International Journal of Computer Science and Mobile Computing A Monthly Journal of Computer Science and Information Technology ISSN 2320 088X IMPACT FACTOR: 6.017 IJCSMC,

More information

Introduction to Compiler Design

Introduction to Compiler Design Introduction to Compiler Design Lecture 1 Chapters 1 and 2 Robb T. Koether Hampden-Sydney College Wed, Jan 14, 2015 Robb T. Koether (Hampden-Sydney College) Introduction to Compiler Design Wed, Jan 14,

More information

1. The output of lexical analyser is a) A set of RE b) Syntax Tree c) Set of Tokens d) String Character

1. The output of lexical analyser is a) A set of RE b) Syntax Tree c) Set of Tokens d) String Character 1. The output of lexical analyser is a) A set of RE b) Syntax Tree c) Set of Tokens d) String Character 2. The symbol table implementation is based on the property of locality of reference is a) Linear

More information

Cooking flex with Perl

Cooking flex with Perl Cooking flex with Perl Alberto Manuel Simões (albie@alfarrabio.di.uminho.pt) Abstract There are a lot of tools for parser generation using Perl. As we know, Perl has flexible data structures which makes

More information

Building Compilers with Phoenix

Building Compilers with Phoenix Building Compilers with Phoenix Parser Generators: ANTLR History of ANTLR ANother Tool for Language Recognition Terence Parr's dissertation: Obtaining Practical Variants of LL(k) and LR(k) for k > 1 PCCTS:

More information

COMP-421 Compiler Design. Presented by Dr Ioanna Dionysiou

COMP-421 Compiler Design. Presented by Dr Ioanna Dionysiou COMP-421 Compiler Design Presented by Dr Ioanna Dionysiou Administrative! Any questions about the syllabus?! Course Material available at www.cs.unic.ac.cy/ioanna! Next time reading assignment [ALSU07]

More information

Building a Parser III. CS164 3:30-5:00 TT 10 Evans. Prof. Bodik CS 164 Lecture 6 1

Building a Parser III. CS164 3:30-5:00 TT 10 Evans. Prof. Bodik CS 164 Lecture 6 1 Building a Parser III CS164 3:30-5:00 TT 10 Evans 1 Overview Finish recursive descent parser when it breaks down and how to fix it eliminating left recursion reordering productions Predictive parsers (aka

More information

Compilers and interpreters

Compilers and interpreters Lecture 5 Compilers and interpreters FAMNIT March, 2018. 1 Slides Lecture by Jan Karabaš Compilers and interpreters Programming II FAMNIT, 2015 Additional literature: Michael L. Scott, Programming Language

More information

UNIT III & IV. Bottom up parsing

UNIT III & IV. Bottom up parsing UNIT III & IV Bottom up parsing 5.0 Introduction Given a grammar and a sentence belonging to that grammar, if we have to show that the given sentence belongs to the given grammar, there are two methods.

More information

Context-Free Grammars and Parsers. Peter S. Housel January 2001

Context-Free Grammars and Parsers. Peter S. Housel January 2001 Context-Free Grammars and Parsers Peter S. Housel January 2001 Copyright This is the Monday grammar library, a set of facilities for representing context-free grammars and dynamically creating parser automata

More information

Context-free grammars

Context-free grammars Context-free grammars Section 4.2 Formal way of specifying rules about the structure/syntax of a program terminals - tokens non-terminals - represent higher-level structures of a program start symbol,

More information

How do LL(1) Parsers Build Syntax Trees?

How do LL(1) Parsers Build Syntax Trees? How do LL(1) Parsers Build Syntax Trees? So far our LL(1) parser has acted like a recognizer. It verifies that input token are syntactically correct, but it produces no output. Building complete (concrete)

More information

Tizen/Artik IoT Lecture Chapter 3. JerryScript Parser & VM

Tizen/Artik IoT Lecture Chapter 3. JerryScript Parser & VM 1 Tizen/Artik IoT Lecture Chapter 3. JerryScript Parser & VM Sungkyunkwan University Contents JerryScript Execution Flow JerryScript Parser Execution Flow Lexing Parsing Compact Bytecode (CBC) JerryScript

More information

LECTURE 7. Lex and Intro to Parsing

LECTURE 7. Lex and Intro to Parsing LECTURE 7 Lex and Intro to Parsing LEX Last lecture, we learned a little bit about how we can take our regular expressions (which specify our valid tokens) and create real programs that can recognize them.

More information

UNIVERSITY OF CALIFORNIA Department of Electrical Engineering and Computer Sciences Computer Science Division

UNIVERSITY OF CALIFORNIA Department of Electrical Engineering and Computer Sciences Computer Science Division UNIVERSITY OF CALIFORNIA Department of Electrical Engineering and Computer Sciences Computer Science Division Fall, 2005 Prof. R. Fateman CS 164 Assignment 3 and 4: Parsing for MiniJava Due: Tuesday, Oct.

More information

CSE 130 Programming Language Principles & Paradigms Lecture # 5. Chapter 4 Lexical and Syntax Analysis

CSE 130 Programming Language Principles & Paradigms Lecture # 5. Chapter 4 Lexical and Syntax Analysis Chapter 4 Lexical and Syntax Analysis Introduction - Language implementation systems must analyze source code, regardless of the specific implementation approach - Nearly all syntax analysis is based on

More information

What is a compiler? var a var b mov 3 a mov 4 r1 cmpi a r1 jge l_e mov 2 b jmp l_d l_e: mov 3 b l_d: ;done

What is a compiler? var a var b mov 3 a mov 4 r1 cmpi a r1 jge l_e mov 2 b jmp l_d l_e: mov 3 b l_d: ;done What is a compiler? What is a compiler? Traditionally: Program that analyzes and translates from a high level language (e.g., C++) to low-level assembly language that can be executed by hardware int a,

More information

Chapter 4. Lexical and Syntax Analysis

Chapter 4. Lexical and Syntax Analysis Chapter 4 Lexical and Syntax Analysis Chapter 4 Topics Introduction Lexical Analysis The Parsing Problem Recursive-Descent Parsing Bottom-Up Parsing Copyright 2012 Addison-Wesley. All rights reserved.

More information

Comp 411 Principles of Programming Languages Lecture 3 Parsing. Corky Cartwright January 11, 2019

Comp 411 Principles of Programming Languages Lecture 3 Parsing. Corky Cartwright January 11, 2019 Comp 411 Principles of Programming Languages Lecture 3 Parsing Corky Cartwright January 11, 2019 Top Down Parsing What is a context-free grammar (CFG)? A recursive definition of a set of strings; it is

More information

A parser is some system capable of constructing the derivation of any sentence in some language L(G) based on a grammar G.

A parser is some system capable of constructing the derivation of any sentence in some language L(G) based on a grammar G. Top Down Parsing 1 Parsers Formal Definitions of a Parser A parser is some system capable of constructing the derivation of any sentence in some language L(G) based on a grammar G. which talks about a

More information

The Structure of a Syntax-Directed Compiler

The Structure of a Syntax-Directed Compiler Source Program (Character Stream) Scanner Tokens Parser Abstract Syntax Tree (AST) Type Checker Decorated AST Translator Intermediate Representation Symbol Tables Optimizer (IR) IR Code Generator Target

More information

Compiler Construction: Parsing

Compiler Construction: Parsing Compiler Construction: Parsing Mandar Mitra Indian Statistical Institute M. Mitra (ISI) Parsing 1 / 33 Context-free grammars. Reference: Section 4.2 Formal way of specifying rules about the structure/syntax

More information

UNIT I INTRODUCTION TO COMPILER 1. What is a Complier? A Complier is a program that reads a program written in one language-the source language-and translates it in to an equivalent program in another

More information

CSE P 501 Compilers. LR Parsing Hal Perkins Spring UW CSE P 501 Spring 2018 D-1

CSE P 501 Compilers. LR Parsing Hal Perkins Spring UW CSE P 501 Spring 2018 D-1 CSE P 501 Compilers LR Parsing Hal Perkins Spring 2018 UW CSE P 501 Spring 2018 D-1 Agenda LR Parsing Table-driven Parsers Parser States Shift-Reduce and Reduce-Reduce conflicts UW CSE P 501 Spring 2018

More information