cs 153: concepts of compiler design august 26 class meeting department of computer science san jose...
TRANSCRIPT
![Page 1: CS 153: Concepts of Compiler Design August 26 Class Meeting Department of Computer Science San Jose State University Fall 2015 Instructor: Ron Mak mak](https://reader031.vdocuments.net/reader031/viewer/2022020417/56649f175503460f94c2e312/html5/thumbnails/1.jpg)
1
CS 153: Concepts of Compiler DesignAugust 26 Class Meeting
Department of Computer ScienceSan Jose State University
Fall 2015Instructor: Ron Mak
www.cs.sjsu.edu/~mak
![Page 2: CS 153: Concepts of Compiler Design August 26 Class Meeting Department of Computer Science San Jose State University Fall 2015 Instructor: Ron Mak mak](https://reader031.vdocuments.net/reader031/viewer/2022020417/56649f175503460f94c2e312/html5/thumbnails/2.jpg)
Computer Science Dept.Fall 2015: August 26
CS 153: Concepts of Compiler Design© R. Mak
2
What Else Can Compilers Do?
Compilers allow you to program in a high-level language and think about your algorithms, not about machine architecture.
Compilers provide language portability.
You can run your C++ and Java programs on different machines because their compilers enforce language standards.
![Page 3: CS 153: Concepts of Compiler Design August 26 Class Meeting Department of Computer Science San Jose State University Fall 2015 Instructor: Ron Mak mak](https://reader031.vdocuments.net/reader031/viewer/2022020417/56649f175503460f94c2e312/html5/thumbnails/3.jpg)
Computer Science Dept.Fall 2015: August 26
CS 153: Concepts of Compiler Design© R. Mak
3
What Else Can Compilers Do? cont’d
Compilers can optimize and improve the execution of your programs.
Optimize the object code for speed. Optimize the object code for size. Optimize the object code for power consumption.
![Page 4: CS 153: Concepts of Compiler Design August 26 Class Meeting Department of Computer Science San Jose State University Fall 2015 Instructor: Ron Mak mak](https://reader031.vdocuments.net/reader031/viewer/2022020417/56649f175503460f94c2e312/html5/thumbnails/4.jpg)
Computer Science Dept.Fall 2015: August 26
CS 153: Concepts of Compiler Design© R. Mak
4
Course Overview
First half: Modify a Pascal interpreter.
The interpreter is written in Java (the implementation language).
The source programs are written in Pascal (the source language).
The implementation code for the interpreter will be presented to you incrementally.
Midterm
![Page 5: CS 153: Concepts of Compiler Design August 26 Class Meeting Department of Computer Science San Jose State University Fall 2015 Instructor: Ron Mak mak](https://reader031.vdocuments.net/reader031/viewer/2022020417/56649f175503460f94c2e312/html5/thumbnails/5.jpg)
Computer Science Dept.Fall 2015: August 26
CS 153: Concepts of Compiler Design© R. Mak
5
Course Overview, cont’d
Second half: Your compiler project.
JavaCC compiler-compiler Java Virtual Machine (JVM) architecture Jasmin assembly language Back end code generator
Final
![Page 6: CS 153: Concepts of Compiler Design August 26 Class Meeting Department of Computer Science San Jose State University Fall 2015 Instructor: Ron Mak mak](https://reader031.vdocuments.net/reader031/viewer/2022020417/56649f175503460f94c2e312/html5/thumbnails/6.jpg)
Computer Science Dept.Fall 2015: August 26
CS 153: Concepts of Compiler Design© R. Mak
6
Assignments
All but the first assignment done by the teams.
For each team assignment, turn in one per team.
The assignments will help you complete your compiler project.
At least one week to do each one.
![Page 7: CS 153: Concepts of Compiler Design August 26 Class Meeting Department of Computer Science San Jose State University Fall 2015 Instructor: Ron Mak mak](https://reader031.vdocuments.net/reader031/viewer/2022020417/56649f175503460f94c2e312/html5/thumbnails/7.jpg)
Computer Science Dept.Fall 2015: August 26
CS 153: Concepts of Compiler Design© R. Mak
7
Compiler Project
Each team develops a working compiler for a procedure-oriented source language.
A more complete subset of Pascal. Any other procedure-oriented language. Invent your own language. No Lisp-like languages.
Start thinking about and planning for your project early in the semester!
![Page 8: CS 153: Concepts of Compiler Design August 26 Class Meeting Department of Computer Science San Jose State University Fall 2015 Instructor: Ron Mak mak](https://reader031.vdocuments.net/reader031/viewer/2022020417/56649f175503460f94c2e312/html5/thumbnails/8.jpg)
Computer Science Dept.Fall 2015: August 26
CS 153: Concepts of Compiler Design© R. Mak
8
Take roll!
![Page 9: CS 153: Concepts of Compiler Design August 26 Class Meeting Department of Computer Science San Jose State University Fall 2015 Instructor: Ron Mak mak](https://reader031.vdocuments.net/reader031/viewer/2022020417/56649f175503460f94c2e312/html5/thumbnails/9.jpg)
Computer Science Dept.Fall 2015: August 26
CS 153: Concepts of Compiler Design© R. Mak
9
Conceptual Design (Version 2) We can architect a compiler with three major parts:
![Page 10: CS 153: Concepts of Compiler Design August 26 Class Meeting Department of Computer Science San Jose State University Fall 2015 Instructor: Ron Mak mak](https://reader031.vdocuments.net/reader031/viewer/2022020417/56649f175503460f94c2e312/html5/thumbnails/10.jpg)
Computer Science Dept.Fall 2015: August 26
CS 153: Concepts of Compiler Design© R. Mak
10
Major Parts of a Compiler Front end
Parser, Scanner, Source, Token
Intermediate tier Intermediate code (icode)
“Predigested” form of the source code that the back end can process efficiently.
Example: parse trees AKA intermediate representation (IR)
Symbol table (symtab) Stores information about the
symbols (such as the identifiers) contained in the source program.
Back end
Code generator Processes the icode and the symtab
in order to generate the object code.
Only the front end needs to be source language-specific.
The intermediate tier and the back end can be language-independent!
![Page 11: CS 153: Concepts of Compiler Design August 26 Class Meeting Department of Computer Science San Jose State University Fall 2015 Instructor: Ron Mak mak](https://reader031.vdocuments.net/reader031/viewer/2022020417/56649f175503460f94c2e312/html5/thumbnails/11.jpg)
Computer Science Dept.Fall 2015: August 26
CS 153: Concepts of Compiler Design© R. Mak
11
What about Interpreters?
An interpreter executes a source program instead of generating object code.
It executes a source program using the intermediate code and the symbol table.
Demo
![Page 12: CS 153: Concepts of Compiler Design August 26 Class Meeting Department of Computer Science San Jose State University Fall 2015 Instructor: Ron Mak mak](https://reader031.vdocuments.net/reader031/viewer/2022020417/56649f175503460f94c2e312/html5/thumbnails/12.jpg)
Computer Science Dept.Fall 2015: August 26
CS 153: Concepts of Compiler Design© R. Mak
12
Conceptual Design (Version 3)
A compiler and an interpreter can both use the
same front end and intermediate tier.
![Page 13: CS 153: Concepts of Compiler Design August 26 Class Meeting Department of Computer Science San Jose State University Fall 2015 Instructor: Ron Mak mak](https://reader031.vdocuments.net/reader031/viewer/2022020417/56649f175503460f94c2e312/html5/thumbnails/13.jpg)
Computer Science Dept.Fall 2015: August 26
CS 153: Concepts of Compiler Design© R. Mak
13
Comparing Compilers and Interpreters
A compiler generates object code, but an interpreter does not.
Executing the source program from object code
can be several orders of magnitude faster than executing the program by interpreting the intermediate code and the symbol table.
But an interpreter requires less effort to get a source program to execute faster turnaround time
Demo
![Page 14: CS 153: Concepts of Compiler Design August 26 Class Meeting Department of Computer Science San Jose State University Fall 2015 Instructor: Ron Mak mak](https://reader031.vdocuments.net/reader031/viewer/2022020417/56649f175503460f94c2e312/html5/thumbnails/14.jpg)
Computer Science Dept.Fall 2015: August 26
CS 153: Concepts of Compiler Design© R. Mak
14
Comparing Compilers and Interpreters, cont’d
An interpreter maintains control of the source program’s execution.
Interpreters often come with interactive source-level debuggers that allow you to refer to source program elements, such as variable names.
AKA symbolic debugger
![Page 15: CS 153: Concepts of Compiler Design August 26 Class Meeting Department of Computer Science San Jose State University Fall 2015 Instructor: Ron Mak mak](https://reader031.vdocuments.net/reader031/viewer/2022020417/56649f175503460f94c2e312/html5/thumbnails/15.jpg)
Computer Science Dept.Fall 2015: August 26
CS 153: Concepts of Compiler Design© R. Mak
15
Therefore ...
Interpreters are useful during program development. Compilers are useful to run released programs
in a production environment.
In this course, you will ...
Modify an interpreter for the Pascal language. Develop a compiler for a language of your choice. You can invent your own programming language!
Comparing Compilers and Interpreters, cont’d
![Page 16: CS 153: Concepts of Compiler Design August 26 Class Meeting Department of Computer Science San Jose State University Fall 2015 Instructor: Ron Mak mak](https://reader031.vdocuments.net/reader031/viewer/2022020417/56649f175503460f94c2e312/html5/thumbnails/16.jpg)
Computer Science Dept.Fall 2015: August 26
CS 153: Concepts of Compiler Design© R. Mak
16
Key Steps for Success
Whenever you develop a complex program such as a compiler or an interpreter, key first steps for success are:
1. Design and implement a proper framework. 2. Develop initial components that are well-integrated
with the framework and with each other. 3. Test the framework and the component integration
by running simple end-to-end tests.
Early component integration is critical, even if the initial components are greatly simplified and don’t do very much.
![Page 17: CS 153: Concepts of Compiler Design August 26 Class Meeting Department of Computer Science San Jose State University Fall 2015 Instructor: Ron Mak mak](https://reader031.vdocuments.net/reader031/viewer/2022020417/56649f175503460f94c2e312/html5/thumbnails/17.jpg)
Computer Science Dept.Fall 2015: August 26
CS 153: Concepts of Compiler Design© R. Mak
17
Key Steps for Success, cont’d
Test your framework and components and get them working together as early as possible.
The framework and the initial components then form the basis upon which you can do further development.
You should always be building on code that already works.
![Page 18: CS 153: Concepts of Compiler Design August 26 Class Meeting Department of Computer Science San Jose State University Fall 2015 Instructor: Ron Mak mak](https://reader031.vdocuments.net/reader031/viewer/2022020417/56649f175503460f94c2e312/html5/thumbnails/18.jpg)
Computer Science Dept.Fall 2015: August 26
CS 153: Concepts of Compiler Design© R. Mak
18
Three Java Packages
TO:
UML package andclass diagrams.
Package
Class
FROM:
![Page 19: CS 153: Concepts of Compiler Design August 26 Class Meeting Department of Computer Science San Jose State University Fall 2015 Instructor: Ron Mak mak](https://reader031.vdocuments.net/reader031/viewer/2022020417/56649f175503460f94c2e312/html5/thumbnails/19.jpg)
Computer Science Dept.Fall 2015: August 26
CS 153: Concepts of Compiler Design© R. Mak
19
Front End Class Relationships
+ public
- private
# protected
~ package
“has a”
transientrelationship
abstractclass
These four framework classesshould be source language-independent.
class
field
![Page 20: CS 153: Concepts of Compiler Design August 26 Class Meeting Department of Computer Science San Jose State University Fall 2015 Instructor: Ron Mak mak](https://reader031.vdocuments.net/reader031/viewer/2022020417/56649f175503460f94c2e312/html5/thumbnails/20.jpg)
Computer Science Dept.Fall 2015: August 26
CS 153: Concepts of Compiler Design© R. Mak
20
Front End Fields and Methods
“subclass of”or “is a”
abstractmethod
![Page 21: CS 153: Concepts of Compiler Design August 26 Class Meeting Department of Computer Science San Jose State University Fall 2015 Instructor: Ron Mak mak](https://reader031.vdocuments.net/reader031/viewer/2022020417/56649f175503460f94c2e312/html5/thumbnails/21.jpg)
Computer Science Dept.Fall 2015: August 26
CS 153: Concepts of Compiler Design© R. Mak
21
The Abstract Parser Class Fields iCode and symTab refer
to the intermediate code and the symbol table.
Field scanner refers to the scanner.
Abstract parse() and getErrorCount() methods. To be implemented by
language-specific parser subclasses.
“Convenience methods” currentToken() and nextToken() simply call the currentToken() and nextToken() methods of Scanner.
![Page 22: CS 153: Concepts of Compiler Design August 26 Class Meeting Department of Computer Science San Jose State University Fall 2015 Instructor: Ron Mak mak](https://reader031.vdocuments.net/reader031/viewer/2022020417/56649f175503460f94c2e312/html5/thumbnails/22.jpg)
Computer Science Dept.Fall 2015: August 26
CS 153: Concepts of Compiler Design© R. Mak
22
The Abstract Scanner Class
Private field currentToken refers to the current token, which protected method currentToken() returns.
Method nextToken() calls abstract method extractToken(). To be implemented by
language-specific scanner subclasses.
Convenience methods currentChar() and nextChar() call the corresponding methods of Source.
![Page 23: CS 153: Concepts of Compiler Design August 26 Class Meeting Department of Computer Science San Jose State University Fall 2015 Instructor: Ron Mak mak](https://reader031.vdocuments.net/reader031/viewer/2022020417/56649f175503460f94c2e312/html5/thumbnails/23.jpg)
Computer Science Dept.Fall 2015: August 26
CS 153: Concepts of Compiler Design© R. Mak
23
The Token Class
Field text is the string that comprises the token.
Field value is for tokens that have a value, such as a number.
Field type is the token type.
Fields lineNum and position tell where the token is in the source file.
Default method extract() will be overridden by language-specific token subclasses.
Convenience methods currentChar(), nextChar(), and peekChar() call the corresponding methods of the Source class.
![Page 24: CS 153: Concepts of Compiler Design August 26 Class Meeting Department of Computer Science San Jose State University Fall 2015 Instructor: Ron Mak mak](https://reader031.vdocuments.net/reader031/viewer/2022020417/56649f175503460f94c2e312/html5/thumbnails/24.jpg)
Computer Science Dept.Fall 2015: August 26
CS 153: Concepts of Compiler Design© R. Mak
24
The Source Class
Field reader is the reader of the source. Field line stores a single line from the source file.
Fields lineNum and currentPos keep track of the position of the current character.
Method currentChar() returns the current source character. Method nextChar() returns the next character.
![Page 25: CS 153: Concepts of Compiler Design August 26 Class Meeting Department of Computer Science San Jose State University Fall 2015 Instructor: Ron Mak mak](https://reader031.vdocuments.net/reader031/viewer/2022020417/56649f175503460f94c2e312/html5/thumbnails/25.jpg)
Computer Science Dept.Fall 2015: August 26
CS 153: Concepts of Compiler Design© R. Mak
25
Current Character vs. Next Character
Suppose the source line contains ABCDE and we’ve already read the first character.
currentChar() A
nextChar() B
nextChar() C
nextChar() D
currentChar() D
currentChar() D
nextChar() E
nextChar() eol
![Page 26: CS 153: Concepts of Compiler Design August 26 Class Meeting Department of Computer Science San Jose State University Fall 2015 Instructor: Ron Mak mak](https://reader031.vdocuments.net/reader031/viewer/2022020417/56649f175503460f94c2e312/html5/thumbnails/26.jpg)
Computer Science Dept.Fall 2015: August 26
CS 153: Concepts of Compiler Design© R. Mak
26
Messages from the Front End
The Parser generates messages. Syntax error messages Parser summary
number of source lines parsed number of syntax errors total parsing time
The Source generates messages. For each source line:
line number contents of the line
![Page 27: CS 153: Concepts of Compiler Design August 26 Class Meeting Department of Computer Science San Jose State University Fall 2015 Instructor: Ron Mak mak](https://reader031.vdocuments.net/reader031/viewer/2022020417/56649f175503460f94c2e312/html5/thumbnails/27.jpg)
Computer Science Dept.Fall 2015: August 26
CS 153: Concepts of Compiler Design© R. Mak
27
Front End Messages, cont’d
We want the message producers (Parser and Source) to be loosely-coupled from the message listeners.
The producers shouldn’t care who listens to their messages.
The producers shouldn’t care what the listeners do with the messages.
The listeners should have the flexibility to do whatever they want with the messages.
![Page 28: CS 153: Concepts of Compiler Design August 26 Class Meeting Department of Computer Science San Jose State University Fall 2015 Instructor: Ron Mak mak](https://reader031.vdocuments.net/reader031/viewer/2022020417/56649f175503460f94c2e312/html5/thumbnails/28.jpg)
Computer Science Dept.Fall 2015: August 26
CS 153: Concepts of Compiler Design© R. Mak
28
Front End Messages, cont’d
Producers implement the MessageProducer interface.
Listeners implement the MessageListener interface.
A listener registers its interest in the messages from a producer.
Whenever a producer generates a message, it “sends” the message to all of its registered listeners.
![Page 29: CS 153: Concepts of Compiler Design August 26 Class Meeting Department of Computer Science San Jose State University Fall 2015 Instructor: Ron Mak mak](https://reader031.vdocuments.net/reader031/viewer/2022020417/56649f175503460f94c2e312/html5/thumbnails/29.jpg)
Computer Science Dept.Fall 2015: August 26
CS 153: Concepts of Compiler Design© R. Mak
29
Front End Messages, cont’d
A message producer can delegate message handling to a MessageHandler.
This is the Observer Design Pattern.
![Page 30: CS 153: Concepts of Compiler Design August 26 Class Meeting Department of Computer Science San Jose State University Fall 2015 Instructor: Ron Mak mak](https://reader031.vdocuments.net/reader031/viewer/2022020417/56649f175503460f94c2e312/html5/thumbnails/30.jpg)
Computer Science Dept.Fall 2015: August 26
CS 153: Concepts of Compiler Design© R. Mak
30
Message Implementation Message producers
implement the MessageProducer interface.
Message listeners implement the MessageListener interface.
A message producer can delegate message handling to a MessageHandler.
Each Message has a message type and a body.
“implements”
multiplicity“zero or more”
This appears to be a lot of extra work, but it will be easy to use and it will pay back large dividends.
![Page 31: CS 153: Concepts of Compiler Design August 26 Class Meeting Department of Computer Science San Jose State University Fall 2015 Instructor: Ron Mak mak](https://reader031.vdocuments.net/reader031/viewer/2022020417/56649f175503460f94c2e312/html5/thumbnails/31.jpg)
Computer Science Dept.Fall 2015: August 26
CS 153: Concepts of Compiler Design© R. Mak
31
Two Message Types
SOURCE_LINE message the source line number text of the source line
PARSER_SUMMARY message number of source lines read number of syntax errors total parsing time
By convention, the message producers and the message listeners agree on the format and content of the messages.
![Page 32: CS 153: Concepts of Compiler Design August 26 Class Meeting Department of Computer Science San Jose State University Fall 2015 Instructor: Ron Mak mak](https://reader031.vdocuments.net/reader031/viewer/2022020417/56649f175503460f94c2e312/html5/thumbnails/32.jpg)
Computer Science Dept.Fall 2015: August 26
CS 153: Concepts of Compiler Design© R. Mak
32
Good Framework Symmetry