Automatic OO Parser Generation using Visitors for Ada 2005
|
|
- Natalie Magdalen Newton
- 5 years ago
- Views:
Transcription
1 Automatic OO Parser Generation using Visitors for Ada 2005 Martin C. Carlisle US Air Force Academy 2354 Fairchild Dr, Ste 6G101, USAFA, CO ABSTRACT We describe AdaGOOP 2005 (the Ada Generator of Object- Oriented Parsers). AdaGOOP 2005 takes a specification of tokens and an LALR(1) grammar and creates a lexer, a parser that automatically creates a parse tree, and a traversal of the parse tree using the visitor pattern. AdaGOOP generates output that is similar to that of the Java tool SableCC. It takes advantage of the new interface feature available in Ada 2005 to create a visitor. Categories and Subject Descriptors D.3.4 [Programming Languages]: Translator writing systems and compiler generation, D.1.5 [Programming Techniques] Object-oriented programming General Terms Languages, Theory Keywords AdaGOOP, automatic parser generation, visitor pattern, Ada INTRODUCTION A large number of tools have been developed to automate lexer and parser generation [1, 2, 3, 4, 5, 6, 7, 8, etc]. Probably the most well known of these are Lex and Yacc [4,5] and their GNU cousins Flex and Bison [3,7]. Although these tools were developed for C programmers, Ada versions (Aflex and Ayacc) were developed at the University of California-Irvine [1]. Using these tools, the programmer provides a set of regular expressions and an LALR(1) grammar, and obtains a completely functional lexer and parser. AdaGOOP 2005 is an Ada 2005 automatic parser generator built on top of the SCATC versions of aflex and ayacc [2]. As SableCC does, AdaGOOP automatically generates code to build a parse tree, and a traversal of the parse tree using the visitor pattern. This tool is distributed in the public Copyright 2006 Association for Computing Machinery. ACM acknowledges that this contribution was authored or co-authored by an employee, contractor or affiliate of the U.S. Government. As such, the Government retains a nonexclusive, royalty-free right to publish or reproduce this article, or to allow others to do so, for Government purposes only. SIGAda 06, November 12 16, 2006, Albuquerque, New Mexico, USA. Copyright 2006 ACM /06/ $5.00. domain as a service of the United States Air Force; but it is unsupported and without any warranty. It is currently available at: ftp://ftp.usafa.af.mil/pub/dfcs/carlisle/usafa/adagoop. 2. USING THE TOOL AdaGOOP is distributed as Ada 2005 source code. To use the tool, simply download and compile the source (adagoop.adb contains the main procedure). AdaGOOP outputs will be run through SCAFLEX and SCAYACC. Source code for these tools is distributed in subfolders of the same names (scaflex.adb and scayacc.adb are the main procedures). AdaGOOP is executed from a command prompt as follows: adagoop input_file prefix (e.g. adagoop ada05.g ada05) Prefix should be a simple name for the project. This name will be used several places in the output files. The input file to AdaGOOP consists of three parts: token_macros, tokens, and the grammar. Token macros are regular expressions that form parts of tokens. For example, token_macros DIGIT [0-9] INTEGER ({DIGIT}+) defines two macros, DIGIT and INTEGER, that can be used to create other tokens. Tokens are formed in the same fashion; however, their regular expressions can only contain token macros, not other tokens. The regular expression operators supported are given in Table 1. Comments should be defined with the token ignore, e.g. ignore "--"[^\n]* Both tokens and token macros should be specified 1 per line. Comments may be interspersed with --. This is why the ignore token above must have the -- in quotation marks. The final section, grammar gives an LALR(1) grammar. It should with a %start, indicating which non-terminal symbol is the starting symbol of the grammar, e.g. grammar %start A A : A token1 B token2 ; B : token2; 3
2 Each grammar rule consists of a non-terminal name, followed by a colon, followed by 1 or more sequences of terminals and nonterminals, separated by. Note that a null production is specified by simply having one of these sequences be empty. The rule is terminated with a semicolon. White space is irrelevant. A complete sample file is given in Appendix A. [0-9A-FZ] [^xyz] \n New line Any 1 of 0-9 A-F,Z Any 1 except x,y,z. Any 1 character \.,\( Period, Right paren X* 0 or more X s X+ 1 or more X s X? 0 or 1 X X Y Either X or Y X* Literally X* (ignore operators) {MACRO} Replace with macro defn () Precedence Table 1. Regular expression operators of AdaGOOP 3. ADAGOOP OUTPUT Throughout this section, prefix refers to the command-line argument passed to AdaGOOP. AdaGOOP generates prefix.l, an input file for scaflex. This file contains the specifications of tokens. The output file prefix.y is an input file for scayacc. It contains the grammar, plus code to build an object-oriented parse tree. Once AdaGOOP has been run, you can create the lexer and parser by running (for our example): scaflex prefix.l gnatchop -w prefix.a gnatchop -w prefix_io.a gnatchop -w prefix_dfa.a scayacc prefix.y gnatchop -w prefix.a gnatchop -w prefix_goto.a sed -e 1d prefix_tokens.a > prefix_modified_tokens.a gnatchop -w prefix_modified_tokens.a gnatchop -w prefix_shift_reduce.a Note gnatchop is needed only if your compilation environment (such as GNAT) requires package specifications and bodies to appear in separate files. sed is used only to delete the first line of prefix_tokens.a. We needed to add with context clauses to this file, but they appeared after the package declaration. To resolve this, we added the context clauses, another package declaration, and within a batch script used sed to delete the first package declaration. For the object-oriented parse tree, AdaGOOP creates an abstract object, Parseable, that will serve as the root of our hierarchy (it has no fields): type Parseable is abstract tagged null record; We also create a single object type, Parseable_Token Pto handle all nonterminal symbols. type Parseable_Token is new Parseable with record Line : Natural; Column : Natural; Token_String : String_Ptr; Token_Type : Token; -- enumeration type of all tokens Both Parseable and Parseable_Token are found in the package Prefix_Model. A production A => B C, where B and C are nonterminals, corresponds to a node in the parse tree containing pointers to the subtrees derived through B and C. We therefore create the following class declaration (which will appear in the package specification a_model.ads): type is new Parseable with record B_part : access B_nonterminal Class; C_part : access C_nonterminal Class; Since we have a single class for all terminal symbols, if we have A => B terminal1 C, we simply add a pointer to a Parseable_Token as the second field of the record. The parse tree then contains all of the information to completely recreate the original source text, with the exception of comment tokens (which are ignored). To address the issue of multiple productions for a single nonterminal, we insert an abstract class for the non-terminal, and have concrete classes corresponding to each possible production. For example, if we have A => B terminal1 C D, then AdGOOP outputs the following record declarations in the package A_Model: type is abstract new Parseable with null record; type _Ptr is access all Class; 4
3 type 1 is new B_part : access B_nonterminal Class Terminal1_Part : Parseable_Token_Ptr; C_part : access C_nonterminal Class; type 2 is new D_part : access D_nonterminal Class; The tool also will automatically number the fields in the case where a non-terminal or terminal appears more than once on the right hand side of a production. So, if we had A => B terminal1 B instead, the record would look like: type 1 is new B_part1 : access B_nonterminal Class Terminal1_Part : Parseable_Token_Ptr; B_part2 : access B_nonterminal Class; AdaGOOP also generates code for traversing the parse tree using the Visitor pattern [9]. Each class in the parse tree hierarchy has an acceptor method, which is used to dispatch to the appropriate visitor method: procedure Acceptor(This : access Parseable; I : access prefix_visitor_interface. Visit_prefix_Interface'Class) is abstract; This automatically generated interface specifies a visitor method that has no additional parameters and does not return a value. It is output to the file prefix_visitor_interface.ads. As can be seen from the following sample body (automatically generated), Acceptor merely calls the appropriate visitor method found in the interface: procedure Acceptor( This : access 2; I : access Visit_prefix_Interface'Class) is I.Visit_2(This); end Acceptor; Visit_prefix_Interface contains one visitor method for each leaf of the hierarchy, plus supports both pre-order and postorder depth first traversals by providing before and after methods that can be overloaded: limited with A_Model; limited with prefix_model; package prefix_visitor_interface is type Visit_prefix_Interface is interface; procedure Visit_Parseable_Token( T : access prefix_model. Parseable_Token procedure Before_1( procedure Visit_1( 'Class) is abstract; procedure After_1( procedure Before_2( procedure Visit_2( 'Class) is abstract; procedure After_2( end prefix_visitor_interface; A depth first traversal class, DFS, is generated into the package prefix_dfs. DFS implements the visitor interface, and its visit methods perform a depth first traversal of the parse tree. For example, following is the visitor method corresponding to the grammar rule A A PROCEDURE B: procedure Visit_1( A_Model.1'Class) is I_Classwide : access DFS'Class := I; I_Classwide.Before_1( N); N.A_part.Acceptor(I); I_Classwide.Visit_Parseable_Token( N.PROCEDURE_part); N.B_part.Acceptor(I); I_Classwide.After_1( N); end Visit_1; 5
4 This visitor method calls the before method (for pre-order traversals), then calls Acceptor for each of the children to dispatch to the appropriate visitor, and finally calls the after method (for post-order traversals). Tokens don t require dispatching, so the visit method can be called directly. It is interesting to note that Ada, unlike Java, does not perform dynamic dispatching by default. Therefore, it is necessary to convert the parameter I to a classwide type before calling Acceptor on each child so that dispatching occurs. To create your own visitor, you simply create a child class for DFS. In this child class, you override the before and after methods for those parse tree classes that you wish to process: limited with A_Model; with Prefix_DFS; package DFS_Example is type DFS is new Prefix_DFS.DFS with null record; overriding procedure After_1( A_Model.1'Class); overriding procedure Before_2( A_Model.2'Class); end DFS_Example; Creating a main program for a tool generated with AdaGOOP is simple. You need simply call the run procedure in the prefix_parser package with a filename, then use get_parse_tree to get the root of resulting parse tree. The depth first traversal is started by calling the method Acceptor on the root of the tree. with Ada.Command_Line; use Ada.Command_Line; with ada.text_io; use ada.text_io; with prefix_parser; with prefix_model; with DFS_Print; with a_model; procedure tool is type DFS_Access is access all DFS_Print.DFS'Class; Parse_Tree : prefix_model.parseable_ptr; Visitor : DFS_Access := new DFS_Print.DFS; if argument_count /= 1 then put_line("usage: tool filename"); return; end if; prefix_parser.run(argument(1)); parse_tree := prefix_parser.get_parse_tree; parse_tree.acceptor(visitor); end tool; 4. CONCLUSIONS AND FUTURE WORK AdaGOOP allows a programmer to quickly create a parser that generates an object-oriented parse tree. As a result, it is quite useful for generating simple language translators. Fagin [10] used the previous version of AdaGOOP to generate a translator from a subset of Ada 95 to NQC [11]. This allows developers to use Ada to program the Lego Mindstorms robots. Pedersen and Constantinides [12] created an Aspect Ada language using AdaGOOP. Future projects using AdaGOOP should be even easier with the new enhancements. One possibility for future work is to figure out how to include comments in the parse tree (since they do not appear in the grammar they are not currently included). This would allow AdaGOOP to be used to create a code reformatter. We would welcome additional contributions to this project (either grammars or improvements to the tool). 5. REFERENCES [1] Arcadia Project. Aflex and Ayacc. ~arcadia/aflex-ayacc/aflex-ayacc.html [2] Conn, Richard The Source Code Analysis Tool Construction Project. Proceedings of Tri-Ada 97, See also scatcdsk.htm [3] Free Software Foundation Bison-GNU Project-Free Software Foundation. bison.html [4] Johnson, S.C Yacc yet another compiler compiler. C.S. Technical Report #32. Murray Hill, NJ: Bell Telephone Laboratories. [5] Lesk, M.E., and Schmidt, E Lex a lexical analyzer generator. In Unix Programmer s Manual 2. Murray Hill, NJ: AT&T Bell Laboratories. [6] Mauney, Jon, and Fischer, Charles N An improvement to immediate error detection in Strong LL(1) parsers. Information Processing Letters 12(5): [7] Paxson, Vern Flex users manual. Ithaca, NY: Cornell University. [8] SableCC Home Page. [9] Martin, Robert C The Visitor Family of Design Patterns. In The Principles, Patterns and Practices of Agile Software Development. Prentice Hall. ISBN: [10] Fagin, B Using Ada-based robotics to teach computer science. In Proceedings of the 5th Annual SIGCSE/SIGCUE Conference on Innovation and Technology in Computer Science Education (Helsinki, Finland, July 11-13, 2000), [11] NQC Home Page. 6
5 [12] Pedersen, K. H. and Constantinides, C AspectAda: aspect oriented programming for Ada 95. Proceedings of SIGAda 2005 (Atlanta, GA, USA, November 13-17, 2005), A. SAMPLE ADAGOOP GRAMMAR token_macros DIGIT [0-9] INTEGER ({DIGIT}*) EXPONENT ([ee](\+? -){INTEGER}) DECIMAL_LITERAL {INTEGER}\.{DIGIT}{INTEGER}{EXPONENT}? tokens -- Reserved Words OPEN [oo][pp][ee][nn] PROCEDURE [pp][rr][oo][cc][ee][dd][uu][rr][ee] WRITE [ww][rr][ii][tt][ee] --Other NUMBER ({INTEGER} {DECIMAL_LITERAL}) grammar -- testing %start A A : A PROCEDURE B B; B : B OPEN C C; C : WRITE NUMBER; 7
An Automatic Object-Oriented Parser Generator for Ada
ABSTRACT An Automatic Object-Oriented Parser Generator for Ada Martin C. Carlisle Department of Computer Science 2354 Fairchild Dr., Suite 6K41 U.S. Air Force Academy, CO 80840-6234 carlislem@acm.org Although
More informationAn Automatic Visitor Generator for Ada
An Automatic Visitor Generator for Ada Martin C. Carlisle Department of Computer Science 2354 Fairchild Dr., Suite 1J133 US Air Force Academy, CO 80840 carlislem@acm.org Ricky E. Sward Department of Computer
More informationYacc: 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 informationStructure 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 informationRay Pereda Unicon Technical Report UTR-03. February 25, Abstract
iyacc: A Parser Generator for Icon Ray Pereda Unicon Technical Report UTR-03 February 25, 2000 Abstract iyacc is software tool for building language processors. It is based on byacc, a well-known tool
More informationUsing 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 informationA program that performs lexical analysis may be termed a lexer, tokenizer, or scanner, though scanner is also a term for the first stage of a lexer.
Compiler Design A compiler is computer software that transforms computer code written in one programming language (the source language) into another programming language (the target language). The name
More informationAutomatic 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 informationParser Design. Neil Mitchell. June 25, 2004
Parser Design Neil Mitchell June 25, 2004 1 Introduction A parser is a tool used to split a text stream, typically in some human readable form, into a representation suitable for understanding by a computer.
More informationProgramming 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 informationRay Pereda Unicon Technical Report UTR-02. February 25, Abstract
iflex: A Lexical Analyzer Generator for Icon Ray Pereda Unicon Technical Report UTR-02 February 25, 2000 Abstract iflex is software tool for building language processors. It is based on flex, a well-known
More informationAn introduction to Flex
An introduction to Flex 1 Introduction 1.1 What is Flex? Flex takes a set of descriptions of possible tokens and produces a scanner. 1.2 A short history Lex was developed at Bell Laboratories in the 1970s.
More informationIntroduction to Parsing. Lecture 8
Introduction to Parsing Lecture 8 Adapted from slides by G. Necula Outline Limitations of regular languages Parser overview Context-free grammars (CFG s) Derivations Languages and Automata Formal languages
More informationGrammars 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 informationUlex: A Lexical Analyzer Generator for Unicon
Ulex: A Lexical Analyzer Generator for Unicon Katrina Ray, Ray Pereda, and Clinton Jeffery Unicon Technical Report UTR 02a May 21, 2003 Abstract Ulex is a software tool for building language processors.
More informationSection 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 informationTree visitors. Context classes. CS664 Compiler Theory and Design LIU 1 of 11. Christopher League* 24 February 2016
CS664 Compiler Theory and Design LIU 1 of 11 Tree visitors Christopher League* 24 February 2016 Context classes ANTLR automatically generates heterogeneous representations of the parse trees for your grammar.
More informationSyntax-Directed Translation
Syntax-Directed Translation ALSU Textbook Chapter 5.1 5.4, 4.8, 4.9 Tsan-sheng Hsu tshsu@iis.sinica.edu.tw http://www.iis.sinica.edu.tw/~tshsu 1 What is syntax-directed translation? Definition: The compilation
More informationThe Structure of a Syntax-Directed Compiler
Source Program (Character Stream) Scanner Tokens Parser Abstract Syntax Tree Type Checker (AST) Decorated AST Translator Intermediate Representation Symbol Tables Optimizer (IR) IR Code Generator Target
More informationCOMPILER CONSTRUCTION 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 informationCS606- compiler instruction Solved MCQS From Midterm Papers
CS606- compiler instruction Solved MCQS From Midterm Papers March 06,2014 MC100401285 Moaaz.pk@gmail.com Mc100401285@gmail.com PSMD01 Final Term MCQ s and Quizzes CS606- compiler instruction If X is a
More information([1-9] 1[0-2]):[0-5][0-9](AM PM)? What does the above match? Matches clock time, may or may not be told if it is AM or PM.
What is the corresponding regex? [2-9]: ([1-9] 1[0-2]):[0-5][0-9](AM PM)? What does the above match? Matches clock time, may or may not be told if it is AM or PM. CS 230 - Spring 2018 4-1 More CFG Notation
More informationOutline. Limitations of regular languages. Introduction to Parsing. Parser overview. Context-free grammars (CFG s)
Outline Limitations of regular languages Introduction to Parsing Parser overview Lecture 8 Adapted from slides by G. Necula Context-free grammars (CFG s) Derivations Languages and Automata Formal languages
More informationA 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 informationChapter 4. Abstract Syntax
Chapter 4 Abstract Syntax Outline compiler must do more than recognize whether a sentence belongs to the language of a grammar it must do something useful with that sentence. The semantic actions of a
More informationObject-oriented Compiler Construction
1 Object-oriented Compiler Construction Extended Abstract Axel-Tobias Schreiner, Bernd Kühl University of Osnabrück, Germany {axel,bekuehl}@uos.de, http://www.inf.uos.de/talks/hc2 A compiler takes a program
More informationINTRODUCTION TO COMPILER AND ITS PHASES
INTRODUCTION TO COMPILER AND ITS PHASES Prajakta Pahade 1, Mahesh Dawale 2 1,2Computer science and Engineering, Prof. Ram Meghe College of Engineering and Management, Badnera, Amravati, Maharashtra, India.
More informationUNIVERSITY OF CALIFORNIA Department of Electrical Engineering and Computer Sciences Computer Science Division. P. N. Hilfinger
UNIVERSITY OF CALIFORNIA Department of Electrical Engineering and Computer Sciences Computer Science Division CS 164 Spring 1999 P. N. Hilfinger CS 164: Final Examination Name: Login: Please do not discuss
More informationMAD parsing and conversion code
Fermilab FERMILAB-TM-2115 June 2000 MAD parsing and conversion code Dmitri Mokhov 1,OlegKrivosheev 2, Elliott McCrory 2, Leo Michelotti 2 and Francois Ostiguy 2 1 University of Illinois at Urbana-Champaign
More informationCSCI312 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 informationCS664 Compiler Theory and Design LIU 1 of 16 ANTLR. Christopher League* 17 February Figure 1: ANTLR plugin installer
CS664 Compiler Theory and Design LIU 1 of 16 ANTLR Christopher League* 17 February 2016 ANTLR is a parser generator. There are other similar tools, such as yacc, flex, bison, etc. We ll be using ANTLR
More informationIntroduction 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 informationUNIVERSITY 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 informationCS 426 Fall Machine Problem 1. Machine Problem 1. CS 426 Compiler Construction Fall Semester 2017
CS 426 Fall 2017 1 Machine Problem 1 Machine Problem 1 CS 426 Compiler Construction Fall Semester 2017 Handed Out: September 6, 2017. Due: September 21, 2017, 5:00 p.m. The machine problems for this semester
More informationParser Tools: lex and yacc-style Parsing
Parser Tools: lex and yacc-style Parsing Version 6.11.0.6 Scott Owens January 6, 2018 This documentation assumes familiarity with lex and yacc style lexer and parser generators. 1 Contents 1 Lexers 3 1.1
More informationCS164: Programming Assignment 2 Dlex Lexer Generator and Decaf Lexer
CS164: Programming Assignment 2 Dlex Lexer Generator and Decaf Lexer Assigned: Thursday, September 16, 2004 Due: Tuesday, September 28, 2004, at 11:59pm September 16, 2004 1 Introduction Overview In this
More informationCJT^jL rafting Cm ompiler
CJT^jL rafting Cm ompiler ij CHARLES N. FISCHER Computer Sciences University of Wisconsin Madison RON K. CYTRON Computer Science and Engineering Washington University RICHARD J. LeBLANC, Jr. Computer Science
More informationflex 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 information2.2 Syntax Definition
42 CHAPTER 2. A SIMPLE SYNTAX-DIRECTED TRANSLATOR sequence of "three-address" instructions; a more complete example appears in Fig. 2.2. This form of intermediate code takes its name from instructions
More informationBuilding 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 informationBottom-Up Parsing. Lecture 11-12
Bottom-Up Parsing Lecture 11-12 (From slides by G. Necula & R. Bodik) 2/20/08 Prof. Hilfinger CS164 Lecture 11 1 Administrivia Test I during class on 10 March. 2/20/08 Prof. Hilfinger CS164 Lecture 11
More informationLR Parsing of CFG's with Restrictions
LR Parsing of CFG's with Restrictions B. J. McKenzie University of Canterbury, Christchurch, New Zealand Postal Address: Dr. B.J.McKenzie, Phone: +64 3 642-349 Department of Computer Science, Fax: +64
More informationProfile Language Compiler Chao Gong, Paaras Kumar May 7, 2001
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
More information(F)lex & Bison/Yacc. Language Tools for C/C++ CS 550 Programming Languages. Alexander Gutierrez
(F)lex & Bison/Yacc Language Tools for C/C++ CS 550 Programming Languages Alexander Gutierrez Lex and Flex Overview Lex/Flex is a scanner generator for C/C++ It reads pairs of regular expressions and code
More informationBetter Extensibility through Modular Syntax. Robert Grimm New York University
Better Extensibility through Modular Syntax Robert Grimm New York University Syntax Matters More complex syntactic specifications Extensions to existing programming languages Transactions, event-based
More informationAnatomy of a Compiler. Overview of Semantic Analysis. The Compiler So Far. Why a Separate Semantic Analysis?
Anatomy of a Compiler Program (character stream) Lexical Analyzer (Scanner) Syntax Analyzer (Parser) Semantic Analysis Parse Tree Intermediate Code Generator Intermediate Code Optimizer Code Generator
More informationCST-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 informationPrinciples of Programming Languages [PLP-2015] Detailed Syllabus
Principles of Programming Languages [PLP-2015] Detailed Syllabus This document lists the topics presented along the course. The PDF slides published on the course web page (http://www.di.unipi.it/~andrea/didattica/plp-15/)
More informationLECTURE 3. Compiler Phases
LECTURE 3 Compiler Phases COMPILER PHASES Compilation of a program proceeds through a fixed series of phases. Each phase uses an (intermediate) form of the program produced by an earlier phase. Subsequent
More informationCompiler 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 informationEvaluation Scheme L T P Total Credit Theory Mid Sem Exam
DESIGN OF LANGUAGE PROCESSORS Semester II (Computer Engineering) SUB CODE: MECE201 Teaching Scheme (Credits and Hours): Teaching scheme Total Evaluation Scheme L T P Total Credit Theory Mid Sem Exam CIA
More informationA 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.
A Bison Manual 1 Overview Bison (and its predecessor yacc) is a tool that take a file of the productions for a context-free grammar and converts them into the tables for an LALR(1) parser. Bison produces
More informationIn One Slide. Outline. LR Parsing. Table Construction
LR Parsing Table Construction #1 In One Slide An LR(1) parsing table can be constructed automatically from a CFG. An LR(1) item is a pair made up of a production and a lookahead token; it represents a
More informationCOMPILER 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 informationLR Parsing LALR Parser Generators
LR Parsing LALR Parser Generators Outline Review of bottom-up parsing Computing the parsing DFA Using parser generators 2 Bottom-up Parsing (Review) A bottom-up parser rewrites the input string to the
More informationAn Implementation of Object-Oriented Program Transformation for. Thought-Guided Debugging
Dartmouth College Computer Science Technical Report TR2001-395 An Implementation of Object-Oriented Program Transformation for Thought-Guided Debugging Tiffany Wong Dartmouth College Department of Computer
More informationSimple LR (SLR) LR(0) Drawbacks LR(1) SLR Parse. LR(1) Start State and Reduce. LR(1) Items 10/3/2012
LR(0) Drawbacks Consider the unambiguous augmented grammar: 0.) S E $ 1.) E T + E 2.) E T 3.) T x If we build the LR(0) DFA table, we find that there is a shift-reduce conflict. This arises because the
More informationParser Tools: lex and yacc-style Parsing
Parser Tools: lex and yacc-style Parsing Version 5.0 Scott Owens June 6, 2010 This documentation assumes familiarity with lex and yacc style lexer and parser generators. 1 Contents 1 Lexers 3 1.1 Creating
More informationCompiler Lab. Introduction to tools Lex and Yacc
Compiler Lab Introduction to tools Lex and Yacc Assignment1 Implement a simple calculator with tokens recognized using Lex/Flex and parsing and semantic actions done using Yacc/Bison. Calculator Input:
More informationGenerators for High-Speed Front-Ends. J. Grosch DR. JOSEF GROSCH COCOLAB - DATENVERARBEITUNG GERMANY
Generators for High-Speed Front-Ends J. Grosch DR. JOSEF GROSCH COCOLAB - DATENVERARBEITUNG GERMANY Cocktail Toolbox for Compiler Construction Generators for High-Speed Front-Ends Josef Grosch Sept. 28,
More informationADTS, GRAMMARS, PARSING, TREE TRAVERSALS
3//15 1 AD: Abstract Data ype 2 Just like a type: Bunch of values together with operations on them. Used often in discussing data structures Important: he definition says ntthing about the implementation,
More informationHow 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 informationProject Compiler. CS031 TA Help Session November 28, 2011
Project Compiler CS031 TA Help Session November 28, 2011 Motivation Generally, it s easier to program in higher-level languages than in assembly. Our goal is to automate the conversion from a higher-level
More informationIntroduction to Parsing. Lecture 5
Introduction to Parsing Lecture 5 1 Outline Regular languages revisited Parser overview Context-free grammars (CFG s) Derivations Ambiguity 2 Languages and Automata Formal languages are very important
More informationL L G E N. Generator of syntax analyzier (parser)
L L G E N Generator of syntax analyzier (parser) GENERATOR L LGEN The main task of generator LLGEN is generate a parser (in C), which use the recursive go down method without recurrence The source code
More informationProject 1: Scheme Pretty-Printer
Project 1: Scheme Pretty-Printer CSC 4101, Fall 2017 Due: 7 October 2017 For this programming assignment, you will implement a pretty-printer for a subset of Scheme in either C++ or Java. The code should
More informationCSE 12 Abstract Syntax Trees
CSE 12 Abstract Syntax Trees Compilers and Interpreters Parse Trees and Abstract Syntax Trees (AST's) Creating and Evaluating AST's The Table ADT and Symbol Tables 16 Using Algorithms and Data Structures
More informationConflicts in LR Parsing and More LR Parsing Types
Conflicts in LR Parsing and More LR Parsing Types Lecture 10 Dr. Sean Peisert ECS 142 Spring 2009 1 Status Project 2 Due Friday, Apr. 24, 11:55pm The usual lecture time is being replaced by a discussion
More informationKALASALINGAM UNIVERSITY ANAND NAGAR, KRISHNAN KOIL DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING ODD SEMESTER COURSE PLAN
Subject with Code KALASALINGAM UNIVERSITY ANAND NAGAR, KRISHNAN KOIL 626 126 DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING ODD SEMESTER 2013-2014 Semester/Branch/Section Credits : 3 COURSE PLAN : Compiler
More informationSyntactic Analysis. The Big Picture Again. Grammar. ICS312 Machine-Level and Systems Programming
The Big Picture Again Syntactic Analysis source code Scanner Parser Opt1 Opt2... Optn Instruction Selection Register Allocation Instruction Scheduling machine code ICS312 Machine-Level and Systems Programming
More informationProgramming Assignment I Due Thursday, October 7, 2010 at 11:59pm
Programming Assignment I Due Thursday, October 7, 2010 at 11:59pm 1 Overview of the Programming Project Programming assignments I IV will direct you to design and build a compiler for Cool. Each assignment
More informationPrinciples of Compiler Design Prof. Y. N. Srikant Department of Computer Science and Automation Indian Institute of Science, Bangalore
(Refer Slide Time: 00:20) Principles of Compiler Design Prof. Y. N. Srikant Department of Computer Science and Automation Indian Institute of Science, Bangalore Lecture - 4 Lexical Analysis-Part-3 Welcome
More informationADTS, GRAMMARS, PARSING, TREE TRAVERSALS
1 Pointers to material ADS, GRAMMARS, PARSING, R RAVRSALS Lecture 13 CS110 all 016 Parse trees: text, section 3.36 Definition of Java Language, sometimes useful: docs.oracle.com/javase/specs/jls/se8/html/index.html
More informationCIS265/ Trees Red-Black Trees. Some of the following material is from:
CIS265/506 2-3-4 Trees Red-Black Trees Some of the following material is from: Data Structures for Java William H. Ford William R. Topp ISBN 0-13-047724-9 Chapter 27 Balanced Search Trees Bret Ford 2005,
More informationA Simple Syntax-Directed Translator
Chapter 2 A Simple Syntax-Directed Translator 1-1 Introduction The analysis phase of a compiler breaks up a source program into constituent pieces and produces an internal representation for it, called
More informationDesign &Development of an Interpreted Programming Language
American Journal of Engineering Research (AJER) 2016 American Journal of Engineering Research (AJER) e-issn: 2320-0847 p-issn : 2320-0936 Volume-5, Issue-6, pp-43-47 www.ajer.org Research Paper Open Access
More informationEDAN65: Compilers, Lecture 06 A LR parsing. Görel Hedin Revised:
EDAN65: Compilers, Lecture 06 A LR parsing Görel Hedin Revised: 2017-09-11 This lecture Regular expressions Context-free grammar Attribute grammar Lexical analyzer (scanner) Syntactic analyzer (parser)
More informationLexical and Syntax Analysis
Lexical and Syntax Analysis (of Programming Languages) Bison, a Parser Generator Lexical and Syntax Analysis (of Programming Languages) Bison, a Parser Generator Bison: a parser generator Bison Specification
More informationUNIVERSITY OF CALIFORNIA Department of Electrical Engineering and Computer Sciences Computer Science Division. P. N. Hilfinger
UNIVERSITY OF CALIFORNIA Department of Electrical Engineering and Computer Sciences Computer Science Division CS 164 Spring 2010 P. N. Hilfinger CS 164: Final Examination (revised) Name: Login: You have
More informationDerivations vs Parses. Example. Parse Tree. Ambiguity. Different Parse Trees. Context Free Grammars 9/18/2012
Derivations vs Parses Grammar is used to derive string or construct parser Context ree Grammars A derivation is a sequence of applications of rules Starting from the start symbol S......... (sentence)
More informationUNIVERSITY OF CALIFORNIA Department of Electrical Engineering and Computer Sciences Computer Science Division. P. N. Hilfinger
UNIVERSITY OF CALIFORNIA Department of Electrical Engineering and Computer Sciences Computer Science Division CS 164 Spring 2009 P. N. Hilfinger CS 164: Final Examination (corrected) Name: Login: You have
More informationcmps104a 2002q4 Assignment 3 LALR(1) Parser page 1
cmps104a 2002q4 Assignment 3 LALR(1) Parser page 1 $Id: asg3-parser.mm,v 327.1 2002-10-07 13:59:46-07 - - $ 1. Summary Write a main program, string table manager, lexical analyzer, and parser for the language
More informationLex (Lesk & Schmidt[Lesk75]) was developed in the early to mid- 70 s.
Lex (October 17, 2003) 1 1 Lexical Analysis What is Lexical Analysis? Process of breaking input into tokens. Sometimes called scanning or tokenizing. Lexical Analyzer scans the input stream and converts
More informationCS4850 SummerII Lex Primer. Usage Paradigm of Lex. Lex is a tool for creating lexical analyzers. Lexical analyzers tokenize input streams.
CS4850 SummerII 2006 Lexical Analysis and Lex (contd) 4.1 Lex Primer Lex is a tool for creating lexical analyzers. Lexical analyzers tokenize input streams. Tokens are the terminals of a language. Regular
More informationBottom-Up Parsing. Lecture 11-12
Bottom-Up Parsing Lecture 11-12 (From slides by G. Necula & R. Bodik) 9/22/06 Prof. Hilfinger CS164 Lecture 11 1 Bottom-Up Parsing Bottom-up parsing is more general than topdown parsing And just as efficient
More informationLanguage Processing note 12 CS
CS2 Language Processing note 12 Automatic generation of parsers In this note we describe how one may automatically generate a parse table from a given grammar (assuming the grammar is LL(1)). This and
More informationPreparing for the ACW Languages & Compilers
Preparing for the ACW 08348 Languages & Compilers Introductory Lab There is an Introductory Lab Just involves copying the lab task See separate Lab slides Language Roadmaps Convenient way of showing syntax
More informationChapter 3 Parsing. time, arrow, banana, flies, like, a, an, the, fruit
Chapter 3 Parsing EXERCISES 3.1 Translate each of these regular expressions into a context-free grammar. a. ((xy*x) (yx*y))? b. ((0 1) + "."(0 1)*) ((0 1)*"."(0 1) + ) *3.2 Write a grammar for English
More informationContext-Free Grammars
Context-Free Grammars Lecture 7 http://webwitch.dreamhost.com/grammar.girl/ Outline Scanner vs. parser Why regular expressions are not enough Grammars (context-free grammars) grammar rules derivations
More informationCompiler Design Prof. Y. N. Srikant Department of Computer Science and Automation Indian Institute of Science, Bangalore
Compiler Design Prof. Y. N. Srikant Department of Computer Science and Automation Indian Institute of Science, Bangalore Module No. # 01 Lecture No. # 01 An Overview of a Compiler This is a lecture about
More informationUMBC 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 informationGrammars and Parsing for SSC1
Grammars and Parsing for SSC1 Hayo Thielecke http://www.cs.bham.ac.uk/~hxt/parsing.html 1 Introduction Outline of the parsing part of the module Contents 1 Introduction 1 2 Grammars and derivations 2 3
More informationADTS, GRAMMARS, PARSING, TREE TRAVERSALS
1 Prelim 1 2 Where: Kennedy Auditorium When: A-Lib: 5:30-7 Lie-Z: 7:30-9 (unless we explicitly notified you otherwise) ADS, GRAMMARS, PARSING, R RAVRSALS Lecture 13 CS2110 Spring 2016 Pointers to material
More informationCSC 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 informationADTS, GRAMMARS, PARSING, TREE TRAVERSALS. Regrades 10/6/15. Prelim 1. Prelim 1. Expression trees. Pointers to material
1 Prelim 1 2 Max: 99 Mean: 71.2 Median: 73 Std Dev: 1.6 ADS, GRAMMARS, PARSING, R RAVRSALS Lecture 12 CS2110 Spring 2015 3 Prelim 1 Score Grade % 90-99 A 82-89 A-/A 26% 70-82 B/B 62-69 B-/B 50% 50-59 C-/C
More informationLECTURE 11. Semantic Analysis and Yacc
LECTURE 11 Semantic Analysis and Yacc REVIEW OF LAST LECTURE In the last lecture, we introduced the basic idea behind semantic analysis. Instead of merely specifying valid structures with a context-free
More informationProgramming Assignment II
Programming Assignment II 1 Overview of the Programming Project Programming assignments II V will direct you to design and build a compiler for Cool. Each assignment will cover one component of the compiler:
More informationContext-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 information11. 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 informationMP 3 A Lexer for MiniJava
MP 3 A Lexer for MiniJava CS 421 Spring 2012 Revision 1.0 Assigned Wednesday, February 1, 2012 Due Tuesday, February 7, at 09:30 Extension 48 hours (penalty 20% of total points possible) Total points 43
More information