Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik...
Transcript of Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik...
![Page 2: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/2.jpg)
Table of Contents
PreliminariesIntroductionFlex and BisonSyntax Analysis
The Chomsky hierarchyExample Language: nanoLangDerivations and Parse TreesAbstract Syntax TreesExcursion: Make, Flex& BisonBuilding Abstract Syntax Trees
Semantic AnalysisRuntime Environment and CodeGenerationSolutionsIndividual Lectures
Lecture 1Exercise 0: Scientific Calculator(warmup)
Lecture 2Exercise 1: nanoLang ScannerLecture 3Exercise 2: nanoLang ParserLecture 4Exercise 3: ASTs for nanoLangLecture 5Exercise 4: nanoLang types andSymbol TablesLecture 6Exercise 5: Implementing SymbolTablesLecture 7Exercise 6: Typechecking NanolangLecture 8Exercise 7: Basic Code GenerationLecture 9Exercise 8: Completing the Compiler
2 ,
![Page 3: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/3.jpg)
Introduction
I Stephan Schulz
I Dipl.-Inform., U. Kaiserslautern, 1995I Dr. rer. nat., TU Munchen, 2000I Visiting professor, U. Miami, 2002I Visiting professor, U. West Indies, 2005I Visiting lecturer (Hildesheim, Offenburg, . . . ) since 2009I Industry experience: Building Air Traffic Control systems
I System engineer, 2005I Project manager, 2007I Product Manager, 2013
I Professor, DHBW Stuttgart, 2014
Research: Logic & Deduction
3 ,
![Page 4: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/4.jpg)
Introduction
I Stephan Schulz
I Dipl.-Inform., U. Kaiserslautern, 1995I Dr. rer. nat., TU Munchen, 2000I Visiting professor, U. Miami, 2002I Visiting professor, U. West Indies, 2005I Visiting lecturer (Hildesheim, Offenburg, . . . ) since 2009I Industry experience: Building Air Traffic Control systems
I System engineer, 2005I Project manager, 2007I Product Manager, 2013
I Professor, DHBW Stuttgart, 2014
Research: Logic & Deduction
3 ,
![Page 5: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/5.jpg)
Introduction
I Stephan Schulz
I Dipl.-Inform., U. Kaiserslautern, 1995I Dr. rer. nat., TU Munchen, 2000I Visiting professor, U. Miami, 2002I Visiting professor, U. West Indies, 2005I Visiting lecturer (Hildesheim, Offenburg, . . . ) since 2009I Industry experience: Building Air Traffic Control systems
I System engineer, 2005I Project manager, 2007I Product Manager, 2013
I Professor, DHBW Stuttgart, 2014
Research: Logic & Deduction
3 ,
![Page 6: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/6.jpg)
This Course in Context
I Formal languages and automata
I Basic theory - languages and automataI General grammarsI Abstract parsingI Computability
Focus on foundations
I Compiler construction
I Advanced theory - parsers and languagesI Tools and their useI Writing parsers and scannersI Code generation and run time environment
Focus on practical applications
4 ,
![Page 7: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/7.jpg)
Organization
I Lecture time: Wednesdays, 12:30-17:00
I Lecture (with exercises): roughly 12:30-14:45I Lab: roughly 14:45-17:00I . . . but schedule will be flexibleI Breaks as neededI No lecture on March 28th (Second Conference on Artificial
Intelligence and Theorem Proving)
I Grading:
I Lecture Compilerbau: Written Exam, grade averaged with FormalLanguages&Automata for module grade
I Lab: Pass/Fail based on success in exercises
5 ,
![Page 8: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/8.jpg)
Computing Environment
I For practical exercises, you will need a complete Linux/UNIXenvironment. If you do not run one natively, there are severaloptions:
I You can install VirtualBox (https://www.virtualbox.org) andthen install e.g. Ubuntu (http://www.ubuntu.com/) on a virtualmachine. Make sure to install the Guest Additions
I For Windows, you can install the complete UNIX emulation packageCygwin from http://cygwin.com
I For MacOS, you can install fink (http://www.finkproject.org/)or MacPorts (https://www.macports.org/) and the necessary tools
I You will need at least flex, bison (version 3.0.4 works, 2.X willcause problems), gcc, grep, sed, AWK, make, and a good text editor
6 ,
![Page 9: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/9.jpg)
Resources
I Course web page
I http://wwwlehre.dhbw-stuttgart.de/~sschulz/cb2018.html
I Literature
I Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman:Compilers: Principles, Techniques, and Tools
I Kenneth C. Louden: Compiler Construction - Principles and PracticeI Ulrich Hedtstuck: Einfuhrung in die theoretische Informatik
7 ,
![Page 10: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/10.jpg)
Exercise: Programming Languages
I Name and describe several modern programming languages!
8 ,
![Page 11: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/11.jpg)
Modern Programming Languages
Desirable properties of high-level languagesI Expressive and flexible
I Close to application domainsI Good abstractionsI Powerful constructsI Readable
I Compact
I Programmer productivity depends on code length (!)
I Machine independent
I Code should run on many platformsI Code should run on evolving platforms
I Strong error-checking
I StaticI Dynamic
I Efficiently executable
9 ,
![Page 12: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/12.jpg)
Classification Criteria
I High-level vs. low levelI Type system
I Statically typed (C, Pascal) vs. dynamicallytyped (Python, LISP)
I Strongly typed (Pascal) vs. weakly typed (C,AWK)
I Declaration of types (C++) vs. typeinference (Haskell)
I Programming paradigm
I Imperative vs. functional vs. logicalI Unstructured (Basic) vs. procedural (Pascal,
C) vs. object-oriented (Java, C++)
I Execution style
I Interpreted (Basic, Logo, Scheme)I Compiled to abstract machine (Java, Prolog)I Compiled to native code (C, Modula-2)
Examples aretypical, not strict
I Scheme can becompiled
I C can beinterpreted
I Python can beusedimperatively andhas functionalfeatures
I . . .
10 ,
![Page 13: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/13.jpg)
Low-Level Code
I Machine code
I BinaryI Machine-specificI Operations (and operands) encoded in instruction wordsI Basic operations onlyI Manipulates finite number of registersI Direct access to memory locationsI Flow control via conditional and unconditional jumps (think goto)I Basic data types (bytes, words)
Directly executable by processor
I Assembly languages
I Textual representation of machine codeI Symbolic names for operations and operandsI Labels for addresses (code and data)
Direct one-to-one mapping to machine code
11 ,
![Page 14: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/14.jpg)
Low-Level Code
I Machine code
I BinaryI Machine-specificI Operations (and operands) encoded in instruction wordsI Basic operations onlyI Manipulates finite number of registersI Direct access to memory locationsI Flow control via conditional and unconditional jumps (think goto)I Basic data types (bytes, words)
Directly executable by processor
I Assembly languages
I Textual representation of machine codeI Symbolic names for operations and operandsI Labels for addresses (code and data)
Direct one-to-one mapping to machine code
11 ,
![Page 15: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/15.jpg)
Low-Level Code
I Machine code
I BinaryI Machine-specificI Operations (and operands) encoded in instruction wordsI Basic operations onlyI Manipulates finite number of registersI Direct access to memory locationsI Flow control via conditional and unconditional jumps (think goto)I Basic data types (bytes, words)
Directly executable by processor
I Assembly languages
I Textual representation of machine codeI Symbolic names for operations and operandsI Labels for addresses (code and data)
Direct one-to-one mapping to machine code
11 ,
![Page 16: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/16.jpg)
Low-Level Code
I Machine code
I BinaryI Machine-specificI Operations (and operands) encoded in instruction wordsI Basic operations onlyI Manipulates finite number of registersI Direct access to memory locationsI Flow control via conditional and unconditional jumps (think goto)I Basic data types (bytes, words)
Directly executable by processor
I Assembly languages
I Textual representation of machine codeI Symbolic names for operations and operandsI Labels for addresses (code and data)
Direct one-to-one mapping to machine code
11 ,
![Page 17: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/17.jpg)
Exercise: Low-Level Code – Minimal C
I Predefined global variables
I Integers R0, R1, R2, R3, R4
I Integer array mem[MAXMEM]
I No new variables allowed
I No parameters (or return with value) for functionsI Flow control: Only if and goto (not while, for, . . . )
I No blocks after if (only one command allowed)
I Arithmetic only between R0, R1, R2, R3, R4
I Result must be stored in one of R0, R1, R2, R3, R4
I Operands: Only R0, R1, R2, R3, R4 allowed (no nestedsub-expressions)
I Unary incement/decrement is ok (R0++)I R0, R1, R2, R3, R4 can be stored in/loaded from mem, indexed
with a fixed address or one of the variables.
12 ,
![Page 18: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/18.jpg)
Exercise: Minimal C Example
/∗ Compute sum from 0 to R0 , r e t u r n r e s u l t i n R1 ∗/
vo id u s e r c o d e ( vo id ){
/∗ R0 i s the i n pu t v a l u e and l i m i t ∗/R1 = 0 ; /∗ Sum, v a l u e r e t u r n e d ∗/R2 = 0 ; /∗ Loop coun t e r ∗/R3 = 1 ; /∗ For i n c r emen t s ∗/
l o o p :i f ( R2 > R0 )
goto end ;R1 = R1+R2 ;R2 = R2+R3 ;goto l o o p ;
end :re tu rn ;
}
13 ,
![Page 19: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/19.jpg)
Exercise: Low-Level Code
I Write (in Minimal C) the following functions:
I A program computing the factorial of R0I A program computing the Fibonacci-number of R0 iterativelyI A program computing the Fibonacci-number of R0 recursively
I You can find a frame for your code at the course web page,http://wwwlehre.dhbw-stuttgart.de/~sschulz/cb2018.html
14 ,
![Page 20: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/20.jpg)
Surprise!
Computers don’t execute high-level languages (directly)!
15 ,
![Page 21: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/21.jpg)
Execution of high-level programs
Run TimeDevelopment Time
Compiled languages
Interpreted languages
16 ,
![Page 22: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/22.jpg)
Execution of high-level programs
Run TimeDevelopment Time
Program Compiler Executable
Data
Results
Compiled languages
Interpreted languages
16 ,
![Page 23: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/23.jpg)
Execution of high-level programs
Run TimeDevelopment Time
Program Compiler Executable
Data
Results
Program Interpreter
Data
Results
Compiled languages
Interpreted languages
16 ,
![Page 24: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/24.jpg)
Compilers
Compilers translate high-level languages into low-level code!
17 ,
![Page 25: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/25.jpg)
Reminder: Syntactic Structure of Computer Languages
I Most computer languages are mostly context-freeI Regular understory: vocabulary
I Keywords, operators, identifiersI Described by regular expressions or regular grammarI Handled by (generated or hand-written) scanner/tokenizer/lexer
I Context-free: program structureI Matching parenthesis, block structure, algebraic expressions, . . .I Described by context-free gammarI Handled by (generated or hand-written) parser
I Context-sensitive: e.g. declarationsI Described by human-readable constraintsI Handled in an ad-hoc fashion (e.g. symbol table)
18 ,
![Page 26: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/26.jpg)
High-Level Architecture of a Compiler
Variable Typea intb int
Source handler
Lexical analysis (tokeniser)
Syntactic analysis (parser)
Semantic analysis
Code generation (several optimisation passes)
Sequence of characters: i,n,t, ⏘, a,,, b, ;, a, =, b, +, 1, ;
Sequence of tokens: (id, “int”), (id, “a”), (id, “b”), (semicolon), (id, “a”), (eq), (id, “b”), (plus), (int, “1”), (semicolon)
e.g. Abstract syntax tree
e.g. AST+symbol table
e.g. assembler code
�������
����
����
����
����
����
�
����
���� �����
���� ����������
ld a,b ld c, 1 add c ...
����
����
����
�
����
�����
����������
19 ,
![Page 27: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/27.jpg)
Source Handler
I Handles input files
I Provides character-by-character access
I May maintain file/line/colum (for error messages)
I May provide look-ahead
I May provide preprocessing (e.g. include)
Result: Sequence of characters (with positions)
I Nowadays often integrated with scanner
20 ,
![Page 28: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/28.jpg)
Source Handler
I Handles input files
I Provides character-by-character access
I May maintain file/line/colum (for error messages)
I May provide look-ahead
I May provide preprocessing (e.g. include)
Result: Sequence of characters (with positions)
I Nowadays often integrated with scanner
20 ,
![Page 29: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/29.jpg)
Lexical Analysis/Scanning
I Breaks program into tokenI Typical tokens:
I Reserved word (if, while)I Identifier (i, counter, database)I Numbers (12, 0x23, 1.2e17)I Symbols ({, }, (, ), +, -, ...)
Result: Sequence of tokens
21 ,
![Page 30: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/30.jpg)
Exercise: Lexical Analysis
i n t main ( i n t argc , char∗ a r g v [ ] ){
R0 = 0 ;R1 = 0 ;R2 = 0 ;R3 = 1 ;R4 = 1 ;f o r ( i n t i = 0 ; i<MAXMEM; i ++){
mem[ i ] = 0 ;}
u s e r c o d e ( ) ;
return 0 ;}
22 ,
![Page 31: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/31.jpg)
Automatisation with Flex
Variable Typea intb int
Source handler
Lexical analysis (tokeniser)
Syntactic analysis (parser)
Semantic analysis
Code generation (several optimisation passes)
Sequence of characters: i,n,t, ⏘, a,,, b, ;, a, =, b, +, 1, ;
Sequence of tokens: (id, “int”), (id, “a”), (id, “b”), (semicolon), (id, “a”), (eq), (id, “b”), (plus), (int, “1”), (semicolon)
e.g. Abstract syntax tree
e.g. AST+symbol table
e.g. assembler code
Flex
�������
����
����
����
����
����
�
����
���� �����
���� ����������
ld a,b ld c, 1 add c ...
����
����
����
�
����
�����
����������
23 ,
![Page 32: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/32.jpg)
Syntactical Analysis/Parsing
I Description of the language with a context-free grammarI Parsing:
I Try to build a parse tree/abstract syntax tree (AST)I Parse tree unambiguously describes structure of a programI AST reflects abstract syntax (can e.g. drop parenthesis)
I Methods:
I Manual recursive descent parserI Automatic with a table-driven bottom-up parser
Result: Abstract Syntax Tree
24 ,
![Page 33: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/33.jpg)
Automatisation with Bison
Variable Typea intb int
Source handler
Lexical analysis (tokeniser)
Syntactic analysis (parser)
Semantic analysis
Code generation (several optimisation passes)
Sequence of characters: i,n,t, ⏘, a,,, b, ;, a, =, b, +, 1, ;
Sequence of tokens: (id, “int”), (id, “a”), (id, “b”), (semicolon), (id, “a”), (eq), (id, “b”), (plus), (int, “1”), (semicolon)
e.g. Abstract syntax tree
e.g. AST+symbol table
e.g. assembler code
Flex
�������
����
����
����
����
����
�
����
���� �����
���� ����������
ld a,b ld c, 1 add c ...
����
����
����
�
����
�����
����������
Bison
25 ,
![Page 34: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/34.jpg)
Semantic Analysis
I Analyze static properties of the program
I Which variable has which type?I Are all expressions well-typed?I Which names are defined?I Which names are referenced?
I Core tool: Symbol table
Result: Annotated AST
26 ,
![Page 35: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/35.jpg)
Optimization
I Transform Abstract Syntax Tree to generate better code
I SmallerI FasterI Both
I Mechanisms
I Common sub-expression eliminationI Loop unrollingI Dead code/data eliminationI . . .
Result: Optimized AST
27 ,
![Page 36: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/36.jpg)
Code Generation
I Convert optimized AST into low-level codeI Target languages:
I Assembly codeI Machine codeI VM code (z.B. JAVA byte-code, p-Code)I C (as a “portable assembler”)I . . .
I Also includes low-level/target-language dependent optimizations
Result: Program in target language
28 ,
![Page 37: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/37.jpg)
Refresher: Flex
29 ,
![Page 38: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/38.jpg)
Flex Overview
I Flex is a scanner generatorI Input: Specification of a regular language and what to do with it
I Definitions - named regular expressionsI Rules - patters+actionsI (miscellaneous support code)
I Output: Source code of scanner
I Scans input for patternsI Executes associated actionsI Default action: Copy input to outputI Interface for higher-level processing: yylex() function
30 ,
![Page 39: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/39.jpg)
Flex Overview
!Definitions Rules Miscellanous code
flex+gcc
scanner!
!Input
!!
Tokenized/processed
output
31 ,
![Page 40: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/40.jpg)
Flex Overview
Development time
Execution time
!Definitions Rules Miscellanous code
flex+gcc
scanner!
!Input
!!
Tokenized/processed
output
31 ,
![Page 41: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/41.jpg)
Flex Example Task
I (Artificial) goal: Sum up all numbers in a file, separately for ints andfloats
I Given: A file with numbers and commands
I Ints: Non-empty sequences of digitsI Floats: Non-empty sequences of digits, followed by decimal dot,
followed by (potentially empty) sequence of digitsI Command print: Print current sumsI Command reset: Reset sums to 0.
I At end of file, print sums
32 ,
![Page 42: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/42.jpg)
Flex Example Output
Input
12 3.1415
0.33333
print reset
2 11
1.5 2.5 print
1
print 1.0
Output
int: 12 ("12")
float: 3.141500 ("3.1415")
float: 0.333330 ("0.33333")
Current: 12 : 3.474830
Reset
int: 2 ("2")
int: 11 ("11")
float: 1.500000 ("1.5")
float: 2.500000 ("2.5")
Current: 13 : 4.000000
int: 1 ("1")
Current: 14 : 4.000000
float: 1.000000 ("1.0")
Final 14 : 5.000000
33 ,
![Page 43: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/43.jpg)
Basic Structure of Flex Files
I Flex files have 3 sections
I DefinitionsI RulesI User Code
I Sections are separated by %%
I Flex files traditionally use the suffix .l
34 ,
![Page 44: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/44.jpg)
Example Code (definition section)
%option noyywrap
DIGIT [0-9]
%{
int intval = 0;
double floatval = 0.0;
%}
%%
35 ,
![Page 45: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/45.jpg)
Example Code (rule section)
{DIGIT}+ {
printf( "int: %d (\"%s\")\n", atoi(yytext), yytext );
intval += atoi(yytext);
}
{DIGIT}+"."{DIGIT}* {
printf( "float: %f (\"%s\")\n", atof(yytext),yytext );
floatval += atof(yytext);
}
reset {
intval = 0;
floatval = 0;
printf("Reset\n");
}
print {
printf("Current: %d : %f\n", intval, floatval);
}
\n|. {
/* Skip */
}
36 ,
![Page 46: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/46.jpg)
Example Code (user code section)
%%
int main( int argc, char **argv )
{
++argv, --argc; /* skip over program name */
if ( argc > 0 )
yyin = fopen( argv[0], "r" );
else
yyin = stdin;
yylex();
printf("Final %d : %f\n", intval, floatval);
}
37 ,
![Page 47: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/47.jpg)
Generating a scanner
> flex -t numbers.l > numbers.c
> gcc -c -o numbers.o numbers.c
> gcc numbers.o -o scan_numbers
> ./scan_numbers Numbers.txt
int: 12 ("12")
float: 3.141500 ("3.1415")
float: 0.333330 ("0.33333")
Current: 12 : 3.474830
Reset
int: 2 ("2")
int: 11 ("11")
float: 1.500000 ("1.5")
float: 2.500000 ("2.5")
...
38 ,
![Page 48: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/48.jpg)
Flexing in detail
> flex -tv numbers.l > numbers.c
scanner options: -tvI8 -Cem
37/2000 NFA states
18/1000 DFA states (50 words)
5 rules
Compressed tables always back-up
1/40 start conditions
20 epsilon states, 11 double epsilon states
6/100 character classes needed 31/500 words
of storage, 0 reused
36 state/nextstate pairs created
24/12 unique/duplicate transitions
...
381 total table entries needed
39 ,
![Page 49: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/49.jpg)
Exercise: Building a Scanner
I Download the flex example and input fromhttp://wwwlehre.dhbw-stuttgart.de/~sschulz/cb2018.html
I Build and execute the program:
I Generate the scanner with flex
I Compile/link the C code with gcc
I Execute the resulting program in the input file
40 ,
![Page 50: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/50.jpg)
Definition Section
I Can contain flex optionsI Can contain (C) initialization code
I Typically #include() directivesI Global variable definitionsI Macros and type definitionsI Initialization code is embedded in %{ and %}
I Can contain definitions of regular expressions
I Format: NAME RE
I Defined NAMES can be referenced later
41 ,
![Page 51: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/51.jpg)
Example Code (definition section) (revisited)
%%option noyywrap
DIGIT [0-9]
%{
int intval = 0;
double floatval = 0.0;
%}
%%
42 ,
![Page 52: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/52.jpg)
Rule Section
I This is the core of the scanner!
I Rules have the form PATTERN ACTION
I Patterns are regular expressions
I Typically use previous definitions
I THERE IS WHITE SPACE BETWEEN PATTERN AND ACTION!I Actions are C code
I Can be embedded in { and }I Can be simple C statementsI For a token-by-token scanner, must include return statementI Inside the action, the variable yytext contains the text matched by
the patternI Otherwise: Full input file is processed
43 ,
![Page 53: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/53.jpg)
Example Code (rule section) (revisited)
{DIGIT}+ {
printf( "int: %d (\"%s\")\n", atoi(yytext), yytext );
intval += atoi(yytext);
}
{DIGIT}+"."{DIGIT}* {
printf( "float: %f (\"%s\")\n", atof(yytext),yytext );
floatval += atof(yytext);
}
reset {
intval = 0;
floatval = 0;
printf("Reset\n");
}
print {
printf("Current: %d : %f\n", intval, floatval);
}
\n|. {
/* Skip */
}
44 ,
![Page 54: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/54.jpg)
User code section
I Can contain all kinds of code
I For stand-alone scanner: must include main()
I In main(), the function yylex() will invoke the scanner
I yylex() will read data from the file pointer yyin (so main() mustset it up reasonably
45 ,
![Page 55: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/55.jpg)
Example Code (user code section) (revisited)
%%
int main( int argc, char **argv )
{
++argv, --argc; /* skip over program name */
if ( argc > 0 )
yyin = fopen( argv[0], "r" );
else
yyin = stdin;
yylex();
printf("Final %d : %f\n", intval, floatval);
}
46 ,
![Page 56: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/56.jpg)
A comment on comments
I Comments in Flex are complicated
I . . . because nearly everything can be a pattern
I Simple rules:
I Use old-style C comments /* This is a comment */
I Never start them in the first columnI Comments are copied into the generated codeI Read the manual if you want the dirty details
47 ,
![Page 57: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/57.jpg)
Flex Miscellany
I Flex online:
I https://github.com/westes/flex
I Manual: https://westes.github.io/flex/manual/I REs: https://westes.github.io/flex/manual/Patterns.html
I make knows flex
I Make will automatically generate file.o from file.l
I Be sure to set LEX=flex to enable flex extensionsI Makefile example:
LEX=flex
all: scan_numbers
numbers.o: numbers.l
scan_numbers: numbers.o
gcc numbers.o -o scan_numbers
48 ,
![Page 58: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/58.jpg)
Flex Miscellany
I Flex online:
I https://github.com/westes/flex
I Manual: https://westes.github.io/flex/manual/I REs: https://westes.github.io/flex/manual/Patterns.html
I make knows flex
I Make will automatically generate file.o from file.l
I Be sure to set LEX=flex to enable flex extensionsI Makefile example:
LEX=flex
all: scan_numbers
numbers.o: numbers.l
scan_numbers: numbers.o
gcc numbers.o -o scan_numbers
48 ,
![Page 59: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/59.jpg)
Parsing mit Bison
49 ,
![Page 60: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/60.jpg)
YACC/Bison
I Yacc - Yet Another Compiler Compiler
I Originally written ≈1971 by StephenC. Johnson at AT&T
I LALR parser generatorI Translates grammar into syntax
analyzer
I GNU Bison
I Written by Robert Corbett in 1988I Yacc-compatibility by Richard
StallmanI Output languages now C, C++, Java
I Yacc, Bison, BYacc, . . . mostlycompatible (POSIX P1003.2)
50 ,
![Page 61: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/61.jpg)
Yacc/Bison Background
I By default, Bison constructs a 1 token Look-Ahead Left-to-rightRightmost-derivation or LALR(1) parser
I Input tokens are processed left-to-rightI Shift-reduce parser:
I Stack holds tokens (terminals) and non-terminalsI Tokens are shifted from input to stack. If the top of the stack
contains symbols that represent the right hand side (RHS) of agrammar rule, the content is reduced to the LHS
I Since input is reduced left-to-right, this corresponds to a rightmostderivation
I Ambiguities are solved via look-ahead and special rulesI If input can be reduced to start symbol, success!I Error otherwise
I LALR(1) is efficient in time and memory
I Can parse “all reasonable languages”I For unreasonable languages, Bison (but not Yacc) can also construct
GLR (General LR) parsersI Try all possibilities with back-trackingI Corresponds to the non-determinism of stack machines
51 ,
![Page 62: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/62.jpg)
Yacc/Bison Overview
I Bison reads a specification file and converts it into (C) code of aparser
I Specification file: Definitions, grammar rules with actions, supportcode
I Definitions: Token names, associated values, includes, declarationsI Grammar rules: Non-terminal with alternatives, action associated with
each alternativeI Support code: e.g. main() function, error handling. . .I Syntax similar to (F)lex
I Sections separated by %%I Special commands start with %
I Bison generates function yyparse()
I Bison needs function yylex()
I Usually provided via (F)lex
52 ,
![Page 63: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/63.jpg)
Yacc/Bison workflow
Bison Input File <file>.y
Definitions file <file>.tab.h
Parser Source <file>.tab.c
Flex Input file <file>.l
Lexer Source <file>.c
Lexer object <file>.o
Parser object <file>.tab.o
Final executable parser
Some input to process
Some output produced
Bison
Flex
gcc
gcc
linker (gcc)
#include
53 ,
![Page 64: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/64.jpg)
Yacc/Bison workflow
Execution time
Development time Bison Input File <file>.y
Definitions file <file>.tab.h
Parser Source <file>.tab.c
Flex Input file <file>.l
Lexer Source <file>.c
Lexer object <file>.o
Parser object <file>.tab.o
Final executable parser
Some input to process
Some output produced
Bison
Flex
gcc
gcc
linker (gcc)
#include
53 ,
![Page 65: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/65.jpg)
Example task: Desk calculator
I Desk calculator
I Reads algebraic expressions and assignmentsI Prints result of expressionsI Can store values in registers R0-R99
I Example session:
[Shell] ./scicalc
R10=3*(5+4)
> RegVal: 27.000000
(3.1415*R10+3)
> 87.820500
R9=(3.1415*R10+3)
> RegVal: 87.820500
R9+R10
> 114.820500
...
54 ,
![Page 66: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/66.jpg)
Example task: Desk calculator
I Desk calculator
I Reads algebraic expressions and assignmentsI Prints result of expressionsI Can store values in registers R0-R99
I Example session:
[Shell] ./scicalc
R10=3*(5+4)
> RegVal: 27.000000
(3.1415*R10+3)
> 87.820500
R9=(3.1415*R10+3)
> RegVal: 87.820500
R9+R10
> 114.820500
...
54 ,
![Page 67: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/67.jpg)
Abstract grammar for desk calculator (partial)
GDC = 〈VN ,VT ,P, S〉I VT = {PLUS, MULT,
ASSIGN, OPENPAR,CLOSEPAR, REGISTER,FLOAT, . . . }I Some terminals are
single characters (+,=, . . . )
I Others are complex:R10, 1.3e7
I Terminals (“tokens”)are generated by thelexer
I VN = {stmt, assign,expr, term, factor, . . . }
I P :stmt → assign
| expr
assign → REGISTER ASSIGN expr
expr → expr PLUS term
| term
term → term MULT factor
| factor
factor → REGISTER
| FLOAT
| OPENPAR expr CLOSEPAR
I S = *handwave*
I For a single statement, S = stmt
I In practice, we need to handlesequences of statements and emptyinput lines (not reflected in thegrammar)
55 ,
![Page 68: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/68.jpg)
Parsing statements (1)
I Example string: R10 = (4.5+3*7)I Tokenized: REGISTER ASSIGN OPENPAR FLOAT PLUS FLOAT MULT
FLOAT CLOSEPAR
I In the following abbreviated R, A, O, F, P, F, M, F, C
I Parsing state:I Unread input (left column)I Current stack (middle column, top element on right)I How state was reached (right column)
I Parsing:
Input Stack CommentR A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
. . .
56 ,
![Page 69: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/69.jpg)
Parsing statements (1)
I Example string: R10 = (4.5+3*7)I Tokenized: REGISTER ASSIGN OPENPAR FLOAT PLUS FLOAT MULT
FLOAT CLOSEPAR
I In the following abbreviated R, A, O, F, P, F, M, F, C
I Parsing state:I Unread input (left column)I Current stack (middle column, top element on right)I How state was reached (right column)
I Parsing:
Input Stack CommentR A O F P F M F C Start
A O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
. . .
56 ,
![Page 70: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/70.jpg)
Parsing statements (1)
I Example string: R10 = (4.5+3*7)I Tokenized: REGISTER ASSIGN OPENPAR FLOAT PLUS FLOAT MULT
FLOAT CLOSEPAR
I In the following abbreviated R, A, O, F, P, F, M, F, C
I Parsing state:I Unread input (left column)I Current stack (middle column, top element on right)I How state was reached (right column)
I Parsing:
Input Stack CommentR A O F P F M F C StartA O F P F M F C R Shift R to stack
O F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
. . .
56 ,
![Page 71: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/71.jpg)
Parsing statements (1)
I Example string: R10 = (4.5+3*7)I Tokenized: REGISTER ASSIGN OPENPAR FLOAT PLUS FLOAT MULT
FLOAT CLOSEPAR
I In the following abbreviated R, A, O, F, P, F, M, F, C
I Parsing state:I Unread input (left column)I Current stack (middle column, top element on right)I How state was reached (right column)
I Parsing:
Input Stack CommentR A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stack
F P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
. . .
56 ,
![Page 72: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/72.jpg)
Parsing statements (1)
I Example string: R10 = (4.5+3*7)I Tokenized: REGISTER ASSIGN OPENPAR FLOAT PLUS FLOAT MULT
FLOAT CLOSEPAR
I In the following abbreviated R, A, O, F, P, F, M, F, C
I Parsing state:I Unread input (left column)I Current stack (middle column, top element on right)I How state was reached (right column)
I Parsing:
Input Stack CommentR A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stack
P F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
. . .
56 ,
![Page 73: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/73.jpg)
Parsing statements (1)
I Example string: R10 = (4.5+3*7)I Tokenized: REGISTER ASSIGN OPENPAR FLOAT PLUS FLOAT MULT
FLOAT CLOSEPAR
I In the following abbreviated R, A, O, F, P, F, M, F, C
I Parsing state:I Unread input (left column)I Current stack (middle column, top element on right)I How state was reached (right column)
I Parsing:
Input Stack CommentR A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stack
P F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
. . .
56 ,
![Page 74: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/74.jpg)
Parsing statements (1)
I Example string: R10 = (4.5+3*7)I Tokenized: REGISTER ASSIGN OPENPAR FLOAT PLUS FLOAT MULT
FLOAT CLOSEPAR
I In the following abbreviated R, A, O, F, P, F, M, F, C
I Parsing state:I Unread input (left column)I Current stack (middle column, top element on right)I How state was reached (right column)
I Parsing:
Input Stack CommentR A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce F
P F M F C R A O term Reduce factor
. . .
56 ,
![Page 75: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/75.jpg)
Parsing statements (1)
I Example string: R10 = (4.5+3*7)I Tokenized: REGISTER ASSIGN OPENPAR FLOAT PLUS FLOAT MULT
FLOAT CLOSEPAR
I In the following abbreviated R, A, O, F, P, F, M, F, C
I Parsing state:I Unread input (left column)I Current stack (middle column, top element on right)I How state was reached (right column)
I Parsing:
Input Stack CommentR A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
. . .
56 ,
![Page 76: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/76.jpg)
Parsing statements (1)
I Example string: R10 = (4.5+3*7)I Tokenized: REGISTER ASSIGN OPENPAR FLOAT PLUS FLOAT MULT
FLOAT CLOSEPAR
I In the following abbreviated R, A, O, F, P, F, M, F, C
I Parsing state:I Unread input (left column)I Current stack (middle column, top element on right)I How state was reached (right column)
I Parsing:
Input Stack CommentR A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
. . .56 ,
![Page 77: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/77.jpg)
Parsing statements (2)
R A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
P F M F C R A O expr LA: Reduce term
F M F C R A O expr P Shift PM F C R A O expr P F Shift FM F C R A O expr P factor Reduce FM F C R A O expr P term Reduce factor
F C R A O expr P term M LA: Shift MC R A O expr P term M F Shift FC R A O expr P term M factor Reduce FC R A O expr P term Reduce tMfC R A O expr Reduce ePt
R A O expr C Shift CR A factor Reduce OeCR A term Reduce factor
R A expr Reduce term
stmt Reduce RAe
57 ,
![Page 78: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/78.jpg)
Parsing statements (2)
R A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
P F M F C R A O expr LA: Reduce term
F M F C R A O expr P Shift PM F C R A O expr P F Shift FM F C R A O expr P factor Reduce FM F C R A O expr P term Reduce factor
F C R A O expr P term M LA: Shift MC R A O expr P term M F Shift FC R A O expr P term M factor Reduce FC R A O expr P term Reduce tMfC R A O expr Reduce ePt
R A O expr C Shift CR A factor Reduce OeCR A term Reduce factor
R A expr Reduce term
stmt Reduce RAe
57 ,
![Page 79: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/79.jpg)
Parsing statements (2)
R A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
P F M F C R A O expr LA: Reduce term
F M F C R A O expr P Shift P
M F C R A O expr P F Shift FM F C R A O expr P factor Reduce FM F C R A O expr P term Reduce factor
F C R A O expr P term M LA: Shift MC R A O expr P term M F Shift FC R A O expr P term M factor Reduce FC R A O expr P term Reduce tMfC R A O expr Reduce ePt
R A O expr C Shift CR A factor Reduce OeCR A term Reduce factor
R A expr Reduce term
stmt Reduce RAe
57 ,
![Page 80: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/80.jpg)
Parsing statements (2)
R A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
P F M F C R A O expr LA: Reduce term
F M F C R A O expr P Shift PM F C R A O expr P F Shift F
M F C R A O expr P factor Reduce FM F C R A O expr P term Reduce factor
F C R A O expr P term M LA: Shift MC R A O expr P term M F Shift FC R A O expr P term M factor Reduce FC R A O expr P term Reduce tMfC R A O expr Reduce ePt
R A O expr C Shift CR A factor Reduce OeCR A term Reduce factor
R A expr Reduce term
stmt Reduce RAe
57 ,
![Page 81: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/81.jpg)
Parsing statements (2)
R A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
P F M F C R A O expr LA: Reduce term
F M F C R A O expr P Shift PM F C R A O expr P F Shift FM F C R A O expr P factor Reduce F
M F C R A O expr P term Reduce factor
F C R A O expr P term M LA: Shift MC R A O expr P term M F Shift FC R A O expr P term M factor Reduce FC R A O expr P term Reduce tMfC R A O expr Reduce ePt
R A O expr C Shift CR A factor Reduce OeCR A term Reduce factor
R A expr Reduce term
stmt Reduce RAe
57 ,
![Page 82: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/82.jpg)
Parsing statements (2)
R A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
P F M F C R A O expr LA: Reduce term
F M F C R A O expr P Shift PM F C R A O expr P F Shift FM F C R A O expr P factor Reduce FM F C R A O expr P term Reduce factor
F C R A O expr P term M LA: Shift MC R A O expr P term M F Shift FC R A O expr P term M factor Reduce FC R A O expr P term Reduce tMfC R A O expr Reduce ePt
R A O expr C Shift CR A factor Reduce OeCR A term Reduce factor
R A expr Reduce term
stmt Reduce RAe
57 ,
![Page 83: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/83.jpg)
Parsing statements (2)
R A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
P F M F C R A O expr LA: Reduce term
F M F C R A O expr P Shift PM F C R A O expr P F Shift FM F C R A O expr P factor Reduce FM F C R A O expr P term Reduce factor
F C R A O expr P term M LA: Shift M
C R A O expr P term M F Shift FC R A O expr P term M factor Reduce FC R A O expr P term Reduce tMfC R A O expr Reduce ePt
R A O expr C Shift CR A factor Reduce OeCR A term Reduce factor
R A expr Reduce term
stmt Reduce RAe
57 ,
![Page 84: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/84.jpg)
Parsing statements (2)
R A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
P F M F C R A O expr LA: Reduce term
F M F C R A O expr P Shift PM F C R A O expr P F Shift FM F C R A O expr P factor Reduce FM F C R A O expr P term Reduce factor
F C R A O expr P term M LA: Shift MC R A O expr P term M F Shift F
C R A O expr P term M factor Reduce FC R A O expr P term Reduce tMfC R A O expr Reduce ePt
R A O expr C Shift CR A factor Reduce OeCR A term Reduce factor
R A expr Reduce term
stmt Reduce RAe
57 ,
![Page 85: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/85.jpg)
Parsing statements (2)
R A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
P F M F C R A O expr LA: Reduce term
F M F C R A O expr P Shift PM F C R A O expr P F Shift FM F C R A O expr P factor Reduce FM F C R A O expr P term Reduce factor
F C R A O expr P term M LA: Shift MC R A O expr P term M F Shift FC R A O expr P term M factor Reduce F
C R A O expr P term Reduce tMfC R A O expr Reduce ePt
R A O expr C Shift CR A factor Reduce OeCR A term Reduce factor
R A expr Reduce term
stmt Reduce RAe
57 ,
![Page 86: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/86.jpg)
Parsing statements (2)
R A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
P F M F C R A O expr LA: Reduce term
F M F C R A O expr P Shift PM F C R A O expr P F Shift FM F C R A O expr P factor Reduce FM F C R A O expr P term Reduce factor
F C R A O expr P term M LA: Shift MC R A O expr P term M F Shift FC R A O expr P term M factor Reduce FC R A O expr P term Reduce tMf
C R A O expr Reduce ePtR A O expr C Shift CR A factor Reduce OeCR A term Reduce factor
R A expr Reduce term
stmt Reduce RAe
57 ,
![Page 87: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/87.jpg)
Parsing statements (2)
R A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
P F M F C R A O expr LA: Reduce term
F M F C R A O expr P Shift PM F C R A O expr P F Shift FM F C R A O expr P factor Reduce FM F C R A O expr P term Reduce factor
F C R A O expr P term M LA: Shift MC R A O expr P term M F Shift FC R A O expr P term M factor Reduce FC R A O expr P term Reduce tMfC R A O expr Reduce ePt
R A O expr C Shift CR A factor Reduce OeCR A term Reduce factor
R A expr Reduce term
stmt Reduce RAe
57 ,
![Page 88: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/88.jpg)
Parsing statements (2)
R A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
P F M F C R A O expr LA: Reduce term
F M F C R A O expr P Shift PM F C R A O expr P F Shift FM F C R A O expr P factor Reduce FM F C R A O expr P term Reduce factor
F C R A O expr P term M LA: Shift MC R A O expr P term M F Shift FC R A O expr P term M factor Reduce FC R A O expr P term Reduce tMfC R A O expr Reduce ePt
R A O expr C Shift C
R A factor Reduce OeCR A term Reduce factor
R A expr Reduce term
stmt Reduce RAe
57 ,
![Page 89: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/89.jpg)
Parsing statements (2)
R A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
P F M F C R A O expr LA: Reduce term
F M F C R A O expr P Shift PM F C R A O expr P F Shift FM F C R A O expr P factor Reduce FM F C R A O expr P term Reduce factor
F C R A O expr P term M LA: Shift MC R A O expr P term M F Shift FC R A O expr P term M factor Reduce FC R A O expr P term Reduce tMfC R A O expr Reduce ePt
R A O expr C Shift CR A factor Reduce OeC
R A term Reduce factor
R A expr Reduce term
stmt Reduce RAe
57 ,
![Page 90: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/90.jpg)
Parsing statements (2)
R A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
P F M F C R A O expr LA: Reduce term
F M F C R A O expr P Shift PM F C R A O expr P F Shift FM F C R A O expr P factor Reduce FM F C R A O expr P term Reduce factor
F C R A O expr P term M LA: Shift MC R A O expr P term M F Shift FC R A O expr P term M factor Reduce FC R A O expr P term Reduce tMfC R A O expr Reduce ePt
R A O expr C Shift CR A factor Reduce OeCR A term Reduce factor
R A expr Reduce term
stmt Reduce RAe
57 ,
![Page 91: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/91.jpg)
Parsing statements (2)
R A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
P F M F C R A O expr LA: Reduce term
F M F C R A O expr P Shift PM F C R A O expr P F Shift FM F C R A O expr P factor Reduce FM F C R A O expr P term Reduce factor
F C R A O expr P term M LA: Shift MC R A O expr P term M F Shift FC R A O expr P term M factor Reduce FC R A O expr P term Reduce tMfC R A O expr Reduce ePt
R A O expr C Shift CR A factor Reduce OeCR A term Reduce factor
R A expr Reduce term
stmt Reduce RAe
57 ,
![Page 92: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/92.jpg)
Parsing statements (2)
R A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
P F M F C R A O expr LA: Reduce term
F M F C R A O expr P Shift PM F C R A O expr P F Shift FM F C R A O expr P factor Reduce FM F C R A O expr P term Reduce factor
F C R A O expr P term M LA: Shift MC R A O expr P term M F Shift FC R A O expr P term M factor Reduce FC R A O expr P term Reduce tMfC R A O expr Reduce ePt
R A O expr C Shift CR A factor Reduce OeCR A term Reduce factor
R A expr Reduce term
stmt Reduce RAe
57 ,
![Page 93: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/93.jpg)
Parsing statements (2)
R A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
P F M F C R A O expr LA: Reduce term
F M F C R A O expr P Shift PM F C R A O expr P F Shift FM F C R A O expr P factor Reduce FM F C R A O expr P term Reduce factor
F C R A O expr P term M LA: Shift MC R A O expr P term M F Shift FC R A O expr P term M factor Reduce FC R A O expr P term Reduce tMfC R A O expr Reduce ePt
R A O expr C Shift CR A factor Reduce OeCR A term Reduce factor
R A expr Reduce term
stmt Reduce RAe
57 ,
![Page 94: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/94.jpg)
Lexer interface
I Bison parser requires yylex() functionI yylex() returns token
I Token text is defined by regular expression patternI Tokens are encoded as integersI Symbolic names for tokens are defined by Bison in generated header
fileI By convention: Token names are all CAPITALS
I yylex() provides optional semantic value of token
I Stored in global variable yylvalI Type of yylval defined by Bison in generated header file
I Default is intI For more complex situations often a unionI For our example: Union of double (for floating point values) and
integer (for register numbers)
58 ,
![Page 95: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/95.jpg)
Lexer for desk calculator (1)
/*
Lexer for a minimal "scientific" calculator.
Copyright 2014 by Stephan Schulz, [email protected].
This code is released under the GNU General Public Licence
Version 2.
*/
%option noyywrap
%{
#include "scicalcparse.tab.h"
%}
59 ,
![Page 96: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/96.jpg)
Lexer for desk calculator (2)
DIGIT [0-9]
INT {DIGIT}+
PLAINFLOAT {INT}|{INT}[.]|{INT}[.]{INT}|[.]{INT}
EXP [eE](\+|-)?{INT}
NUMBER {PLAINFLOAT}{EXP}?
REG R{DIGIT}{DIGIT}?
%%
"*" {return MULT;}
"+" {return PLUS;}
"=" {return ASSIGN;}
"(" {return OPENPAR;}
")" {return CLOSEPAR;}
\n {return NEWLINE;}
60 ,
![Page 97: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/97.jpg)
Lexer for desk calculator (3)
{REG} {
yylval.regno = atoi(yytext+1);
return REGISTER;
}
{NUMBER} {
yylval.val = atof(yytext);
return FLOAT;
}
[ ] { /* Skip whitespace*/ }
/* Everything else is an invalid character. */
. { return ERROR;}
%%
61 ,
![Page 98: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/98.jpg)
Data model of desk calculator
I Desk calculator has simple state
I 100 floating point registersI R0-R99
I Represented in C as array of doubles:
#define MAXREGS 100
double regfile[MAXREGS];
I Needs to be initialized in support code!
62 ,
![Page 99: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/99.jpg)
Bison code for desk calculator: Header
%{
#include <stdio.h>
#define MAXREGS 100
double regfile[MAXREGS];
extern int yyerror(char* err);
extern int yylex(void);
%}
%union {
double val;
int regno;
}
63 ,
![Page 100: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/100.jpg)
Bison code for desk calculator: Tokens
%start stmtseq
%left PLUS
%left MULT
%token ASSIGN
%token OPENPAR
%token CLOSEPAR
%token NEWLINE
%token REGISTER
%token FLOAT
%token ERROR
%%
64 ,
![Page 101: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/101.jpg)
Actions in Bison
I Bison is based on syntax rules with associated actions
I Whenever a reduce is performed, the action associated with the ruleis executed
I Actions can be arbitrary C codeI Frequent: semantic actions
I The action sets a semantic value based on the semantic value of thesymbols reduced by the rule
I For terminal symbols: Semantic value is yylval from FlexI Semantic actions have “historically valuable” syntax
I Value of reduced symbol: $$I Value of first symbol in syntax rule body: $1I Value of second symbol in syntax rule body: $2I . . .I Access to named components: $<val>1
65 ,
![Page 102: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/102.jpg)
Bison code for desk calculator: Grammar (1)
stmtseq: /* Empty */
| NEWLINE stmtseq {}
| stmt NEWLINE stmtseq {}
| error NEWLINE stmtseq {}; /* After an error,
start afresh */
I Head: sequence of statements
I First body line: Skip empty lines
I Second body line: separate current statement from rest
I Third body line: After parse error, start again with new line
66 ,
![Page 103: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/103.jpg)
Bison code for desk calculator: Grammar (2)
stmt: assign {printf("> RegVal: %f\n", $<val>1);}
|expr {printf("> %f\n", $<val>1);};
assign: REGISTER ASSIGN expr {regfile[$<regno>1] = $<val>3;
$<val>$ = $<val>3;} ;
expr: expr PLUS term {$<val>$ = $<val>1 + $<val>3;}
| term {$<val>$ = $<val>1;};
term: term MULT factor {$<val>$ = $<val>1 * $<val>3;}
| factor {$<val>$ = $<val>1;};
factor: REGISTER {$<val>$ = regfile[$<regno>1];}
| FLOAT {$<val>$ = $<val>1;}
| OPENPAR expr CLOSEPAR {$<val>$ = $<val>2;};
67 ,
![Page 104: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/104.jpg)
Bison code for desk calculator: Support code
int yyerror(char* err)
{
printf("Error: %s\n", err);
return 0;
}
int main (int argc, char* argv[])
{
int i;
for(i=0; i<MAXREGS; i++)
{
regfile[i] = 0.0;
}
return yyparse();
}
68 ,
![Page 105: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/105.jpg)
Reminder: Workflow and dependencies
Bison Input File <file>.y
Definitions file <file>.tab.h
Parser Source <file>.tab.c
Flex Input file <file>.l
Lexer Source <file>.c
Lexer object <file>.o
Parser object <file>.tab.o
Final executable parser
Some input to process
Some output produced
Bison
Flex
gcc
gcc
linker (gcc)
#include
69 ,
![Page 106: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/106.jpg)
Building the calculator
1. Generate parser C code and include file for lexer
I bison -d scicalcparse.y
I Generates scicalcparse.tab.c and scicalcparse.tab.h
2. Generate lexer C code
I flex -t scicalclex.l > scicalclex.c
3. Compile lexer
I gcc -c -o scicalclex.o scicalclex.c
4. Compile parser and support code
I gcc -c -o scicalcparse.tab.o scicalcparse.tab.c
5. Link everything
I gcc scicalclex.o scicalcparse.tab.o -o scicalc
6. Fun!
I ./scicalc
End Lecture 1
70 ,
![Page 107: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/107.jpg)
Building the calculator
1. Generate parser C code and include file for lexer
I bison -d scicalcparse.y
I Generates scicalcparse.tab.c and scicalcparse.tab.h
2. Generate lexer C code
I flex -t scicalclex.l > scicalclex.c
3. Compile lexer
I gcc -c -o scicalclex.o scicalclex.c
4. Compile parser and support code
I gcc -c -o scicalcparse.tab.o scicalcparse.tab.c
5. Link everything
I gcc scicalclex.o scicalcparse.tab.o -o scicalc
6. Fun!
I ./scicalc
End Lecture 1
70 ,
![Page 108: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/108.jpg)
Refresher: Grammars
71 ,
![Page 109: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/109.jpg)
Formal Grammars: Motivation
Formal grammars describe formal languages!I Generative approach
I A grammar has a set of rulesI Rules replace words with wordsI A word that can be derived from a special start symbol is in the
language of the grammar
In the concrete case of programming languages, “Words of thelanguage” are syntactically correct programs!
72 ,
![Page 110: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/110.jpg)
Formal Grammars: Motivation
Formal grammars describe formal languages!I Generative approach
I A grammar has a set of rulesI Rules replace words with wordsI A word that can be derived from a special start symbol is in the
language of the grammar
In the concrete case of programming languages, “Words of thelanguage” are syntactically correct programs!
72 ,
![Page 111: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/111.jpg)
Grammars: Examples
S → aA, A→ bB, B → ε
generates ab (starting from S): S → aA→ abB → ab
S → ε, S → aSbgenerates anbn
73 ,
![Page 112: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/112.jpg)
Grammars: Examples
S → aA, A→ bB, B → εgenerates ab (starting from S): S → aA→ abB → ab
S → ε, S → aSbgenerates anbn
73 ,
![Page 113: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/113.jpg)
Grammars: Examples
S → aA, A→ bB, B → εgenerates ab (starting from S): S → aA→ abB → ab
S → ε, S → aSb
generates anbn
73 ,
![Page 114: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/114.jpg)
Grammars: Examples
S → aA, A→ bB, B → εgenerates ab (starting from S): S → aA→ abB → ab
S → ε, S → aSbgenerates anbn
73 ,
![Page 115: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/115.jpg)
Grammars: definition
Noam Chomsky defined a grammar as a quadruple
G = 〈VN ,VT ,P,S〉 (1)
with
1. the set of non-terminal symbols VN ,
2. the set of terminal symbols VT ,
3. the set of production rules P of the form
α→ β (2)
with α ∈ V ∗VNV∗, β ∈ V ∗,V = VN ∪ VT
4. the distinguished start symbol S ∈ VN .
74 ,
![Page 116: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/116.jpg)
Grammars: Shorthand
For the sake of simplicity, we will be using the short form
α→ β1| · · · |βn instead of α→ β1 (3)...
α→ βn
75 ,
![Page 117: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/117.jpg)
Example: C identifiers
We want to define a grammar
G = 〈VN ,VT ,P,S〉 (4)
to describe identifiers of the C programming language:
I alpha-numeric words
I which must not start with a digit
I and may contain an underscore ( )
VN = {I ,R, L,D} (identifier, rest, letter, digit),
VT = {a, · · · , z, A, · · · , Z, 0, · · · , 9, },P = {
I → LR| R|L|R → LR|DR| R|L|D|L → a| · · · |z|A| · · · |ZD → 0| · · · |9}
S = I .
76 ,
![Page 118: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/118.jpg)
Example: C identifiers
We want to define a grammar
G = 〈VN ,VT ,P,S〉 (4)
to describe identifiers of the C programming language:
I alpha-numeric words
I which must not start with a digit
I and may contain an underscore ( )
VN = {I ,R, L,D} (identifier, rest, letter, digit),
VT = {a, · · · , z, A, · · · , Z, 0, · · · , 9, },P = {
I → LR| R|L|R → LR|DR| R|L|D|L → a| · · · |z|A| · · · |ZD → 0| · · · |9}
S = I .76 ,
![Page 119: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/119.jpg)
Formal grammars: derivation
Derivation: description of operation of grammarsGiven the grammar
G = 〈VN ,VT ,P, S〉, (5)
we define the relation
x ⇒G y (6)
iff ∃u, v , p, q ∈ V ∗ : (x = upv) ∧ (p → q ∈ P) ∧ (y = uqv) (7)
pronounced as “G derives y from x in one step”.
We also define the relation
x ⇒∗G y iff ∃w0, . . . ,wn (8)
with w0 = x ,wn = y ,wi−1 ⇒G wi for i ∈ {1, · · · , n}
pronounced as “G derives y from x (in zero or more steps)”.
77 ,
![Page 120: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/120.jpg)
Formal grammars: derivation
Derivation: description of operation of grammarsGiven the grammar
G = 〈VN ,VT ,P, S〉, (5)
we define the relation
x ⇒G y (6)
iff ∃u, v , p, q ∈ V ∗ : (x = upv) ∧ (p → q ∈ P) ∧ (y = uqv) (7)
pronounced as “G derives y from x in one step”.We also define the relation
x ⇒∗G y iff ∃w0, . . . ,wn (8)
with w0 = x ,wn = y ,wi−1 ⇒G wi for i ∈ {1, · · · , n}
pronounced as “G derives y from x (in zero or more steps)”.
77 ,
![Page 121: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/121.jpg)
Formal grammars: derivation example I
G = 〈VN ,VT ,P,S〉 (9)
with
1. VN = {S},2. VT = {0},3. P = {S → 0S , S → 0},4. S = S .
Derivations of G have the general form
S ⇒ 0S ⇒ 00S ⇒ · · · ⇒ 0n−1S ⇒ 0n (10)
Thus, the language produced by G (or the language of G) is
L(G ) = {0n|n ∈ N; n > 0}. (11)
78 ,
![Page 122: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/122.jpg)
Formal grammars: derivation example I
G = 〈VN ,VT ,P,S〉 (9)
with
1. VN = {S},2. VT = {0},3. P = {S → 0S , S → 0},4. S = S .
Derivations of G have the general form
S ⇒ 0S ⇒ 00S ⇒ · · · ⇒ 0n−1S ⇒ 0n (10)
Thus, the language produced by G (or the language of G) is
L(G ) = {0n|n ∈ N; n > 0}. (11)
78 ,
![Page 123: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/123.jpg)
Formal grammars: derivation example I
G = 〈VN ,VT ,P,S〉 (9)
with
1. VN = {S},2. VT = {0},3. P = {S → 0S , S → 0},4. S = S .
Derivations of G have the general form
S ⇒ 0S ⇒ 00S ⇒ · · · ⇒ 0n−1S ⇒ 0n (10)
Thus, the language produced by G (or the language of G) is
L(G ) = {0n|n ∈ N; n > 0}. (11)
78 ,
![Page 124: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/124.jpg)
Formal grammars: derivation example II
G = 〈VN ,VT ,P,S〉 (12)
with
1. VN = {S},2. VT = {0, 1},3. P = {S → 0S1, S → 01},4. S = S .
Derivations of G have the general form
S ⇒ 0S1⇒ 00S11⇒ · · · ⇒ 0n−1S1n−1 ⇒ 0n1n. (13)
The language of G is
L(G ) = {0n1n|n ∈ N; n > 0}. (14)
Reminder: L(G) is not regular!
79 ,
![Page 125: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/125.jpg)
Formal grammars: derivation example II
G = 〈VN ,VT ,P,S〉 (12)
with
1. VN = {S},2. VT = {0, 1},3. P = {S → 0S1, S → 01},4. S = S .
Derivations of G have the general form
S ⇒ 0S1⇒ 00S11⇒ · · · ⇒ 0n−1S1n−1 ⇒ 0n1n. (13)
The language of G is
L(G ) = {0n1n|n ∈ N; n > 0}. (14)
Reminder: L(G) is not regular!
79 ,
![Page 126: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/126.jpg)
Formal grammars: derivation example II
G = 〈VN ,VT ,P,S〉 (12)
with
1. VN = {S},2. VT = {0, 1},3. P = {S → 0S1, S → 01},4. S = S .
Derivations of G have the general form
S ⇒ 0S1⇒ 00S11⇒ · · · ⇒ 0n−1S1n−1 ⇒ 0n1n. (13)
The language of G is
L(G ) = {0n1n|n ∈ N; n > 0}. (14)
Reminder: L(G) is not regular!
79 ,
![Page 127: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/127.jpg)
Formal grammars: derivation example II
G = 〈VN ,VT ,P,S〉 (12)
with
1. VN = {S},2. VT = {0, 1},3. P = {S → 0S1, S → 01},4. S = S .
Derivations of G have the general form
S ⇒ 0S1⇒ 00S11⇒ · · · ⇒ 0n−1S1n−1 ⇒ 0n1n. (13)
The language of G is
L(G ) = {0n1n|n ∈ N; n > 0}. (14)
Reminder: L(G) is not regular!79 ,
![Page 128: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/128.jpg)
The Chomsky hierarchy (0)
Definition (Grammar of type 0)
Every Chomsky grammar G = (N,Σ,P, S) is of Type 0 or unrestricted.
80 ,
![Page 129: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/129.jpg)
The Chomsky hierarchy (1)
Definition (context-sensitive grammar)
A grammar G = (N,Σ,P, S) is of is Type 1 (context-sensitive) if allproductions are of the form
α1Aα2 → α1βα2 with A ∈ N;α1, α2 ∈ V ∗, β ∈ VV ∗
where V = N ∪ Σ.Exception: the rule S → ε is allowed if S does not appear on theright-hand side of any rule
I The context must not be modified.I Rules never derive shorter words
I except for the empty word in the first step
I In fact, every grammar without contracting rules (monotonicgrammar) can be rewritten as a context-sensitive grammar.
81 ,
![Page 130: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/130.jpg)
The Chomsky hierarchy (1)
Definition (context-sensitive grammar)
A grammar G = (N,Σ,P, S) is of is Type 1 (context-sensitive) if allproductions are of the form
α1Aα2 → α1βα2 with A ∈ N;α1, α2 ∈ V ∗, β ∈ VV ∗
where V = N ∪ Σ.Exception: the rule S → ε is allowed if S does not appear on theright-hand side of any rule
I The context must not be modified.
I Rules never derive shorter words
I except for the empty word in the first step
I In fact, every grammar without contracting rules (monotonicgrammar) can be rewritten as a context-sensitive grammar.
81 ,
![Page 131: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/131.jpg)
The Chomsky hierarchy (1)
Definition (context-sensitive grammar)
A grammar G = (N,Σ,P, S) is of is Type 1 (context-sensitive) if allproductions are of the form
α1Aα2 → α1βα2 with A ∈ N;α1, α2 ∈ V ∗, β ∈ VV ∗
where V = N ∪ Σ.Exception: the rule S → ε is allowed if S does not appear on theright-hand side of any rule
I The context must not be modified.I Rules never derive shorter words
I except for the empty word in the first step
I In fact, every grammar without contracting rules (monotonicgrammar) can be rewritten as a context-sensitive grammar.
81 ,
![Page 132: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/132.jpg)
The Chomsky hierarchy (1)
Definition (context-sensitive grammar)
A grammar G = (N,Σ,P, S) is of is Type 1 (context-sensitive) if allproductions are of the form
α1Aα2 → α1βα2 with A ∈ N;α1, α2 ∈ V ∗, β ∈ VV ∗
where V = N ∪ Σ.Exception: the rule S → ε is allowed if S does not appear on theright-hand side of any rule
I The context must not be modified.I Rules never derive shorter words
I except for the empty word in the first step
I In fact, every grammar without contracting rules (monotonicgrammar) can be rewritten as a context-sensitive grammar.
81 ,
![Page 133: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/133.jpg)
The Chomsky hierarchy (1)
Definition (context-sensitive grammar)
A grammar G = (N,Σ,P, S) is of is Type 1 (context-sensitive) if allproductions are of the form
α1Aα2 → α1βα2 with A ∈ N;α1, α2 ∈ V ∗, β ∈ VV ∗
where V = N ∪ Σ.Exception: the rule S → ε is allowed if S does not appear on theright-hand side of any rule
I The context must not be modified.I Rules never derive shorter words
I except for the empty word in the first step
I In fact, every grammar without contracting rules (monotonicgrammar) can be rewritten as a context-sensitive grammar.
81 ,
![Page 134: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/134.jpg)
The Chomsky hierarchy (2)
Definition (context-free grammar)
A grammar G = (N,Σ,P, S) is of is Type 2 (context-free) if allproductions are of the form
A→ β with A ∈ N;β ∈ V ∗
I Only single non-terminals are replaced
I independent of their context
I Contracting rules are allowed!
I context-free grammars are not a subset of context-sensitive grammarsI but: context-free languages are a subset of context-sensitive languagesI reason: contracting rules can be removed from context-free
grammars, but not from context-sensitive ones
82 ,
![Page 135: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/135.jpg)
The Chomsky hierarchy (2)
Definition (context-free grammar)
A grammar G = (N,Σ,P, S) is of is Type 2 (context-free) if allproductions are of the form
A→ β with A ∈ N;β ∈ V ∗
I Only single non-terminals are replaced
I independent of their context
I Contracting rules are allowed!
I context-free grammars are not a subset of context-sensitive grammarsI but: context-free languages are a subset of context-sensitive languagesI reason: contracting rules can be removed from context-free
grammars, but not from context-sensitive ones
82 ,
![Page 136: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/136.jpg)
The Chomsky hierarchy (2)
Definition (context-free grammar)
A grammar G = (N,Σ,P, S) is of is Type 2 (context-free) if allproductions are of the form
A→ β with A ∈ N;β ∈ V ∗
I Only single non-terminals are replaced
I independent of their context
I Contracting rules are allowed!
I context-free grammars are not a subset of context-sensitive grammarsI but: context-free languages are a subset of context-sensitive languagesI reason: contracting rules can be removed from context-free
grammars, but not from context-sensitive ones
82 ,
![Page 137: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/137.jpg)
The Chomsky hierarchy (2)
Definition (context-free grammar)
A grammar G = (N,Σ,P, S) is of is Type 2 (context-free) if allproductions are of the form
A→ β with A ∈ N;β ∈ V ∗
I Only single non-terminals are replaced
I independent of their context
I Contracting rules are allowed!
I context-free grammars are not a subset of context-sensitive grammarsI but: context-free languages are a subset of context-sensitive languagesI reason: contracting rules can be removed from context-free
grammars, but not from context-sensitive ones
82 ,
![Page 138: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/138.jpg)
The Chomsky hierarchy (2)
Definition (context-free grammar)
A grammar G = (N,Σ,P, S) is of is Type 2 (context-free) if allproductions are of the form
A→ β with A ∈ N;β ∈ V ∗
I Only single non-terminals are replaced
I independent of their context
I Contracting rules are allowed!
I context-free grammars are not a subset of context-sensitive grammars
I but: context-free languages are a subset of context-sensitive languagesI reason: contracting rules can be removed from context-free
grammars, but not from context-sensitive ones
82 ,
![Page 139: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/139.jpg)
The Chomsky hierarchy (2)
Definition (context-free grammar)
A grammar G = (N,Σ,P, S) is of is Type 2 (context-free) if allproductions are of the form
A→ β with A ∈ N;β ∈ V ∗
I Only single non-terminals are replaced
I independent of their context
I Contracting rules are allowed!
I context-free grammars are not a subset of context-sensitive grammarsI but: context-free languages are a subset of context-sensitive languages
I reason: contracting rules can be removed from context-freegrammars, but not from context-sensitive ones
82 ,
![Page 140: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/140.jpg)
The Chomsky hierarchy (2)
Definition (context-free grammar)
A grammar G = (N,Σ,P, S) is of is Type 2 (context-free) if allproductions are of the form
A→ β with A ∈ N;β ∈ V ∗
I Only single non-terminals are replaced
I independent of their context
I Contracting rules are allowed!
I context-free grammars are not a subset of context-sensitive grammarsI but: context-free languages are a subset of context-sensitive languagesI reason: contracting rules can be removed from context-free
grammars, but not from context-sensitive ones
82 ,
![Page 141: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/141.jpg)
The Chomsky hierarchy (3)
Definition (right-linear grammar)
A grammar G = (N,Σ,P, S) is of Type 3 (right-linear or regular) if allproductions are of the form
A→ aB
with A ∈ N;B ∈ N ∪ {ε}; a ∈ Σ ∪ {ε}
I only one NTS on the left
I on the right: one TS, one NTS (in that order), both, or neither
I analogy with automata is obvious
83 ,
![Page 142: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/142.jpg)
The Chomsky hierarchy (3)
Definition (right-linear grammar)
A grammar G = (N,Σ,P, S) is of Type 3 (right-linear or regular) if allproductions are of the form
A→ aB
with A ∈ N;B ∈ N ∪ {ε}; a ∈ Σ ∪ {ε}
I only one NTS on the left
I on the right: one TS, one NTS (in that order), both, or neither
I analogy with automata is obvious
83 ,
![Page 143: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/143.jpg)
The Chomsky hierarchy (3)
Definition (right-linear grammar)
A grammar G = (N,Σ,P, S) is of Type 3 (right-linear or regular) if allproductions are of the form
A→ aB
with A ∈ N;B ∈ N ∪ {ε}; a ∈ Σ ∪ {ε}
I only one NTS on the left
I on the right: one TS, one NTS (in that order), both, or neither
I analogy with automata is obvious
83 ,
![Page 144: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/144.jpg)
The Chomsky hierarchy (3)
Definition (right-linear grammar)
A grammar G = (N,Σ,P, S) is of Type 3 (right-linear or regular) if allproductions are of the form
A→ aB
with A ∈ N;B ∈ N ∪ {ε}; a ∈ Σ ∪ {ε}
I only one NTS on the left
I on the right: one TS, one NTS (in that order), both, or neither
I analogy with automata is obvious
83 ,
![Page 145: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/145.jpg)
Formal grammars and formal languages
Definition (language classes)
A language is called
recursively enumerable, context-sensitive, context-free, or regular,
if it can be generated by a
unrestricted, context-sensitive, context-free, or regular
grammar, respectively.
84 ,
![Page 146: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/146.jpg)
The Chomsky Hierarchy for Languages
Type 0 (recursively enumerable)
Type 1 (context-sensitive)
Type 2 (context-free)
Type 3 (regular)
(all languages)
85 ,
![Page 147: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/147.jpg)
The Chomsky Hierarchy for Grammars
Type 0 (unrestricted)
Type 1 (context-sensitive)
Type 2 (context-free)
Type 3 (right linear)
86 ,
![Page 148: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/148.jpg)
The Chomsky hierarchy: exercises
G = 〈VN ,VT ,P,S〉 (15)
with
1. VN = {S ,A,B},2. VT = {0},3. P : S → ε 1
S → ABA 2
AB → 00 3
0A → 000A 4
A → 0 5
4. S = S .
a) What is G ’s highest type?
b) Show how G derives the word 00000.
c) Formally describe the language L(G ).
d) Define a regular grammar G ′ equivalent to G .
87 ,
![Page 149: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/149.jpg)
The Chomsky hierarchy: exercises
G = 〈VN ,VT ,P,S〉 (15)
with
1. VN = {S ,A,B},2. VT = {0},3. P : S → ε 1
S → ABA 2
AB → 00 3
0A → 000A 4
A → 0 5
4. S = S .
a) What is G ’s highest type?
b) Show how G derives the word 00000.
c) Formally describe the language L(G ).
d) Define a regular grammar G ′ equivalent to G .87 ,
![Page 150: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/150.jpg)
The Chomsky hierarchy: exercises (cont.)
An octal constant is a finite sequence of digits starting with 0 followed byat least one digit ranging from 0 to 7. Define a regular grammarencoding exactly the set of possible octal constants.
88 ,
![Page 151: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/151.jpg)
Context-free grammars
I Reminder: G = 〈VN ,VT ,P, S〉 is context-free, if all l → r ∈ P areof the form A→ β with
I A ∈ VN and β ∈ V ∗
I Context-free languages/grammars are highly relevant
I Core of most programming languagesI Algebraic expressionsI XMLI Many aspects of human language
89 ,
![Page 152: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/152.jpg)
Grammars in Practice
I Most programming languages are described by context-freegrammars (with extra “semantic” constraints)
I Grammars generate languages
I PDAs and e.g. CYK-Parsing recognize wordsI For compiler we need to . . .
I identify correct programsI and understand their structure!
90 ,
![Page 153: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/153.jpg)
Lexing and Parsing
I Lexer: Breaks programs into tokens/lexemesI Smallest parts with semantic meaning
I Strictly: Lexeme is the text, token is the typeI . . . but few people are strict!
I Can be recognized by regular languages/patternsI Example: 1, 2, 5 are all IntegersI Example: i, handle, stream are all IdentifiersI Example: >, >=, * are all individual operators
I Parser: Recognizes program structure
I Language described by a grammar that has token types as terminals,not individual characters
I Parser builds parse tree
91 ,
![Page 154: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/154.jpg)
Introduction: nanoLang
92 ,
![Page 155: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/155.jpg)
Our first language: nanoLang
I Simple but Turing-complete languageI Block-structured
I Functions with parametersI Blocks of statements with local variables
I Syntax “C-like” but simplified
I Basic flow control (if, while, return)
I Simple static type system
I Integers (64 bit signed)I Strings (immutable)
93 ,
![Page 156: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/156.jpg)
nanoLang “Hello World”
# The f i r s t e v e r nanoLang program
I n t e g e r main ( ){
p r i n t ” H e l l o World\n” ;return 0 ;
}
94 ,
![Page 157: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/157.jpg)
More Substantial nanoLang Example
I n t e g e r h e l l o ( I n t e g e r r e p e a t , S t r i n g message ){
I n t e g e r i ;i = 0 ;whi le ( i<r e p e a t ){
p r i n t message ;i = i +1;
}return 0 ;
}
I n t e g e r main ( ){
h e l l o ( 1 0 , ” H e l l o \n” ) ;return 0 ;
}95 ,
![Page 158: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/158.jpg)
nanoLang Lexical Structure
I Reserved words:
I if, while, return, print, else, Integer, String
I Comments: # to the end of the lineI Variable length tokens:
I Identifier (letter, followed by letters and digits)I Strings (enclosed in double quotes (¨This is a string¨)I Integer numbers (non-empty sequences of digits)
I Other tokens:
I Brackets: (,), {,}I Operators: +, -, *, /
I Comparison operators: >, >=, <, <=, !=
I Equal sign = (used for comparison and assignments!)I Separators: ,, ;
96 ,
![Page 159: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/159.jpg)
nanoLang Program Structure
I A nanoLang program consists of a number of definitions
I Definitions can define global variables or functionsI All symbols defined in the global scope are visible everywhere in the
global scope
I Functions accept arguments and return values
I Functions consist of a header and a statement blocksI Local variables can be defined in statement blocks
I Statements:
I if and if/else: Conditional executionI while: Structured loopsI return: Return value from functionI print: Print value to ScreenI Assignment: Set variables to valuesI Function calls (return value ignored)
I Expressions:
I Integers: Variables, numbers, +,-,*,/I Booleans: Compare two values of equal type
97 ,
![Page 160: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/160.jpg)
Exercise: Fibonacci in nanoLang
I Write a recursive and an iterative implementation of Fibonaccinumbers in nanoLang
98 ,
![Page 161: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/161.jpg)
nanoLang Grammar (Bison format) (0 -tokens)
%start prog
%token IDENT
%token STRINGLIT
%token INTLIT
%token INTEGER STRING
%token IF WHILE RETURN PRINT ELSE
%token EQ NEQ LT GT LEQ GEQ
%left PLUS MINUS
%left MULT DIV
%right UMINUS
%token OPENPAR CLOSEPAR
%token SEMICOLON COMA
%token OPENCURLY CLOSECURLY
%token ERROR
99 ,
![Page 162: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/162.jpg)
nanoLang Grammar (Bison format) (1)
prog: /* Nothing */
| prog def
;
def: vardef
| fundef
;
vardef: type idlist SEMICOLON
;
idlist: IDENT
| idlist COMA IDENT
fundef: type IDENT OPENPAR params CLOSEPAR body
;
100 ,
![Page 163: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/163.jpg)
nanoLang Grammar (Bison format) (2)
type: STRING
| INTEGER
;
params: /* empty */
| paramlist
;
paramlist: param
| paramlist COMA param
;
param: type IDENT
;
body: OPENCURLY vardefs stmts CLOSECURLY
;101 ,
![Page 164: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/164.jpg)
nanoLang Grammar (Bison format) (3)
vardefs: /* empty */
| vardefs vardef
;
stmts: /* empty */
| stmts stmt
;
stmt: while_stmt
| if_stmt
| ret_stmt
| print_stmt
| assign
| funcall_stmt
;
102 ,
![Page 165: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/165.jpg)
nanoLang Grammar (Bison format) (4)
while_stmt: WHILE OPENPAR boolexpr CLOSEPAR body
;
if_stmt: IF OPENPAR boolexpr CLOSEPAR body
| IF OPENPAR boolexpr CLOSEPAR body ELSE body
;
ret_stmt: RETURN expr SEMICOLON
;
103 ,
![Page 166: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/166.jpg)
nanoLang Grammar (Bison format) (5)
print_stmt: PRINT expr SEMICOLON
;
assign: IDENT EQ expr SEMICOLON
;
funcall_stmt: funcall SEMICOLON
;
boolexpr: expr EQ expr
| expr NEQ expr
| expr LT expr
| expr GT expr
| expr LEQ expr
| expr GEQ expr
;
104 ,
![Page 167: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/167.jpg)
nanoLang Grammar (Bison format) (6)
expr: funcall
| INTLIT
| IDENT
| STRINGLIT
| OPENPAR expr CLOSEPAR
| expr PLUS expr
| expr MINUS expr
| expr MULT expr
| expr DIV expr
| MINUS expr
;
105 ,
![Page 168: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/168.jpg)
nanoLang Grammar (Bison format) (7)
funcall: IDENT OPENPAR args CLOSEPAR
;
args: /* empty */
| arglist
;
arglist: expr
| arglist COMA expr
;
End Lecture 2
106 ,
![Page 169: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/169.jpg)
nanoLang Grammar (Bison format) (7)
funcall: IDENT OPENPAR args CLOSEPAR
;
args: /* empty */
| arglist
;
arglist: expr
| arglist COMA expr
;
End Lecture 2
106 ,
![Page 170: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/170.jpg)
Words vs. Derivations vs. Structure
I Assume a grammar G = 〈VN ,VT ,P, S〉 with associated languageL(G )
I Question so far: w ∈ L(G )?
I I.e. S ⇒∗G w?
I Now we are interested in the structure of words
I a + b ∗ c + d should be interpreted as (a + (b ∗ c)) + dI We are looking at derivations that reflect this structureI We are looking for grammars that support such derivations (and only
such derivations)
107 ,
![Page 171: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/171.jpg)
A Running Example
I We will consider the set of well-formed expressions over x ,+, ∗, (, )as an example, i.e. the language L(G ) for G as follows:
I VN = {E}I VT = {(, ),+, ∗, x}I Start symbol is EI Productions:
1. E → x2. E → (E)3. E → E + E4. E → E ∗ E
108 ,
![Page 172: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/172.jpg)
Derivations
Definition (Derivation)
Assume a Grammar G . A derivation of a word wn in L(G ) is a sequenceS =⇒ w1 =⇒ . . . =⇒ wn where S is the start symbol, and each wi isgenerated from its predecessor by application of a production of thegrammar.
I Example: Consider our running example. We bold the replacedsymbol. The following is a derivation of x + x + x ∗ x :
E=⇒ E + E=⇒ E + E + E=⇒ E + E + E ∗ E=⇒ x + E + E ∗ E=⇒ x + x + E ∗ E=⇒ x + x + x ∗ E=⇒ x + x + x ∗ x
109 ,
![Page 173: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/173.jpg)
Rightmost/Leftmost Derivations
Definition (Rightmost/leftmost derivation)
I A derivation is called a rightmost derivation, if at any step itreplaces the rightmost non-terminal in the current word.
I A derivation is called a leftmost derivation, if at any step it replacesthe leftmost non-terminal in the current word.
I Examples:
I The derivation on the previous slide is neither leftmost nor rightmost.I E =⇒ E + E =⇒ E + E + E =⇒ E + E + E ∗ E =⇒
E + E + E ∗ x =⇒ E + E + x ∗ x =⇒ E + x + x ∗ x =⇒ x + x + x ∗ xis a rightmost derivation.
110 ,
![Page 174: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/174.jpg)
Parse trees
Definition (Parse tree)
A parse tree for a derivation in a grammar G = 〈VN ,VT ,P, S〉 is anordered, labelled tree with the following properties:
I Each node is labelled with a symbol from VN ∪ VT
I The root of the tree is labelled with the start symbol S .
I Each inner node is labelled with a single non-terminal symbol fromVN
I If an inner node with label A has children labelled with symbolsα1, . . . , αn, then there is a production A→ α1 . . . αn in P.
+
I The parse tree represents a derivation of the word formed by thelabels of the leaf nodes
I It abstracts from the order in which productions are applied.
111 ,
![Page 175: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/175.jpg)
Parse trees: Example
Consider the following derivation:E =⇒ E + E =⇒ E + E + E =⇒ E + E + E ∗ E =⇒E + E + E ∗ x =⇒ E + E + x ∗ x =⇒ E + x + x ∗ x =⇒ x + x + x ∗ xIt can be represented by a sequence of parse trees:
112 ,
![Page 176: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/176.jpg)
Parse trees: Example
Consider the following derivation:E =⇒ E + E =⇒ E + E + E =⇒ E + E + E ∗ E =⇒E + E + E ∗ x =⇒ E + E + x ∗ x =⇒ E + x + x ∗ x =⇒ x + x + x ∗ xIt can be represented by a sequence of parse trees:
E
112 ,
![Page 177: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/177.jpg)
Parse trees: Example
Consider the following derivation:E =⇒ E + E =⇒ E + E + E =⇒ E + E + E ∗ E =⇒E + E + E ∗ x =⇒ E + E + x ∗ x =⇒ E + x + x ∗ x =⇒ x + x + x ∗ xIt can be represented by a sequence of parse trees:
E
E + E
112 ,
![Page 178: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/178.jpg)
Parse trees: Example
Consider the following derivation:E =⇒ E + E =⇒ E + E + E =⇒ E + E + E ∗ E =⇒E + E + E ∗ x =⇒ E + E + x ∗ x =⇒ E + x + x ∗ x =⇒ x + x + x ∗ xIt can be represented by a sequence of parse trees:
E
E + E
E + E
112 ,
![Page 179: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/179.jpg)
Parse trees: Example
Consider the following derivation:E =⇒ E + E =⇒ E + E + E =⇒ E + E + E ∗ E =⇒E + E + E ∗ x =⇒ E + E + x ∗ x =⇒ E + x + x ∗ x =⇒ x + x + x ∗ xIt can be represented by a sequence of parse trees:
E
E + E
E + E
E * E
112 ,
![Page 180: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/180.jpg)
Parse trees: Example
Consider the following derivation:E =⇒ E + E =⇒ E + E + E =⇒ E + E + E ∗ E =⇒E + E + E ∗ x =⇒ E + E + x ∗ x =⇒ E + x + x ∗ x =⇒ x + x + x ∗ xIt can be represented by a sequence of parse trees:
E
E + E
E + E
E * E
x
112 ,
![Page 181: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/181.jpg)
Parse trees: Example
Consider the following derivation:E =⇒ E + E =⇒ E + E + E =⇒ E + E + E ∗ E =⇒E + E + E ∗ x =⇒ E + E + x ∗ x =⇒ E + x + x ∗ x =⇒ x + x + x ∗ xIt can be represented by a sequence of parse trees:
E
E + E
E + E
E * E
x x
112 ,
![Page 182: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/182.jpg)
Parse trees: Example
Consider the following derivation:E =⇒ E + E =⇒ E + E + E =⇒ E + E + E ∗ E =⇒E + E + E ∗ x =⇒ E + E + x ∗ x =⇒ E + x + x ∗ x =⇒ x + x + x ∗ xIt can be represented by a sequence of parse trees:
E
E + E
E + E
x E * E
x x
112 ,
![Page 183: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/183.jpg)
Parse trees: Example
Consider the following derivation:E =⇒ E + E =⇒ E + E + E =⇒ E + E + E ∗ E =⇒E + E + E ∗ x =⇒ E + E + x ∗ x =⇒ E + x + x ∗ x =⇒ x + x + x ∗ xIt can be represented by a sequence of parse trees:
E
E + E
x E + E
x E * E
x x
112 ,
![Page 184: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/184.jpg)
Ambiguity
Definition (Ambiguity)
A grammar G = 〈VN ,VT ,P, S〉 is ambiguous, if it has multiple differentparse trees for a word w in L(G ).
I Consider our running example with the following productions:1. E → x2. E → (E )3. E → E + E4. E → E ∗ E
I The following 2 parse trees represent derivations of x + x + x :E
E + E
x E + E
x x
E
E + E
E + E x
x x
113 ,
![Page 185: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/185.jpg)
Exercise: Ambiguity is worse. . .
I Consider our exampleand the parse trees fromthe previous slide:
1. E → x2. E → (E )3. E → E + E4. E → E ∗ E
E
E + E
x E + E
x x
E
E + E
E + E x
x x
I Provide a rightmost derivation for the right tree.
I Provide a rightmost derivation for the left tree.
I Provide a leftmost derivation for the left tree.
I Provide a leftmost derivation for the right tree.
114 ,
![Page 186: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/186.jpg)
Exercise: Eliminating Ambiguity
I Consider our running example with the following productions:
1. E → x2. E → (E )3. E → E + E4. E → E ∗ E
I Define a grammar G ′ with L(G ) = L(G ′) that is not ambiguous,that respects that ∗ has a higher precedence than +, and thatrespects left-associativity for all operators.
I Hints:
I The different precedence levels (products and sums) need to begenerated from different non-terminals
I Within each level, symmetry needs to be broken (one term vs. therest) in a way reflecting left-associativity
Solution
115 ,
![Page 187: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/187.jpg)
Exercise: Eliminating Ambiguity
I Consider our running example with the following productions:
1. E → x2. E → (E )3. E → E + E4. E → E ∗ E
I Define a grammar G ′ with L(G ) = L(G ′) that is not ambiguous,that respects that ∗ has a higher precedence than +, and thatrespects left-associativity for all operators.
I Hints:
I The different precedence levels (products and sums) need to begenerated from different non-terminals
I Within each level, symmetry needs to be broken (one term vs. therest) in a way reflecting left-associativity
Solution
115 ,
![Page 188: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/188.jpg)
Abstract Syntax Trees (1)
I Abstract Syntax Trees represent the structure of a derivationwithout the specific details
I Think: “Parse trees without the syntactic sugar”
I Not an unambiguous definitionI Many different versions existI Important: Do not lose relevant information!
I I use the following:
I Unnecessary terminal symbols are droppedI When possible, the terminal defining the type of a subtree is merged
with the non-terminal parent node
116 ,
![Page 189: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/189.jpg)
Abstract Syntax Trees (2)
I Abstract Syntax Trees represent the structure of a derivationwithout the specific details
I Example:
Parse Tree:E
E + E
E + E x
x x
Corresponding AST:
+
+ x
x x
117 ,
![Page 190: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/190.jpg)
Exercise: Abstract Syntax Trees
I Define two non-trivial arithmetic expressions (according to ourrunning example)
I Each should have at least 4 operatorsI At least one should use two pairs of parentheses
I Find a rightmost derivation in G that respects associativity andoperator precedence for each expression
I Find the corresponding parse tree for each expression
I Convert the parse trees to abstract syntax trees
118 ,
![Page 191: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/191.jpg)
Building Complex Software
I Complex projects consist of many diffent files
I Some user-edited, some generatedI E.g. flex input fileI E.g. C source filesI E.g. object filesI E.g. final executable
I Any given generated file may depend on a number of input files
I If one of the input files changes, the generated file needs to beupdated
I This can cascade (assume A depends on B, B depends on C, Cdepends on D - what happens if D changes?)
119 ,
![Page 192: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/192.jpg)
Example: Flex und Bison Workflow
Bison Input File <file>.y
Definitions file <file>.tab.h
Parser Source <file>.tab.c
Flex Input file <file>.l
Lexer Source <file>.c
Lexer object <file>.o
Parser object <file>.tab.o
Final executable parser
Some input to process
Some output produced
Bison
Flex
gcc
gcc
linker (gcc)
#include
120 ,
![Page 193: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/193.jpg)
Build Automation with make
I make is the traditional UNIX tool for build automation
I Models dependenciesI Triggers rebuilds when necessary
I Important concepts:I Rules, consisting of
I Targets – that need to be rebuildI Dependencies – inputs required for building a targetI Commands – to create the target from the dependencies
I Implicit and built-in rulesI Make knows how to build a .o from a .cI . . . and many other recipesI Users can write generic rules to exend this knowledge
I Makefile variablesI . . . are used to instantiate generic rulesI E.g. name of the C compilerI E.g. compiler optionsI E.g. name of lex
121 ,
![Page 194: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/194.jpg)
Makefiles
I Build instructions are encoded in a makefile
I make looks for Makefile or makefileI Optional: make -f myfunnymakefilename
I Syntax of make files
I Setting of variables: CC=gccI Targets and dependencies: target: dep1 dep2 dep3
I Recipes: All lines after a target that start with a tab characterdescribe commands to be executed to build the target
I make always builds the first target in the Makefile
I If there are multiple targets, use a phony pseudotarget that dependson all real targets
I Make computes all dependencies and determines the build orderI For each target it checks if the file exists and is newer than all its
dependenciesI If not, the recipe is executed to update the targetI If target is not a file, it is rebuild every time
122 ,
![Page 195: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/195.jpg)
Makefile Example
LEX = flex
YACC = bison
CC = gcc
LD = gcc
all: scicalc
scicalclex.c: scicalclex.l scicalcparse.tab.h
scicalcparse.tab.h: scicalcparse.y
$(YACC) -d scicalcparse.y
scicalcparse.tab.c: scicalcparse.y
$(YACC) -d scicalcparse.y
scicalcparse.tab.o: scicalcparse.tab.c
scicalc: scicalclex.o scicalcparse.tab.o
$(LD) scicalclex.o scicalcparse.tab.o -o scicalc123 ,
![Page 196: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/196.jpg)
A Second Example
LEX = flex
YACC = bison
CC = gcc
LD = gcc
CFLAGS = -ggdb
all: nanolex nanolex_sa
nanolex_sa.c: nanolex_sa.l
nanolex_sa: nanolex_sa.c
gcc -o nanolex_sa nanolex_sa.c
nanolex: nanolex.c
gcc -o nanolex nanolex.c
124 ,
![Page 197: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/197.jpg)
More on Make
I Standard make for modern UNIX dialects is GNU Make
I Documentation: https://www.gnu.org/software/make/manual/
Use of make is optional, but highly recommended
125 ,
![Page 198: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/198.jpg)
Flex/Bison Interface
I Bison calls the function yylex to get the next tokenI yylex executes user rules (pattern/action)
I User actions return token (integer value)I Additionally: yylval can be set and is available in Bison via the
$$/$1/... mechanism
I yylval provides the semantic value of a tokenI For complex languages: Use a (pointer to) a struct
I Content: Position, string values, numerical values, . . .
I Type of yylval if set in Bison file!
% define api.value.type {YourType}
I It’s probably a good idea to have a relatively simple type for yylval
End Lecture 3
126 ,
![Page 199: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/199.jpg)
Flex/Bison Interface
I Bison calls the function yylex to get the next tokenI yylex executes user rules (pattern/action)
I User actions return token (integer value)I Additionally: yylval can be set and is available in Bison via the
$$/$1/... mechanism
I yylval provides the semantic value of a tokenI For complex languages: Use a (pointer to) a struct
I Content: Position, string values, numerical values, . . .
I Type of yylval if set in Bison file!
% define api.value.type {YourType}
I It’s probably a good idea to have a relatively simple type for yylval
End Lecture 3
126 ,
![Page 200: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/200.jpg)
Context: Where are we?
Back End
Front End
Variable Typea intb int
Source handler
Lexical analysis (tokeniser)
Syntactic analysis (parser)
Semantic analysis
Sequence of characters: i,n,t, ⏘, a,,, b, ;, a, =, b, +, 1, ;
Sequence of tokens: (id, “int”), (id, “a”), (id, “b”), (semicolon), (id, “a”), (eq), (id, “b”), (plus), (int, “1”), (semicolon)
e.g. Abstract syntax tree
e.g. AST+symbol table+attributes
e.g. assembler code
�������
����
����
����
����
����
�
����
���� �����
���� ����������
ld a,b ld c, 1 add c ...
����
����
����
�
����
�����
����������
Code generation (several optimisation passes)
Code generation (several optimisation passes)
127 ,
![Page 201: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/201.jpg)
Context: Where are we?
Back End
Front End
Variable Typea intb int
Source handler
Lexical analysis (tokeniser)
Syntactic analysis (parser)
Semantic analysis
Sequence of characters: i,n,t, ⏘, a,,, b, ;, a, =, b, +, 1, ;
Sequence of tokens: (id, “int”), (id, “a”), (id, “b”), (semicolon), (id, “a”), (eq), (id, “b”), (plus), (int, “1”), (semicolon)
e.g. Abstract syntax tree
e.g. AST+symbol table+attributes
e.g. assembler code
�������
����
����
����
����
����
�
����
���� �����
���� ����������
ld a,b ld c, 1 add c ...
����
����
����
�
����
�����
����������
Code generation (several optimisation passes)
Code generation (several optimisation passes)
127 ,
![Page 202: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/202.jpg)
Context: Where are we?
Back End
Front End
Variable Typea intb int
Source handler
Lexical analysis (tokeniser)
Syntactic analysis (parser)
Semantic analysis
Sequence of characters: i,n,t, ⏘, a,,, b, ;, a, =, b, +, 1, ;
Sequence of tokens: (id, “int”), (id, “a”), (id, “b”), (semicolon), (id, “a”), (eq), (id, “b”), (plus), (int, “1”), (semicolon)
e.g. Abstract syntax tree
e.g. AST+symbol table+attributes
e.g. assembler code
�������
����
����
����
����
����
�
����
���� �����
���� ����������
ld a,b ld c, 1 add c ...
����
����
����
�
����
�����
����������
Code generation (several optimisation passes)
Code generation (several optimisation passes)
127 ,
![Page 203: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/203.jpg)
Reminder: Abstract Syntax Trees
I Abstract Syntax Trees represent the structure of a derivationwithout the specific details
I Think: “Parse trees without the syntactic sugar”
I Example:
Parse Tree:E
E + E
E + E x
x x
Corresponding AST:
+
+ x
x x
128 ,
![Page 204: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/204.jpg)
From Code to AST
I n t e g e r h e l l o ( I n t e g e r r e p e a t ,S t r i n g message )
{I n t e g e r i ;i = 0 ;whi le ( i<r e p e a t ){
p r i n t message ;i = i +1;
}re tu rn 0 ;
}
I n t e g e r main ( ){
h e l l o ( 1 0 , ” H e l l o \n” ) ;re tu rn 0 ;
}
prog
prog fundef
fundef
t_INTEGERt_IDENThello
params body
paramlist
param param
t_INTEGERt_IDENTrepeat
t_STRINGt_IDENTmessage
vardef stmts
t_INTEGERt_IDENT
istmts ret_stmt
assign while_stmt
t_IDENTi
t_INTLIT0
t_LT body
t_IDENTi
t_IDENTrepeat
stmts
print_stmt assign
t_IDENTmessage
t_IDENTi
t_PLUS
t_IDENTi
t_INTLIT1
t_INTLIT0
t_INTEGERt_IDENTmain
params body
stmts
funcall ret_stmt
t_IDENThello
arglist
t_INTLIT10
Hello
t_INTLIT0
129 ,
![Page 205: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/205.jpg)
....to ASTprog
prog fundef
fundef
t_INTEGERt_IDENThello
params body
paramlist
param param
t_INTEGERt_IDENTrepeat
t_STRINGt_IDENTmessage
vardef stmts
t_INTEGERt_IDENT
istmts ret_stmt
assign while_stmt
t_IDENTi
t_INTLIT0
t_LT body
t_IDENTi
t_IDENTrepeat
stmts
print_stmt assign
t_IDENTmessage
t_IDENTi
t_PLUS
t_IDENTi
t_INTLIT1
t_INTLIT0
t_INTEGERt_IDENTmain
params body
stmts
funcall ret_stmt
t_IDENThello
arglist
t_INTLIT10
Hello
t_INTLIT0
130 ,
![Page 206: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/206.jpg)
From Code to AST (smaller example)
Example expression:
−a+b∗( c+d )
t_PLUS
t_MINUS t_MULT
t_IDENTa
t_IDENTb
t_PLUS
t_IDENTc
t_IDENTd
I Observation: Every leaf node corresponds to a lexer token!
131 ,
![Page 207: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/207.jpg)
From Code to AST (smaller example)
Example expression:
−a+b∗( c+d )
t_PLUS
t_MINUS t_MULT
t_IDENTa
t_IDENTb
t_PLUS
t_IDENTc
t_IDENTd
I Observation: Every leaf node corresponds to a lexer token!
131 ,
![Page 208: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/208.jpg)
ASTs are Trees
I Trees can be recursively defined:
I (The empty tree is a tree)I A single node is a treeI A node whose children are trees is a tree
I For ASTs:
I Base case: Leaves of the AST are provided by the lexerI Recursive case: Internal nodes are build from the subtrees
corresponding to the RHS of a matched syntax rule
I In practice:
I For tokens that correspond to AST leaves: Lexer allocates single nodeand assigns it to yylval
I For complex rules:I Subtrees are ASTs communicated via semantic values of matched
RHS terminals or non-terminalsI Result tree is assembled and passed up via the semantic value of the
rule
132 ,
![Page 209: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/209.jpg)
Reminder: Desk calculator
I Desk calculator
I Reads algebraic expressions and assignmentsI Prints result of expressionsI Can store values in registers R0-R99
I Example session:
[Shell] ./scicalc
R10=3*(5+4)
> RegVal: 27.000000
(3.1415*R10+3)
> 87.820500
R9=(3.1415*R10+3)
> RegVal: 87.820500
R9+R10
> 114.820500
...
133 ,
![Page 210: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/210.jpg)
Reminder: Desk calculator
I Desk calculator
I Reads algebraic expressions and assignmentsI Prints result of expressionsI Can store values in registers R0-R99
I Example session:
[Shell] ./scicalc
R10=3*(5+4)
> RegVal: 27.000000
(3.1415*R10+3)
> 87.820500
R9=(3.1415*R10+3)
> RegVal: 87.820500
R9+R10
> 114.820500
...
133 ,
![Page 211: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/211.jpg)
Abstract grammar for desk calculator (partial)
GDC = 〈VN ,VT ,P, S〉I VT = {PLUS, MULT,
ASSIGN, OPENPAR,CLOSEPAR, REGISTER,FLOAT, . . . }I Some terminals are
single characters (+,=, . . . )
I Others are complex:R10, 1.3e7
I Terminals (“tokens”)are generated by thelexer
I VN = {stmt, assign,expr, term, factor, . . . }
I P :stmt → assign
| expr
assign → REGISTER ASSIGN expr
expr → expr PLUS term
| term
term → term MULT factor
| factor
factor → REGISTER
| FLOAT
| OPENPAR expr CLOSEPAR
I S = *handwave*
I For a single statement, S = stmt
I In practice, we need to handlesequences of statements and emptyinput lines (not reflected in thegrammar)
134 ,
![Page 212: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/212.jpg)
Bottom-up parsing
I Tokenized input is read left-to-rightI Current state of the parse is represented by a stack
I Stack contains terminals and non-terminals
I Important operations:
I Reduce - when the top symbols of the stack match the RHS of a ruleLHS → RHS , they can be replaced by the LHS
I Shift - move the next input token from the input onto the stackI Look-ahead - when both Shift and Reduce are possible, check if a
shift would potentially enable a longer RHS to match
135 ,
![Page 213: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/213.jpg)
Parsing statements (1)
I Example string: R10 = (4.5+3*7)I Tokenized: REGISTER ASSIGN
OPENPAR FLOAT PLUS FLOAT MULTFLOAT CLOSEPAR
I Abbreviated: R A O F P F M F C
I Parsing state:
I Unread input (left column)I Current stack (top element on right)I How state was reached
stmt → assign
| expr
assign → R A expr
expr → expr P term
| term
term → term M factor
| factor
factor → R
| F
| O expr C
Input Stack CommentR A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
. . .
136 ,
![Page 214: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/214.jpg)
Parsing statements (1)
I Example string: R10 = (4.5+3*7)I Tokenized: REGISTER ASSIGN
OPENPAR FLOAT PLUS FLOAT MULTFLOAT CLOSEPAR
I Abbreviated: R A O F P F M F C
I Parsing state:
I Unread input (left column)I Current stack (top element on right)I How state was reached
stmt → assign
| expr
assign → R A expr
expr → expr P term
| term
term → term M factor
| factor
factor → R
| F
| O expr C
Input Stack CommentR A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
. . .
136 ,
![Page 215: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/215.jpg)
Parsing statements (1)
I Example string: R10 = (4.5+3*7)I Tokenized: REGISTER ASSIGN
OPENPAR FLOAT PLUS FLOAT MULTFLOAT CLOSEPAR
I Abbreviated: R A O F P F M F C
I Parsing state:
I Unread input (left column)I Current stack (top element on right)I How state was reached
stmt → assign
| expr
assign → R A expr
expr → expr P term
| term
term → term M factor
| factor
factor → R
| F
| O expr C
Input Stack CommentR A O F P F M F C Start
A O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
. . .
136 ,
![Page 216: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/216.jpg)
Parsing statements (1)
I Example string: R10 = (4.5+3*7)I Tokenized: REGISTER ASSIGN
OPENPAR FLOAT PLUS FLOAT MULTFLOAT CLOSEPAR
I Abbreviated: R A O F P F M F C
I Parsing state:
I Unread input (left column)I Current stack (top element on right)I How state was reached
stmt → assign
| expr
assign → R A expr
expr → expr P term
| term
term → term M factor
| factor
factor → R
| F
| O expr C
Input Stack CommentR A O F P F M F C StartA O F P F M F C R Shift R to stack
O F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
. . .
136 ,
![Page 217: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/217.jpg)
Parsing statements (1)
I Example string: R10 = (4.5+3*7)I Tokenized: REGISTER ASSIGN
OPENPAR FLOAT PLUS FLOAT MULTFLOAT CLOSEPAR
I Abbreviated: R A O F P F M F C
I Parsing state:
I Unread input (left column)I Current stack (top element on right)I How state was reached
stmt → assign
| expr
assign → R A expr
expr → expr P term
| term
term → term M factor
| factor
factor → R
| F
| O expr C
Input Stack CommentR A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stack
F P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
. . .
136 ,
![Page 218: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/218.jpg)
Parsing statements (1)
I Example string: R10 = (4.5+3*7)I Tokenized: REGISTER ASSIGN
OPENPAR FLOAT PLUS FLOAT MULTFLOAT CLOSEPAR
I Abbreviated: R A O F P F M F C
I Parsing state:
I Unread input (left column)I Current stack (top element on right)I How state was reached
stmt → assign
| expr
assign → R A expr
expr → expr P term
| term
term → term M factor
| factor
factor → R
| F
| O expr C
Input Stack CommentR A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stack
P F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
. . .
136 ,
![Page 219: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/219.jpg)
Parsing statements (1)
I Example string: R10 = (4.5+3*7)I Tokenized: REGISTER ASSIGN
OPENPAR FLOAT PLUS FLOAT MULTFLOAT CLOSEPAR
I Abbreviated: R A O F P F M F C
I Parsing state:
I Unread input (left column)I Current stack (top element on right)I How state was reached
stmt → assign
| expr
assign → R A expr
expr → expr P term
| term
term → term M factor
| factor
factor → R
| F
| O expr C
Input Stack CommentR A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stack
P F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
. . .
136 ,
![Page 220: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/220.jpg)
Parsing statements (1)
I Example string: R10 = (4.5+3*7)I Tokenized: REGISTER ASSIGN
OPENPAR FLOAT PLUS FLOAT MULTFLOAT CLOSEPAR
I Abbreviated: R A O F P F M F C
I Parsing state:
I Unread input (left column)I Current stack (top element on right)I How state was reached
stmt → assign
| expr
assign → R A expr
expr → expr P term
| term
term → term M factor
| factor
factor → R
| F
| O expr C
Input Stack CommentR A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce F
P F M F C R A O term Reduce factor
. . .
136 ,
![Page 221: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/221.jpg)
Parsing statements (1)
I Example string: R10 = (4.5+3*7)I Tokenized: REGISTER ASSIGN
OPENPAR FLOAT PLUS FLOAT MULTFLOAT CLOSEPAR
I Abbreviated: R A O F P F M F C
I Parsing state:
I Unread input (left column)I Current stack (top element on right)I How state was reached
stmt → assign
| expr
assign → R A expr
expr → expr P term
| term
term → term M factor
| factor
factor → R
| F
| O expr C
Input Stack CommentR A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
. . .
136 ,
![Page 222: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/222.jpg)
Parsing statements (1)
I Example string: R10 = (4.5+3*7)I Tokenized: REGISTER ASSIGN
OPENPAR FLOAT PLUS FLOAT MULTFLOAT CLOSEPAR
I Abbreviated: R A O F P F M F C
I Parsing state:
I Unread input (left column)I Current stack (top element on right)I How state was reached
stmt → assign
| expr
assign → R A expr
expr → expr P term
| term
term → term M factor
| factor
factor → R
| F
| O expr C
Input Stack CommentR A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
. . .136 ,
![Page 223: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/223.jpg)
Parsing statements (2)
R A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
P F M F C R A O expr LA: Reduce term
F M F C R A O expr P Shift PM F C R A O expr P F Shift FM F C R A O expr P factor Reduce FM F C R A O expr P term Reduce factor
F C R A O expr P term M LA! Shift MC R A O expr P term M F Shift FC R A O expr P term M factor Reduce FC R A O expr P term Reduce tMfC R A O expr Reduce ePt
R A O expr C Shift CR A factor Reduce OeCR A term Reduce factor
R A expr Reduce term
stmt Reduce RAe
137 ,
![Page 224: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/224.jpg)
Parsing statements (2)
R A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
P F M F C R A O expr LA: Reduce term
F M F C R A O expr P Shift PM F C R A O expr P F Shift FM F C R A O expr P factor Reduce FM F C R A O expr P term Reduce factor
F C R A O expr P term M LA! Shift MC R A O expr P term M F Shift FC R A O expr P term M factor Reduce FC R A O expr P term Reduce tMfC R A O expr Reduce ePt
R A O expr C Shift CR A factor Reduce OeCR A term Reduce factor
R A expr Reduce term
stmt Reduce RAe
137 ,
![Page 225: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/225.jpg)
Parsing statements (2)
R A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
P F M F C R A O expr LA: Reduce term
F M F C R A O expr P Shift P
M F C R A O expr P F Shift FM F C R A O expr P factor Reduce FM F C R A O expr P term Reduce factor
F C R A O expr P term M LA! Shift MC R A O expr P term M F Shift FC R A O expr P term M factor Reduce FC R A O expr P term Reduce tMfC R A O expr Reduce ePt
R A O expr C Shift CR A factor Reduce OeCR A term Reduce factor
R A expr Reduce term
stmt Reduce RAe
137 ,
![Page 226: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/226.jpg)
Parsing statements (2)
R A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
P F M F C R A O expr LA: Reduce term
F M F C R A O expr P Shift PM F C R A O expr P F Shift F
M F C R A O expr P factor Reduce FM F C R A O expr P term Reduce factor
F C R A O expr P term M LA! Shift MC R A O expr P term M F Shift FC R A O expr P term M factor Reduce FC R A O expr P term Reduce tMfC R A O expr Reduce ePt
R A O expr C Shift CR A factor Reduce OeCR A term Reduce factor
R A expr Reduce term
stmt Reduce RAe
137 ,
![Page 227: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/227.jpg)
Parsing statements (2)
R A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
P F M F C R A O expr LA: Reduce term
F M F C R A O expr P Shift PM F C R A O expr P F Shift FM F C R A O expr P factor Reduce F
M F C R A O expr P term Reduce factor
F C R A O expr P term M LA! Shift MC R A O expr P term M F Shift FC R A O expr P term M factor Reduce FC R A O expr P term Reduce tMfC R A O expr Reduce ePt
R A O expr C Shift CR A factor Reduce OeCR A term Reduce factor
R A expr Reduce term
stmt Reduce RAe
137 ,
![Page 228: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/228.jpg)
Parsing statements (2)
R A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
P F M F C R A O expr LA: Reduce term
F M F C R A O expr P Shift PM F C R A O expr P F Shift FM F C R A O expr P factor Reduce FM F C R A O expr P term Reduce factor
F C R A O expr P term M LA! Shift MC R A O expr P term M F Shift FC R A O expr P term M factor Reduce FC R A O expr P term Reduce tMfC R A O expr Reduce ePt
R A O expr C Shift CR A factor Reduce OeCR A term Reduce factor
R A expr Reduce term
stmt Reduce RAe
137 ,
![Page 229: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/229.jpg)
Parsing statements (2)
R A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
P F M F C R A O expr LA: Reduce term
F M F C R A O expr P Shift PM F C R A O expr P F Shift FM F C R A O expr P factor Reduce FM F C R A O expr P term Reduce factor
F C R A O expr P term M LA! Shift M
C R A O expr P term M F Shift FC R A O expr P term M factor Reduce FC R A O expr P term Reduce tMfC R A O expr Reduce ePt
R A O expr C Shift CR A factor Reduce OeCR A term Reduce factor
R A expr Reduce term
stmt Reduce RAe
137 ,
![Page 230: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/230.jpg)
Parsing statements (2)
R A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
P F M F C R A O expr LA: Reduce term
F M F C R A O expr P Shift PM F C R A O expr P F Shift FM F C R A O expr P factor Reduce FM F C R A O expr P term Reduce factor
F C R A O expr P term M LA! Shift MC R A O expr P term M F Shift F
C R A O expr P term M factor Reduce FC R A O expr P term Reduce tMfC R A O expr Reduce ePt
R A O expr C Shift CR A factor Reduce OeCR A term Reduce factor
R A expr Reduce term
stmt Reduce RAe
137 ,
![Page 231: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/231.jpg)
Parsing statements (2)
R A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
P F M F C R A O expr LA: Reduce term
F M F C R A O expr P Shift PM F C R A O expr P F Shift FM F C R A O expr P factor Reduce FM F C R A O expr P term Reduce factor
F C R A O expr P term M LA! Shift MC R A O expr P term M F Shift FC R A O expr P term M factor Reduce F
C R A O expr P term Reduce tMfC R A O expr Reduce ePt
R A O expr C Shift CR A factor Reduce OeCR A term Reduce factor
R A expr Reduce term
stmt Reduce RAe
137 ,
![Page 232: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/232.jpg)
Parsing statements (2)
R A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
P F M F C R A O expr LA: Reduce term
F M F C R A O expr P Shift PM F C R A O expr P F Shift FM F C R A O expr P factor Reduce FM F C R A O expr P term Reduce factor
F C R A O expr P term M LA! Shift MC R A O expr P term M F Shift FC R A O expr P term M factor Reduce FC R A O expr P term Reduce tMf
C R A O expr Reduce ePtR A O expr C Shift CR A factor Reduce OeCR A term Reduce factor
R A expr Reduce term
stmt Reduce RAe
137 ,
![Page 233: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/233.jpg)
Parsing statements (2)
R A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
P F M F C R A O expr LA: Reduce term
F M F C R A O expr P Shift PM F C R A O expr P F Shift FM F C R A O expr P factor Reduce FM F C R A O expr P term Reduce factor
F C R A O expr P term M LA! Shift MC R A O expr P term M F Shift FC R A O expr P term M factor Reduce FC R A O expr P term Reduce tMfC R A O expr Reduce ePt
R A O expr C Shift CR A factor Reduce OeCR A term Reduce factor
R A expr Reduce term
stmt Reduce RAe
137 ,
![Page 234: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/234.jpg)
Parsing statements (2)
R A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
P F M F C R A O expr LA: Reduce term
F M F C R A O expr P Shift PM F C R A O expr P F Shift FM F C R A O expr P factor Reduce FM F C R A O expr P term Reduce factor
F C R A O expr P term M LA! Shift MC R A O expr P term M F Shift FC R A O expr P term M factor Reduce FC R A O expr P term Reduce tMfC R A O expr Reduce ePt
R A O expr C Shift C
R A factor Reduce OeCR A term Reduce factor
R A expr Reduce term
stmt Reduce RAe
137 ,
![Page 235: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/235.jpg)
Parsing statements (2)
R A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
P F M F C R A O expr LA: Reduce term
F M F C R A O expr P Shift PM F C R A O expr P F Shift FM F C R A O expr P factor Reduce FM F C R A O expr P term Reduce factor
F C R A O expr P term M LA! Shift MC R A O expr P term M F Shift FC R A O expr P term M factor Reduce FC R A O expr P term Reduce tMfC R A O expr Reduce ePt
R A O expr C Shift CR A factor Reduce OeC
R A term Reduce factor
R A expr Reduce term
stmt Reduce RAe
137 ,
![Page 236: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/236.jpg)
Parsing statements (2)
R A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
P F M F C R A O expr LA: Reduce term
F M F C R A O expr P Shift PM F C R A O expr P F Shift FM F C R A O expr P factor Reduce FM F C R A O expr P term Reduce factor
F C R A O expr P term M LA! Shift MC R A O expr P term M F Shift FC R A O expr P term M factor Reduce FC R A O expr P term Reduce tMfC R A O expr Reduce ePt
R A O expr C Shift CR A factor Reduce OeCR A term Reduce factor
R A expr Reduce term
stmt Reduce RAe
137 ,
![Page 237: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/237.jpg)
Parsing statements (2)
R A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
P F M F C R A O expr LA: Reduce term
F M F C R A O expr P Shift PM F C R A O expr P F Shift FM F C R A O expr P factor Reduce FM F C R A O expr P term Reduce factor
F C R A O expr P term M LA! Shift MC R A O expr P term M F Shift FC R A O expr P term M factor Reduce FC R A O expr P term Reduce tMfC R A O expr Reduce ePt
R A O expr C Shift CR A factor Reduce OeCR A term Reduce factor
R A expr Reduce term
stmt Reduce RAe
137 ,
![Page 238: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/238.jpg)
Parsing statements (2)
R A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
P F M F C R A O expr LA: Reduce term
F M F C R A O expr P Shift PM F C R A O expr P F Shift FM F C R A O expr P factor Reduce FM F C R A O expr P term Reduce factor
F C R A O expr P term M LA! Shift MC R A O expr P term M F Shift FC R A O expr P term M factor Reduce FC R A O expr P term Reduce tMfC R A O expr Reduce ePt
R A O expr C Shift CR A factor Reduce OeCR A term Reduce factor
R A expr Reduce term
stmt Reduce RAe
137 ,
![Page 239: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/239.jpg)
Parsing statements (2)
R A O F P F M F C StartA O F P F M F C R Shift R to stackO F P F M F C R A LA: Shift A to stackF P F M F C R A O Shift O to stackP F M F C R A O F Shift F to stackP F M F C R A O factor Reduce FP F M F C R A O term Reduce factor
P F M F C R A O expr LA: Reduce term
F M F C R A O expr P Shift PM F C R A O expr P F Shift FM F C R A O expr P factor Reduce FM F C R A O expr P term Reduce factor
F C R A O expr P term M LA! Shift MC R A O expr P term M F Shift FC R A O expr P term M factor Reduce FC R A O expr P term Reduce tMfC R A O expr Reduce ePt
R A O expr C Shift CR A factor Reduce OeCR A term Reduce factor
R A expr Reduce term
stmt Reduce RAe
137 ,
![Page 240: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/240.jpg)
Reminder: Actions in Bison
I Bison is based on syntax rules with associated actions
I Whenever a reduce is performed, the action associated with the ruleis executed
I Actions can be arbitrary C codeI Frequent: semantic actions
I The action sets a semantic value based on the semantic value of thesymbols reduced by the rule
I For terminal symbols: Semantic value is yylval from FlexI Semantic actions have “historically valuable” syntax
I Value of reduced symbol: $$I Value of first symbol in syntax rule body: $1I Value of second symbol in syntax rule body: $2I . . .I Access to named components in a union: $<val>1
138 ,
![Page 241: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/241.jpg)
From text to AST in practice: Parsing nanoLangexpressions
I Example for syntax analysis and building abstract syntax trees
I Language: nanoLang expressions (without function calls)
I Structure of the project
I Building
I Code walk-through
139 ,
![Page 242: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/242.jpg)
Exercise: Building exprcc
I Go tohttp://wwwlehre.dhbw-stuttgart.de/~sschulz/cb2018.html
I Download NANOEXPR.tgz
I Unpack, build and test the codeI To test:
I ./exprcc expr1.nano
I ./exprcc --sexpr expr1.nano
I ./exprcc --dot expr1.nano
140 ,
![Page 243: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/243.jpg)
exprcc Overview
AST definitions ast.h
AST implementation ast.c
Lexer specification nanolex.l
Parser specification nanoparse.y
Parser defs nanoparse.tab.h
Parser impl. nanoparse.tab.c
Lexer implementation nanolex.c
Lexer object file nanolex.o
AST object file ast.o
Parser object file nanoparse.tab.c
Executable: exprcc
#includeflex/bisongcclinker
141 ,
![Page 244: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/244.jpg)
exprcc Makefile
142 ,
![Page 245: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/245.jpg)
Simplified nanoLang expression syntax
expr: INTLIT
| IDENT
| STRINGLIT
| OPENPAR expr CLOSEPAR
| expr PLUS expr
| expr MINUS expr
| expr MULT expr
| expr DIV expr
| MINUS expr
;
143 ,
![Page 246: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/246.jpg)
Alternative notation
expr -> INTLIT
| IDENT
| STRINGLIT
| ( expr )
| expr + expr
| expr - expr
| expr * expr
| expr / expr
| - expr
Question: Is the grammar unambiguous?
I How do we solve this?
144 ,
![Page 247: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/247.jpg)
Alternative notation
expr -> INTLIT
| IDENT
| STRINGLIT
| ( expr )
| expr + expr
| expr - expr
| expr * expr
| expr / expr
| - expr
Question: Is the grammar unambiguous?
I How do we solve this?
144 ,
![Page 248: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/248.jpg)
Alternative notation
expr -> INTLIT
| IDENT
| STRINGLIT
| ( expr )
| expr + expr
| expr - expr
| expr * expr
| expr / expr
| - expr
Question: Is the grammar unambiguous?
I How do we solve this?
144 ,
![Page 249: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/249.jpg)
Precedences and Associativity in Bison
I Code: nanoparse.y token definitions
I The trick with unary -
145 ,
![Page 250: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/250.jpg)
Implementing ASTs
I Abstract Syntax Trees are trees!
I Dynamic data structuresI C: Nodes (structs) and pointers (to children)I Dynamic memory management with malloc()/free()
I (Pointers to) AST nodes are used in two contexts
I Lexer generates AST leaves corresponding to terminal symbolsI Parser builds complex ASTs from more basic ones
=⇒ AST datatype needed in Flex and Bison files!
I AST nodes:
I Type (token or non-terminal represented by node)I Unique id (counter)I Lexeme (for token AST cells)I Numerical value (for integer tokens)I Children (array of pointers to AST nodes)
I Code: ast.h, ast.c
146 ,
![Page 251: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/251.jpg)
Lexical Analysis
I Code: nanolex.l
147 ,
![Page 252: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/252.jpg)
Building ASTs
I Code: nanoparse.y syntax rules and semantic actions
148 ,
![Page 253: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/253.jpg)
Parsing in action (1)
Unproc. Stack New AST-a+b*(c+d) (Start of parse)
+b*(c+d) - at_IDENT
a
Shift, Shift, Reduce IDENT to expr
+b*(c+d) - expr
t_MINUS
t_IDENTa
Reduce -expr to expr
*(c+d) expr + bt_IDENT
b
Shift, Shift, Reduce IDENT to expr
149 ,
![Page 254: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/254.jpg)
Parsing in action (2)
Unproc. Stack New AST
+d) expr + expr * ( ct_IDENT
c
Shift, Shift, Shift, Reduce IDENT to expr
) expr + expr * ( expr + dt_IDENT
d
Shift, Shift, Reduce IDENT to expr
) expr + expr * ( expr + expr
t_PLUS
t_IDENTc
t_IDENTd
Reduce expr+expr to expr
150 ,
![Page 255: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/255.jpg)
Parsing in action (3)
Unproc. Stack New ASTShift, Reduce (expr) to expr
expr + expr * ( expr )
t_PLUS
t_IDENTc
t_IDENTd
Reduce expr*expr to expr
expr + expr * expr
t_MULT
t_IDENTb
t_PLUS
t_IDENTc
t_IDENTd
151 ,
![Page 256: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/256.jpg)
Parsing in action (4)
Unproc. Stack New AST
expr + expr
t_PLUS
t_MINUS t_MULT
t_IDENTa
t_IDENTb
t_PLUS
t_IDENTc
t_IDENTd
Reduce expr+expr to expr
152 ,
![Page 257: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/257.jpg)
Details: Error Handling and Locations
I Bison supports locations with %locations
I Global variable yylloc
typedef struct YYLTYPE
{
int first_line;
int first_column;
int last_line;
int last_column;
} YYLTYPE;
I Automagically tracked by parser, to be set by lexer for tokens!I Can be used in yyerror()
I Bison parsers call yyerror(const char* err) on error
I Argument is provided by parserI Location of error can be read out of yyllocI %define parse.error verbose usually improves error reporting
I Code: nanolex.l position tracking, nanoparse.y error handling
End Lecture 4
153 ,
![Page 258: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/258.jpg)
Details: Error Handling and Locations
I Bison supports locations with %locations
I Global variable yylloc
typedef struct YYLTYPE
{
int first_line;
int first_column;
int last_line;
int last_column;
} YYLTYPE;
I Automagically tracked by parser, to be set by lexer for tokens!I Can be used in yyerror()
I Bison parsers call yyerror(const char* err) on error
I Argument is provided by parserI Location of error can be read out of yyllocI %define parse.error verbose usually improves error reporting
I Code: nanolex.l position tracking, nanoparse.y error handling
End Lecture 4
153 ,
![Page 259: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/259.jpg)
High-Level Architecture of a Compiler
Variable Typea intb int
Source handler
Lexical analysis (tokeniser)
Syntactic analysis (parser)
Semantic analysis
Code generation (several optimisation passes)
Sequence of characters: i,n,t, ⏘, a,,, b, ;, a, =, b, +, 1, ;
Sequence of tokens: (id, “int”), (id, “a”), (id, “b”), (semicolon), (id, “a”), (eq), (id, “b”), (plus), (int, “1”), (semicolon)
e.g. Abstract syntax tree
e.g. AST+symbol table+attributes
e.g. assembler code
�������
����
����
����
����
����
�
����
���� �����
���� ����������
ld a,b ld c, 1 add c ...
����
����
����
�
����
�����
����������
154 ,
![Page 260: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/260.jpg)
High-Level Architecture of a Compiler
Variable Typea intb int
Source handler
Lexical analysis (tokeniser)
Syntactic analysis (parser)
Semantic analysis
Code generation (several optimisation passes)
Sequence of characters: i,n,t, ⏘, a,,, b, ;, a, =, b, +, 1, ;
Sequence of tokens: (id, “int”), (id, “a”), (id, “b”), (semicolon), (id, “a”), (eq), (id, “b”), (plus), (int, “1”), (semicolon)
e.g. Abstract syntax tree
e.g. AST+symbol table+attributes
e.g. assembler code
�������
����
����
����
����
����
�
����
���� �����
���� ����������
ld a,b ld c, 1 add c ...
����
����
����
�
����
�����
����������
154 ,
![Page 261: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/261.jpg)
High-Level Architecture of a Compiler
Variable Typea intb int
Source handler
Lexical analysis (tokeniser)
Syntactic analysis (parser)
Semantic analysis
Code generation (several optimisation passes)
Sequence of characters: i,n,t, ⏘, a,,, b, ;, a, =, b, +, 1, ;
Sequence of tokens: (id, “int”), (id, “a”), (id, “b”), (semicolon), (id, “a”), (eq), (id, “b”), (plus), (int, “1”), (semicolon)
e.g. Abstract syntax tree
e.g. AST+symbol table+attributes
e.g. assembler code
Flex
�������
����
����
����
����
����
�
����
���� �����
���� ����������
ld a,b ld c, 1 add c ...
����
����
����
�
����
�����
����������
154 ,
![Page 262: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/262.jpg)
High-Level Architecture of a Compiler
Variable Typea intb int
Source handler
Lexical analysis (tokeniser)
Syntactic analysis (parser)
Semantic analysis
Code generation (several optimisation passes)
Sequence of characters: i,n,t, ⏘, a,,, b, ;, a, =, b, +, 1, ;
Sequence of tokens: (id, “int”), (id, “a”), (id, “b”), (semicolon), (id, “a”), (eq), (id, “b”), (plus), (int, “1”), (semicolon)
e.g. Abstract syntax tree
e.g. AST+symbol table+attributes
e.g. assembler code
Flex
�������
����
����
����
����
����
�
����
���� �����
���� ����������
ld a,b ld c, 1 add c ...
����
����
����
�
����
�����
����������
Bison
154 ,
![Page 263: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/263.jpg)
High-Level Architecture of a Compiler
Variable Typea intb int
Source handler
Lexical analysis (tokeniser)
Syntactic analysis (parser)
Semantic analysis
Code generation (several optimisation passes)
Sequence of characters: i,n,t, ⏘, a,,, b, ;, a, =, b, +, 1, ;
Sequence of tokens: (id, “int”), (id, “a”), (id, “b”), (semicolon), (id, “a”), (eq), (id, “b”), (plus), (int, “1”), (semicolon)
e.g. Abstract syntax tree
e.g. AST+symbol table+attributes
e.g. assembler code
Flex
�������
����
����
����
����
����
�
����
���� �����
���� ����������
ld a,b ld c, 1 add c ...
����
����
����
�
����
�����
����������
Bison
C Code
154 ,
![Page 264: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/264.jpg)
Semantic Constraints
155 ,
![Page 265: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/265.jpg)
Group Exercise: Spot the Bugs (1)
I n t e g e r fun1 ( I n t e g e r i , I n t e g e r i ){
I n t e g e r i ;
i f ( i > 0){
p r i n t j ;}
}
I n t e g e r main ( ){
fun1 ( 1 , 2 ) ;fun2 ( 1 , 2 ) ;return 0 ;
}156 ,
![Page 266: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/266.jpg)
Group Exercise: Spot the Bugs (2)
I n t e g e r fun1 ( I n t e g e r i , I n t e g e r j ){
I n t e g e r i ;
i f ( i > ”0” ){
p r i n t j+”12” ;}return 1 ;
}
I n t e g e r main ( ){
fun1 ( 1 , ” H e l l o ” ) ;fun1 ( 1 , 2 , 3 ) ;return 0 ;
}157 ,
![Page 267: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/267.jpg)
Group Exercise: Spot the Bugs (3)
I n t e g e r fun1 ( I n t e g e r i , I n t e g e r j ){
whi le ( j> i ){
I n t e g e r j ;
p r i n t j ;j=j +1;
}return 1 ;
}
158 ,
![Page 268: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/268.jpg)
Semantic constraints of nanoLang (V 1.0)
I Every name has to be defined before it can be used
I Every name can only be defined once in a given scope
I Functions must be called with arguments of the right type in theright order
I Operands of comparison operators must be of the same type
I Operands of the arithmetic operators must be of type Integer
I Every program must have a main()
I (Every function must have a return of proper type)
159 ,
![Page 269: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/269.jpg)
Types in General
The type system is one of the defining elements of a programminglanguage!
I Atomic types: Directly supported by the language
I IntegersI Floating point numbersI CharactersI StringsI . . . ...
I Derived/composite types
I Structs/records - combine several other types into one new structureI Arrays - combine many elements of the same type into one structureI Pointers/ReferencesI Function types (maps input types to output type)
160 ,
![Page 270: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/270.jpg)
Types in nanoLang
I nanoLang has a very basic type system!I Two atomic types
I IntegerI String
I One way to construct new types
I Functions
Still an infinite number of types!
I →Integer
I Integer→Integer
I (Integer, Integer)→Integer
I . . .
161 ,
![Page 271: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/271.jpg)
Types in nanoLang
I nanoLang has a very basic type system!I Two atomic types
I IntegerI String
I One way to construct new types
I Functions
Still an infinite number of types!
I →Integer
I Integer→Integer
I (Integer, Integer)→Integer
I . . .
161 ,
![Page 272: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/272.jpg)
Types in nanoLang
I nanoLang has a very basic type system!I Two atomic types
I IntegerI String
I One way to construct new types
I Functions
Still an infinite number of types!
I →Integer
I Integer→Integer
I (Integer, Integer)→Integer
I . . .
161 ,
![Page 273: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/273.jpg)
Managing Symbols
I Properties of identifiers are stored in a symbol table
I NameI Type
I Properties of identifiers depend on part of the program underconsideration!
I Names are only visible in the scope they are declared inI Names can be redefined in new scopes
Symbol tables need to change when traversing the program/AST forchecking properties and generating code!
162 ,
![Page 274: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/274.jpg)
Managing Symbols
I Properties of identifiers are stored in a symbol table
I NameI Type
I Properties of identifiers depend on part of the program underconsideration!
I Names are only visible in the scope they are declared inI Names can be redefined in new scopes
Symbol tables need to change when traversing the program/AST forchecking properties and generating code!
162 ,
![Page 275: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/275.jpg)
Names and Variables
Definition (Variable)
A variable is a location in memory (or “in the store”) that can store avalue (of a given type).
I Variables can be statically or dynamically allocatedI Typically: global variables are statically allocated (and in the data
segment of the process)I Local variables are dynamically managed and on the stackI Large data structures and objects are stored in the heap
Definition (Name)
A name is an identifier that identifies a variable (in a given scope).
I The same name can refer to different variables (e.g. recursivefunction calls)
I Different names can refer to the same variables (depends onprogramming languages - aliasing)
163 ,
![Page 276: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/276.jpg)
Scopes and Environments
I The environment establishes a mapping from names to variablesI Static scope: Environment depends on block structure of the
language
I In any situation, the name refers to the variable defined in the nearestsurrounding block in the program text
I Examples: C (mostly), Pascal, Java, modern LISPs (mostly)
I Dynamic scope: Environment depends on calling sequence inprogram
I Name refers to the same variable it referred to in the calling functionI Traditional LISP systems (Emacs LISP)
164 ,
![Page 277: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/277.jpg)
Group exercise: Static and dynamic scopes in C
#inc l u d e <s t d i o . h>i n t a=10;i n t b=10;#de f i n e adder ( x ) ( x)+a
vo id machwas ( i n t a , i n t c ){
p r i n t f ( ” adder ( a)=%d\n” , adder ( a ) ) ;p r i n t f ( ” adder ( b)=%d\n” , adder ( b ) ) ;p r i n t f ( ” adder ( c)=%d\n” , adder ( c ) ) ;{
i n t c = 5 ;p r i n t f ( ” adder ( c)=%d\n” , adder ( c ) ) ;
}}
i n t main ( vo id ){
machwas (1 , 2 ) ;machwas (2 , 3 ) ;
r e t u r n 0 ;}
165 ,
![Page 278: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/278.jpg)
Example: Scopes in nanoLang
I n t e g e r i ;
I n t e g e r fun1 ( I n t e g e r l o o p ){
I n t e g e r i ;
i =0;whi le ( i<l o o p ){
i=i +1;p r i n t ” H a l l o ” ;
}re tu rn 0 ;
}
I n t e g e r main ( ){
i = 5 ;fun1 ( i ) ;
}166 ,
![Page 279: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/279.jpg)
Scopes in nanoLang
I Global scope
I Global variablesI Functions
I Function scope
I Function parameters
I Block scope
I block-local variables
167 ,
![Page 280: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/280.jpg)
Example: Scopes in nanoLang
I n t e g e r i ;
I n t e g e r fun1 ( I n t e g e r l o o p ){
I n t e g e r i ;
i =0;whi le ( i<l o o p ){
i=i +1;p r i n t ” H a l l o ” ;
}re tu rn 0 ;
}
I n t e g e r main ( ){
i = 5 ;fun1 ( i ) ;
}168 ,
![Page 281: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/281.jpg)
Walking the ASTprog
prog fundef
prog fundef
vardef
t_INTEGERt_IDENT
i
t_INTEGERt_IDENTfun1
params body
param
t_INTEGERt_IDENTloop
vardef stmts
t_INTEGERt_IDENT
iassign while_stmt
t_IDENTi
t_INTLIT0
t_LT body
t_IDENTi
t_IDENTloop
stmts
assign print_stmt
t_IDENTi
t_PLUS
t_IDENTi
t_INTLIT1
Hallo
t_INTEGERt_IDENTmain
params body
stmts
assign funcall
t_IDENTi
t_INTLIT5
t_IDENTfun1
t_IDENTi
169 ,
![Page 282: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/282.jpg)
Static type checking
I Types are associated with names
I Types are checked at compile time or development timeI Advantages:
I ?
I Disadvantages:
I ?
I Typically used in:
I ?
170 ,
![Page 283: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/283.jpg)
Dynamic type checking
I Types are associated with values
I Types are checked at run timeI Advantages:
I ?
I Disadvantages:
I ?
I Typically used in:
I ?
171 ,
![Page 284: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/284.jpg)
No type checking
I Programmer is supposed to know what (s)he does
I Types are not checked at allI Advantages:
I ?
I Disadvantages:
I ?
I Typically used in:
I ?
172 ,
![Page 285: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/285.jpg)
Exercise: How many types occur in this example?
I n t e g e r i ;
I n t e g e r fun1 ( I n t e g e r l o o p ){
I n t e g e r i ;
i =0;whi le ( i<l o o p ){
i=i +1;p r i n t ” H a l l o ” ;
}re tu rn 0 ;
}
I n t e g e r main ( ){
i = 5 ;fun1 ( i ) ;
}173 ,
![Page 286: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/286.jpg)
Symbol tables
I Store name (identifier) and typeI Nested for each scope:
I Global scopeI Each new scope entered will result in a new symbol table for that
scope, pointing to the preceeding (larger scope)
I Local operations:
I Add name/type (error if already defined)
I Global operations:
I Find name (finds “nearest” matching entry, or error)I Enter new scope (creates a new empty symbol table pointing to the
predecessor (if any)I Leave scope (remove current scope)
174 ,
![Page 287: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/287.jpg)
Walking the ASTprog
prog fundef
prog fundef
vardef
t_INTEGERt_IDENT
i
t_INTEGERt_IDENTfun1
params body
param
t_INTEGERt_IDENTloop
vardef stmts
t_INTEGERt_IDENT
iassign while_stmt
t_IDENTi
t_INTLIT0
t_LT body
t_IDENTi
t_IDENTloop
stmts
assign print_stmt
t_IDENTi
t_PLUS
t_IDENTi
t_INTLIT1
Hallo
t_INTEGERt_IDENTmain
params body
stmts
assign funcall
t_IDENTi
t_INTLIT5
t_IDENTfun1
t_IDENTi
175 ,
![Page 288: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/288.jpg)
Walking the ASTprog
prog fundef
prog fundef
vardef
t_INTEGERt_IDENT
i
t_INTEGERt_IDENTfun1
params body
param
t_INTEGERt_IDENTloop
vardef stmts
t_INTEGERt_IDENT
iassign while_stmt
t_IDENTi
t_INTLIT0
t_LT body
t_IDENTi
t_IDENTloop
stmts
assign print_stmt
t_IDENTi
t_PLUS
t_IDENTi
t_INTLIT1
Hallo
t_INTEGERt_IDENTmain
params body
stmts
assign funcall
t_IDENTi
t_INTLIT5
t_IDENTfun1
t_IDENTi
175 ,
![Page 289: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/289.jpg)
Representing types
I Types table:
I Numerical encoding for each typeI Recipe for each type
I nanoLang basic types are atomicI Atomic types can also be addressed by nameI Function types are vectors of existing types
I E.g.
Encoding Type Recipe
0 String atomic1 Integer atomic2 Integer fun(Integer, String) (1, 1, 0)
I Operations:I Find-or-insert type
I Return encoding for a new typeI If type does not exist yet, create it
End Lecture 5
176 ,
![Page 290: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/290.jpg)
Representing types
I Types table:
I Numerical encoding for each typeI Recipe for each type
I nanoLang basic types are atomicI Atomic types can also be addressed by nameI Function types are vectors of existing types
I E.g.
Encoding Type Recipe
0 String atomic1 Integer atomic2 Integer fun(Integer, String) (1, 1, 0)
I Operations:I Find-or-insert type
I Return encoding for a new typeI If type does not exist yet, create it
End Lecture 5
176 ,
![Page 291: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/291.jpg)
The Big Picture: Type Checking
I We need to know the type of every expression and variable in theprogram
I . . . to detect semantic inconsistenciesI . . . to generate code
I Some types are simple in nanoLang
I String constants are type String
I Integer constants are type Integer
I Results of arithmetic operations are Integer
I Harder: What to do with identifiers?
I Type of the return value of a function?I Types of the arguments of a function?I Types of the values of a variable?
The answers depend on the definitions in the program!
177 ,
![Page 292: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/292.jpg)
The Big Picture: Type Checking
I We need to know the type of every expression and variable in theprogram
I . . . to detect semantic inconsistenciesI . . . to generate code
I Some types are simple in nanoLang
I String constants are type String
I Integer constants are type Integer
I Results of arithmetic operations are Integer
I Harder: What to do with identifiers?
I Type of the return value of a function?I Types of the arguments of a function?I Types of the values of a variable?
The answers depend on the definitions in the program!
177 ,
![Page 293: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/293.jpg)
Symbol Tables
I Symbol tables associate identifiers and typesI Symbol tables form a hierarchy
I Symbols can be redefined in every new contextI The “innermost” definition is valid
I Symbol tables are filled top-down
I Outermost symbol-table contains global definitionsI Each new context adds a new layerI Search for a name is from innermost to outermost symbol table
178 ,
![Page 294: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/294.jpg)
Building Symbol Tables
Integer i;
Integer fun1(Integer loop) { Integer i;
i=0; while(i<loop) { i=i+1; print "Hallo"; } }
Integer main() { i = 5; fun1(i); }
Symbol tableProgram
179 ,
![Page 295: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/295.jpg)
Building Symbol Tables
Integer i;
Integer fun1(Integer loop) { Integer i;
i=0; while(i<loop) { i=i+1; print "Hallo"; } }
Integer main() { i = 5; fun1(i); }
Symbol tableProgram
179 ,
![Page 296: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/296.jpg)
Building Symbol Tables
Integer i;
Integer fun1(Integer loop) { Integer i;
i=0; while(i<loop) { i=i+1; print "Hallo"; } }
Integer main() { i = 5; fun1(i); }
i Integerfun1 (Integer)→Integermain ()→Integer
Symbol tableProgram
179 ,
![Page 297: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/297.jpg)
Building Symbol Tables
Integer i;
Integer fun1(Integer loop) { Integer i;
i=0; while(i<loop) { i=i+1; print "Hallo"; } }
Integer main() { i = 5; fun1(i); }
i Integerfun1 (Integer)→Integermain ()→Integer
Symbol tableProgram
179 ,
![Page 298: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/298.jpg)
Building Symbol Tables
Integer i;
Integer fun1(Integer loop) { Integer i;
i=0; while(i<loop) { i=i+1; print "Hallo"; } }
Integer main() { i = 5; fun1(i); }
i Integerfun1 (Integer)→Integermain ()→Integerloop Integer
Symbol tableProgram
179 ,
![Page 299: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/299.jpg)
Building Symbol Tables
Integer i;
Integer fun1(Integer loop) { Integer i;
i=0; while(i<loop) { i=i+1; print "Hallo"; } }
Integer main() { i = 5; fun1(i); }
i Integerfun1 (Integer)→Integermain ()→Integerloop Integer
Symbol tableProgram
179 ,
![Page 300: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/300.jpg)
Building Symbol Tables
Integer i;
Integer fun1(Integer loop) { Integer i;
i=0; while(i<loop) { i=i+1; print "Hallo"; } }
Integer main() { i = 5; fun1(i); }
i Integerfun1 (Integer)→Integermain ()→Integerloop Integeri Integer
Symbol tableProgram
179 ,
![Page 301: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/301.jpg)
Building Symbol Tables
Integer i;
Integer fun1(Integer loop) { Integer i;
i=0; while(i<loop) { i=i+1; print "Hallo"; } }
Integer main() { i = 5; fun1(i); }
i Integerfun1 (Integer)→Integermain ()→Integerloop Integeri Integer
Symbol tableProgram
179 ,
![Page 302: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/302.jpg)
Building Symbol Tables
Integer i;
Integer fun1(Integer loop) { Integer i;
i=0; while(i<loop) { i=i+1; print "Hallo"; } }
Integer main() { i = 5; fun1(i); }
i Integerfun1 (Integer)→Integermain ()→Integerloop Integeri Integer- -
Symbol tableProgram
179 ,
![Page 303: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/303.jpg)
Building Symbol Tables
Integer i;
Integer fun1(Integer loop) { Integer i;
i=0; while(i<loop) { i=i+1; print "Hallo"; } }
Integer main() { i = 5; fun1(i); }
i Integerfun1 (Integer)→Integermain ()→Integerloop Integeri Integer- -
i Integerfun1 (Integer)→Integermain ()→Integer
- -- -
Symbol tableProgram
179 ,
![Page 304: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/304.jpg)
Simplified Type Handling
I Handling complex types directly is cumbersomeI Better: Manage types separately
I Types are stored in a separate tableI Symbol table only needs to handle indices into type table
180 ,
![Page 305: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/305.jpg)
Symbol Tables and Type Tables
Integer i;
Integer fun1(Integer loop) { Integer i;
i=0; while(i<loop) { i=i+1; print "Hallo"; } }
Integer main() { i = 5; fun1(i); }
i Integerfun1 (Integer)→Integermain ()→Integerloop Integeri Integer- -
i Integerfun1 (Integer)→Integermain ()→Integer
- -- -
Symbol tableProgram
181 ,
![Page 306: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/306.jpg)
Symbol Tables and Type Tables
Integer i;
Integer fun1(Integer loop) { Integer i;
i=0; while(i<loop) { i=i+1; print "Hallo"; } }
Integer main() { i = 5; fun1(i); }
i 1fun1 2main 3loop 1i 1- -
i 1fun1 2main 3
- -- -
Symbol tableProgram
1 Integer2 (Integer)→Integer3 ()→Integer
Type table
181 ,
![Page 307: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/307.jpg)
Symbol Tables and the AST
prog
prog fundef
prog fundef
vardef
t_INTEGER t_IDENTi
t_INTEGER t_IDENTfun1 params body
param
t_INTEGER t_IDENTloop
vardef stmts
t_INTEGER t_IDENTi assign while_stmt
t_IDENTi
t_INTLIT0 t_LT body
t_IDENTi
t_IDENTloop stmts
assign print_stmt
t_IDENTi t_PLUS
t_IDENTi
t_INTLIT1
Hallo
t_INTEGER t_IDENTmain params body
stmts
assign funcall
t_IDENTi
t_INTLIT5
t_IDENTfun1
t_IDENTi
Integer i;
Integer fun1(Integer loop) { Integer i;
i=0; while(i<loop) { i=i+1; print "Hallo"; } }
Integer main() { i = 5; fun1(i); }
i Integerfun1 (Integer)→Integermain ()→Integerloop Integeri Integer- -
i Integerfun1 (Integer)→Integermain ()→Integer
- -- -
Symbol tableProgram
182 ,
![Page 308: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/308.jpg)
Exercise: Symbol tables and the AST
prog
prog fundef
fundef
t_INTEGERt_IDENTFibo
params body
param
t_INTEGERt_IDENT
n
if_stmt
t_LEQ body body
t_IDENTn
t_INTLIT1
ret_stmt
t_IDENTn
ret_stmt
t_PLUS
funcall funcall
t_IDENTFibo
t_MINUS
t_IDENTn
t_INTLIT1
t_IDENTFibo
t_MINUS
t_IDENTn
t_INTLIT2
t_INTEGERt_IDENTmain
params body
stmts
print_stmt print_stmt
funcall
t_IDENTFibo
t_INTLIT10
"\n"
1. Reconstruct thenanoLang codecorresponding to theAST
2. Identify all differentscopes in theprogram
3. Identify all differentscopes in the AST
4. Generate and fill thehierarchy of symboltables valid at theblue node
183 ,
![Page 309: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/309.jpg)
Type Inference in nanoLang
I Goal: Determine the (result) type of every expression in the programI Process: Process AST bottom-up
I Constants: “natural” typeI Variables: Look up in symbol tableI Function calls: Look up in symbol table
I If arguments are not of proper type, errorI Otherwise: return type of the function
I Arithmetic expressions:I If arguments are Integer, result type is IntegerI Otherwise: error
184 ,
![Page 310: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/310.jpg)
Contrast: Aspects of Type Inference in C
I Arithmetic expressions:
I Roughly: arithmetic types are ordered by size (char < int < long <long long < float < double)
I Type of a + b is the greater of the types of a and b
I Arrays
I If a is an array of int, than a[1] is of type int
I Pointers
I If a is of type char*, then *a is of type char
I Many more cases:
I StructuresI EnumerationsI Function pointers
185 ,
![Page 311: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/311.jpg)
Implementation Examples
I main() in nanoparse.y
I STBuildAllTables() in semantic.c
I symbols.h and symbols.c
I types.h and types.c
End Lecture 6
186 ,
![Page 312: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/312.jpg)
Implementation Examples
I main() in nanoparse.y
I STBuildAllTables() in semantic.c
I symbols.h and symbols.c
I types.h and types.c
End Lecture 6
186 ,
![Page 313: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/313.jpg)
Typechecking the AST (1)
I Reminder: We have several goalsI Assign a type to every AST node which is a subexpression
I Needed for type checkingI Needed for code generation
I Typecheck all expressionsI Catch and flag type errors
I (Check proper use of return values)I Catch and flag type and/or logic errors
Practical algorithm?
187 ,
![Page 314: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/314.jpg)
Typechecking the AST (1)
I Reminder: We have several goalsI Assign a type to every AST node which is a subexpression
I Needed for type checkingI Needed for code generation
I Typecheck all expressionsI Catch and flag type errors
I (Check proper use of return values)I Catch and flag type and/or logic errors
Practical algorithm?
187 ,
![Page 315: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/315.jpg)
Typechecking the AST (2)
I Observation: Type of a nanoLang AST node can be determinedwithout knowing the type of the subtrees below it
I Result type of a t PLUS/+ node is always Integer
I Result type of a function is known from its type declarationI . . .
I This is not in general true for other languages!
I Example: Type of +-expression in C depends on type of argumentsI Example: Operator overloading in C++I General problem: Polymorphism
I Solution: Perform type checking and type assignment at the sametime
188 ,
![Page 316: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/316.jpg)
Typechecking the AST (3)
I Type assignment and type checking for nanoLang
I Input: ast is root of an ASTI Assumption: AST is annotated with symbol tables
I Recursive algorithm1. Type check all children of ast and assign them their types
I Note: There may be zero children - this is where the recursion stops!
2. Perform case distinction on the current AST node astI Arithmetic operator: Check if both arguments are Integer, result
type is IntegerI Comparison operator: Check if both arguments have the same type,
result type is NoTypeI String literal: Result type is StringI Integer literal: Result type is IntegerI Assignment: Check if type of the identifier on the left is the same as
the type of the expression on the right. Result type is NoTypeI Function call: Check that argument types are correct (using symbol
table), return type according to symbol tableI . . .I Body, Prog, vardef. . . : Result type is NoType
189 ,
![Page 317: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/317.jpg)
Exercise: Typing and Typechecking (1)
I For the following two ASTs, use the approach described above to . . .
I . . . determine the result type for each AST nodeI . . . find and mark all type errors (if any)
I Bonus: Think of an approach to check correct use and typing ofreturn
190 ,
![Page 318: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/318.jpg)
Exercise: Typing and Typechecking (2)
prog
prog fundef
fundef
t_INTEGERt_IDENTfun1
params body
paramlist
param param
t_INTEGERt_IDENT
it_INTEGER
t_IDENTj
stmts
if_stmt ret_stmt
t_GT body
t_IDENTi
t_IDENTj
stmts
print_stmt print_stmt
t_IDENTi
\n
t_PLUS
t_IDENTi
t_IDENTj
t_INTEGERt_IDENTmain
params body
stmts
funcall ret_stmt
t_IDENTfun1
arglist
t_INTLIT1
t_INTLIT2
t_INTLIT0
191 ,
![Page 319: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/319.jpg)
Exercise: Typing and Typechecking (3)
prog
prog fundef
fundef
t_INTEGERt_IDENTfun1
params body
paramlist
param param
t_INTEGERt_IDENT
it_INTEGER
t_IDENTj
stmts
if_stmt ret_stmt
t_GT body
t_IDENTi
j print_stmt
t_PLUS
t_IDENTi
\n
t_PLUS
t_IDENTi
t_IDENTj
t_INTEGERt_IDENTmain
params body
stmts
stmts ret_stmt
funcall funcall
t_IDENTfun1
arglist
t_INTLIT1
Hello
t_IDENTfun1
arglist
t_INTLIT1
t_INTLIT2
t_INTLIT0
192 ,
![Page 320: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/320.jpg)
Excursion: assert()
I assert() is a facility to help debug programs
I Part of the C Standard since C89I To use, #include <assert.h>
I assert(expr) evaluates expr
I If expr is false, then an error message is written and the program isaborted
I Otherwise, nothing is done
I Hints:
I Particularly useful to check function parameter valuesI To disable at compile time, define the macro NDEBUG (e.g. with the
compiler option -DNDEBUG)I Useful idiom: assert(expr && "What’s wrong");
I More information: man assert
193 ,
![Page 321: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/321.jpg)
Semantics of Compiled and Target Language
I Before we can compile a language, we must understand its semanticsI Important questions:
I How are parameter passed into functions?I Related: How do assignments work?
I Before we can compile a language, we must understand the targetlanguage and environment
I How are parameters and local variables handled?I How does the program interact with the OS and the environment?
194 ,
![Page 322: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/322.jpg)
Parameter Passing
I Call by value
I Formal parameters become new local variablesI Actual parameters are evaluated and used to initialize those variablesI Changes to variables are irrelevant after function terminates
I Call by reference
I Only references to existing variables are passedI In effect, formal parameters are bound to existing variablesI Actual parameters that are not variables themselves are evaluated and
placed in anonymous new variablesI Changes to parameters in functions change the original variable
I Call by name
I Only historically interestingI Semantics mostly similar to call-by-value
195 ,
![Page 323: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/323.jpg)
Parameter Passing - Advantages and Disadvantages?
I Call by value?
I Call by reference?
I For your consideration:
i n t fun ( i n t a , i n t b ){
a++;b++;return a+b ;
}
i n t main ( void ){
i n t i =0;
fun ( i , i ) ;p r i n t f ( ” i=%d\n” , i ) ;
}
196 ,
![Page 324: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/324.jpg)
Parameter Passing - Advantages and Disadvantages?
I Call by value?
I Call by reference?I For your consideration:
i n t fun ( i n t a , i n t b ){
a++;b++;return a+b ;
}
i n t main ( void ){
i n t i =0;
fun ( i , i ) ;p r i n t f ( ” i=%d\n” , i ) ;
}
196 ,
![Page 325: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/325.jpg)
Parameter Passing in C/C++/Pascal/Scheme?
I C?
I C++?
I Pascal?
I LISP/Scheme?
I Others?
197 ,
![Page 326: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/326.jpg)
Assignments
I What happens if a = b; is encountered?
I If both are integer variables (or values)?I If both are string variables (or values)?I If both have an object type?I If both are arrays?
198 ,
![Page 327: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/327.jpg)
Calling Conventions
I How are parameters values passed at a low level?
I Registers?I Stack?I Other?
I Who is responsible for preserving registers?
I Caller?I Callee?
I In which order are parameters passed?
I How is the old context (stack frame and program counter) preservedand restored?
For our nanoLang compiler, we rely on C to handle these things!
199 ,
![Page 328: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/328.jpg)
Calling Conventions
I How are parameters values passed at a low level?
I Registers?I Stack?I Other?
I Who is responsible for preserving registers?
I Caller?I Callee?
I In which order are parameters passed?
I How is the old context (stack frame and program counter) preservedand restored?
For our nanoLang compiler, we rely on C to handle these things!
199 ,
![Page 329: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/329.jpg)
Runtime System and OS Integration
I Runtime system provides the glue between OS and program
I Translates OS semantics/conventions to compiled language and back
I Runtime system provides execution support for program semantics
I Higher-level functions/data typesI Memory managementI Library functions
200 ,
![Page 330: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/330.jpg)
Parameter Passing and Assignments in nanoLang
I Suggestion: All parameter passed “as if” by value
I Integer: Pass by valueI Immutable strings
I Can be passed by referenceI Need to be memory-managed (reference counting, a job for the
runtime system)I Alternative is not simpler!
201 ,
![Page 331: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/331.jpg)
nanoLang OS Integration
I Command line arguments
I Suggestion: main() takes arbitrary number of string argumentsI These are filled from the command lineI Spare arguments are represented by the empty string
I Exit and return value
I Library function Exit(val) terminates program and returns integervalue
I return from main() has the same effect
202 ,
![Page 332: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/332.jpg)
nanoLang Library Functions
I Suggested function to make things interesting:
I StrIsInt(str): Returns 1 if str encodes a valid integer, 0 otherwiseI StrToInt(): Converts a string to an integer. If str is not an integer
encoding, result is undefinedI IntToStr(int): Returns a string encoding of the given integerI StrLength(str): Returns the lengths of str
I More suggestions?
I String StrFront(str, int) - return first int characters as newstring
I String StrRest(str, int) - return all but first int charactersI String StrCat(str, str) - concatenate strings, return as new
stringI Integer StrToASCII(str) - only for strings of lenght 1, return
ASCII valueI String ASCIIToStr(int) - reverse of the above
203 ,
![Page 333: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/333.jpg)
nanoLang Strings
I Temptation: Use C char*
I Fails as soon as strings can be dynamically createdI Suggestion: Structure with reference counting
I String value - the actual string (malloc()ed char*)I Length (maybe)I Reference count - how many places have a reference to the string?
I Increase if string is assigned to a variable or passed to a functionI Decrease, if a variable is reassigned or goes out of scopeI Free string, if this reaches 0
End Lecture 7
204 ,
![Page 334: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/334.jpg)
nanoLang Strings
I Temptation: Use C char*
I Fails as soon as strings can be dynamically createdI Suggestion: Structure with reference counting
I String value - the actual string (malloc()ed char*)I Length (maybe)I Reference count - how many places have a reference to the string?
I Increase if string is assigned to a variable or passed to a functionI Decrease, if a variable is reassigned or goes out of scopeI Free string, if this reaches 0
End Lecture 7
204 ,
![Page 335: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/335.jpg)
Coding Hints
I The nanoLang compiler is a non-trivial piece of software
I Several modulesI Several different data types (AST, Types, Symbols)
I It helps to follow good coding practicesI The big stuff: Good code structure
I One function per functionI Not more than one screen page per function
I The small stuffI Clean formatting (including vertical space)I Use expressive names for functions and variablesI Reasonable comments (don’t over-comment, though!)I Use assert()I Compile with warnings enables (Makefile: CFLAGS = -Wall)
205 ,
![Page 336: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/336.jpg)
The Final Phase
Variable Typea intb int
Source handler
Lexical analysis (tokeniser)
Syntactic analysis (parser)
Semantic analysis
Code generation (several optimisation passes)
Sequence of characters: i,n,t, ⏘, a,,, b, ;, a, =, b, +, 1, ;
Sequence of tokens: (id, “int”), (id, “a”), (id, “b”), (semicolon), (id, “a”), (eq), (id, “b”), (plus), (int, “1”), (semicolon)
e.g. Abstract syntax tree
e.g. AST+symbol table+attributes
e.g. assembler code
�������
����
����
����
����
����
�
����
���� �����
���� ����������
ld a,b ld c, 1 add c ...
����
����
����
�
����
�����
����������
206 ,
![Page 337: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/337.jpg)
The Final Phase
Variable Typea intb int
Source handler
Lexical analysis (tokeniser)
Syntactic analysis (parser)
Semantic analysis
Code generation (several optimisation passes)
Sequence of characters: i,n,t, ⏘, a,,, b, ;, a, =, b, +, 1, ;
Sequence of tokens: (id, “int”), (id, “a”), (id, “b”), (semicolon), (id, “a”), (eq), (id, “b”), (plus), (int, “1”), (semicolon)
e.g. Abstract syntax tree
e.g. AST+symbol table+attributes
e.g. assembler code
�������
����
����
����
����
����
�
����
���� �����
���� ����������
ld a,b ld c, 1 add c ...
����
����
����
�
����
�����
����������
206 ,
![Page 338: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/338.jpg)
Code Generation nanoLang to C
I Suggestion: Code generation uses separate phases
I Initial boilerplateI Global variable definitionsI Function declarationsI Constant library codeI Translation of function definitionsI C main() function
207 ,
![Page 339: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/339.jpg)
Name Mangling
I To avoid name conflicts, nanoLang identifers should use a standardnaming scheme that guarantees that they don’t conflict withinternal C names
I Suggestion:
I Atomic type names are prepended with N
I Function and variable names are prepended with n
Compare C (from ISO/IEC 9899:1999/C99):
I All identifiers that begin with an underscore and either an uppercaseletter or another underscore are always reserved for any use.
I All identifiers that begin with an underscore are always reserved foruse as identifiers with file scope in both the ordinary and tag namespaces.
208 ,
![Page 340: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/340.jpg)
Name Mangling
I To avoid name conflicts, nanoLang identifers should use a standardnaming scheme that guarantees that they don’t conflict withinternal C names
I Suggestion:
I Atomic type names are prepended with N
I Function and variable names are prepended with n
Compare C (from ISO/IEC 9899:1999/C99):
I All identifiers that begin with an underscore and either an uppercaseletter or another underscore are always reserved for any use.
I All identifiers that begin with an underscore are always reserved foruse as identifiers with file scope in both the ordinary and tag namespaces.
208 ,
![Page 341: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/341.jpg)
Initial Boilerplate
I Emit constant code needed for each translated nanoLang program
I Comment headerI Standard system includesI Type definitionsI Possibly macro definitions
I Implementation via printing constant string
I Easiest wayI Alternative: Read from file
209 ,
![Page 342: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/342.jpg)
Global Variable Definitions
I Visibility difference between nanoLang and C
I Globally defined nanoLang identifiers are visible throughout theprogram
I C definitions are visible from the point of definition onlyI Hence we need to declare variables (and functions) upfront
I Implementation suggestion:
I Iterate over all symbols in the global symbol tableI For each variable symbol, emit a declaration
210 ,
![Page 343: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/343.jpg)
Function Declarations
I The same visibility difference between nanoLang and C affectsfunctions
I We need to declare all functions upfront!
I Implementation suggestion:
I Iterate over all symbols in the global symbol tableI For each function symbol, emit a declaration
Suggestion: For simplicity and consistency, we should insert thenanoLang standard library functions (Exit(), StrIsInt(), StrToInt,. . . ) into the symbol table (and do so before semantic analysis to stopthe user from inadvertently redefining them!)
211 ,
![Page 344: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/344.jpg)
Function Declarations
I The same visibility difference between nanoLang and C affectsfunctions
I We need to declare all functions upfront!
I Implementation suggestion:
I Iterate over all symbols in the global symbol tableI For each function symbol, emit a declaration
Suggestion: For simplicity and consistency, we should insert thenanoLang standard library functions (Exit(), StrIsInt(), StrToInt,. . . ) into the symbol table (and do so before semantic analysis to stopthe user from inadvertently redefining them!)
211 ,
![Page 345: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/345.jpg)
Constant Library Code
I The nanoLang runtime will need various pieces of code
I Data types and helper functions to handle e.g. StringsI Implementations of the build-in functions
I Implementation options
I Just insert plain C code here (Alternative 0, but this may be lengthy)I Alternative 1: Read this C code from a fileI Alternative 2: Just #include the full C codeI Alternative 3: #include only header with declarations, then require
linking with a run time library later
212 ,
![Page 346: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/346.jpg)
Translation of Function Definitions
I This is the heart of the compiler!I Go over the AST and emit a definition for each function
I nanoLang functions become C functionsI Local nanoLang variables become C variables of an appropriate typeI nanoLang blocks become C blocksI nanoLang instructions are translated into equivalent C statement
sequencesI Mostly straightforward
I print requires case distinctionI String comparisions require library calls
More complex: Proper string handling
213 ,
![Page 347: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/347.jpg)
Translation of Function Definitions
I This is the heart of the compiler!I Go over the AST and emit a definition for each function
I nanoLang functions become C functionsI Local nanoLang variables become C variables of an appropriate typeI nanoLang blocks become C blocksI nanoLang instructions are translated into equivalent C statement
sequencesI Mostly straightforward
I print requires case distinctionI String comparisions require library calls
More complex: Proper string handling
213 ,
![Page 348: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/348.jpg)
Exercise: Code Generation (1)
Generate C code for the following AST:fundef
t_INTEGERt_IDENTprtlt
params body
paramlist
param param
t_STRINGt_IDENTstr1
t_STRINGt_IDENTstr2
stmts
if_stmt ret_stmt
t_LT body body
t_IDENTstr1
t_IDENTstr2
print_stmt
t_IDENTstr1
print_stmt
t_IDENTstr2
t_INTLIT0
214 ,
![Page 349: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/349.jpg)
Exercise: Code Generation (2)
Generate C code for the coloured part of the following AST:fundef
t_INTEGERt_IDENTexpr
params body
paramlist
param param
t_INTEGERt_IDENT
xt_INTEGER
t_IDENTy
vardef stmts
t_INTEGERt_IDENT
zassign ret_stmt
t_IDENTz
t_PLUS
t_MULT t_MULT
t_IDENTx
t_IDENTx
t_IDENTy
t_IDENTy
t_IDENTz
215 ,
![Page 350: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/350.jpg)
C main() Function
I Generate an appropriate main() functionI Tasks:
I Read commandline and initialize parameters for nanoLang main()
I Call nanoLang mainI Exit program, returning value from nanoLang main() to OS
216 ,
![Page 351: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/351.jpg)
Ideas for Optimization
I Constant subexpression evaluationI Common subexpression elimination
I To do this well, we need to identify pure functions!
I Shift unneeded computations out of loop
I Eliminate computations of unused values
whi le ( i <10){
a = 3∗10∗ i ;b = 3∗10∗ fun ( a)+ fun ( a ) ;i=i +1;
}return a ;
217 ,
![Page 352: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/352.jpg)
Exercise: Optimization
I n t e g e r optFun ( I n t e g e r l i m i t ){
I n t e g e r sum1 ;I n t e g e r sum2 ;I n t e g e r i ;I n t e g e r j ;I n t e g e r a ;I n t e g e r b ;sum1 = 0 ;sum2 = 0 ;i =0;
whi le ( i<=l i m i t ){
j =0;whi le ( j<=l i m i t ){
I n t e g e r c ;a = i ∗ i ∗ j ;sum1 = sum1+a ;b=i ∗ i ;sum2 = sum2+b ;c = a+b ;j=j +1;
}i=i +1;
}re tu rn sum1/sum2 ;
}
End lecture 8
218 ,
![Page 353: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/353.jpg)
Exercise: Optimization
I n t e g e r optFun ( I n t e g e r l i m i t ){
I n t e g e r sum1 ;I n t e g e r sum2 ;I n t e g e r i ;I n t e g e r j ;I n t e g e r a ;I n t e g e r b ;sum1 = 0 ;sum2 = 0 ;i =0;
whi le ( i<=l i m i t ){
j =0;whi le ( j<=l i m i t ){
I n t e g e r c ;a = i ∗ i ∗ j ;sum1 = sum1+a ;b=i ∗ i ;sum2 = sum2+b ;c = a+b ;j=j +1;
}i=i +1;
}re tu rn sum1/sum2 ;
}
End lecture 8
218 ,
![Page 354: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/354.jpg)
Practical code generation for nanoLang
219 ,
![Page 355: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/355.jpg)
nanoLang C premable (1)
/∗∗ Au toma t i c a l l y g ene r a t ed by the nanoLang comp i l e r ncc .∗∗ The b o i l e r p l a t e and l i b r a r y code i s r e l e a s e d under the GNU Gene ra l Pub l i c∗ L icence , v e r s i o n 2 or , a t your cho i ce , any l a t e r v e r s i o n . Other code i s∗ governed by the l i c e n s e o f the o r i g i n a l s ou r c e code .∗/
#inc l u d e <s t d i o . h>#inc l u d e <s t d l i b . h>#inc l u d e <s t r i n g . h>
typede f long long N In t e g e r ;typede f char ∗N St r i ng ;
#de f i n e NANO MAKESTR( s ) s#de f i n e NANO STRASSIGN( l , r ) ( l ) = ( r )#de f i n e NANO STRVAL( s ) s
/∗ G loba l u s e r v a r i a b l e s ∗/
220 ,
![Page 356: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/356.jpg)
nanoLang C premable (2)
/∗ Funct i on d e c l a r a t i o n s ∗/
N In t e g e r n E x i t ( N I n t e g e r ) ;N I n t e g e r n S t r I s I n t ( N St r i ng ) ;N I n t e g e r n S t rTo I n t ( N St r i ng ) ;N I n t e g e r n St rLen ( N St r i ng ) ;N S t r i ng n I n tToS t r ( N I n t e g e r ) ;N S t r i ng n S t rF r on t ( N St r ing , N I n t e g e r ) ;N S t r i ng n S t rRe s t ( N St r ing , N I n t e g e r ) ;N S t r i ng n St rCa t ( N St r ing , N St r i ng ) ;N I n t e g e r n StrToASCI I ( N St r i ng ) ;N S t r i ng n ASCI IToStr ( N I n t e g e r ) ;N S t r i ng n t e s t f u n ( N In t ege r , N S t r i ng ) ;N I n t e g e r n main ( N St r ing , N St r i ng ) ;
/∗ nanoLang runt ime l i b r a r y code ∗/
/∗ S t r i n g f u n c t i o n s ∗/
N St r i ng n St rCa t ( N St r i ng arg1 , N St r i ng arg2 ){
s i z e t l e n = s t r l e n ( arg1 ) + s t r l e n ( arg2 ) + 1 ;char ∗ r e s = ma l l o c ( l e n ) ;s t r c p y ( r e s , a rg1 ) ;s t r c a t ( r e s , a rg2 ) ;r e t u r n r e s ;
}[ . . . ]
221 ,
![Page 357: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/357.jpg)
nanoLang and its translation (2)
S t r i n g t e s t f u n ( I n t e g e r count ,S t r i n g message )
{I n t e g e r i ;S t r i n g r e s ;
i =0;r e s=”” ;
wh i l e ( i<count ){
p r i n t ” S c h l e i f e n d u r c h l a u f ” ;p r i n t i ;p r i n t ”\n” ;r e s = St rCat ( r e s , message ) ;i=i +1;
}r e t u r n r e s ;
}
N St r i ng n t e s t f u n ( N I n t e g e r n count ,N St r i ng n message )
{N In t e g e r n i = 0 ;N St r i ng n r e s = 0 ;n i = ( 0 ) ;NANO STRASSIGN( n r e s , (NANO MAKESTR( ”” ) ) ) ;wh i l e ( ( n i ) < ( n count ) ) {
p r i n t f ( ”%s ” , NANO STRVAL( (NANO MAKESTR( ” S c h l e i f e n d u r c h l a u f ” ) ) ) ) ;
p r i n t f ( ”%l l d ” , ( n i ) ) ;p r i n t f ( ”%s ” , NANO STRVAL( (NANO MAKESTR( ”\n” ) ) ) ) ;NANO STRASSIGN( n r e s , ( n S t rCa t ( ( n r e s ) ,
( n message ) ) ) ) ;n i = ( ( n i ) + ( 1 ) ) ;
}r e t u r n ( n r e s ) ;
}
222 ,
![Page 358: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/358.jpg)
nanoLang and its translation (2)
I n t e g e r main ( S t r i n g arg1 ,S t r i n g arg2 )
{I n t e g e r l i m i t ;l i m i t = 10 ;
i f ( S t r I s I n t ( arg1 )=1){
l i m i t=St rTo In t ( arg1 ) ;}
p r i n t t e s t f u n ( l im i t , a rg2 ) ;p r i n t ”\n” ;
r e t u r n 0 ;}
N In t e g e r n main ( N St r i ng n arg1 ,N St r i ng n a rg2 )
{N In t e g e r n l i m i t = 0 ;n l i m i t = ( 1 0 ) ;i f ( ( n S t r I s I n t ( ( n a rg1 ) ) ) == (1 ) ) {
n l i m i t = ( n S t rTo I n t ( ( n a rg1 ) ) ) ;}p r i n t f ( ”%s ” , NANO STRVAL( ( n t e s t f u n ( ( n l i m i t ) ,
( n a rg2 ) ) ) ) ) ;p r i n t f ( ”%s ” , NANO STRVAL( (NANO MAKESTR( ”\n” ) ) ) ) ;r e t u r n ( 0 ) ;
}
223 ,
![Page 359: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/359.jpg)
nanoLang C main
/∗ C main f u n c t i o n ∗/i n t main ( i n t argc , char ∗ a r g v [ ] ){
N S t r i n g arg1 = NANO MAKESTR( ”” ) ;i f (1 < a r g c ) {
arg1 = NANO MAKESTR( a r g v [ 1 ] ) ;}N S t r i n g arg2 = NANO MAKESTR( ”” ) ;i f (2 < a r g c ) {
arg2 = NANO MAKESTR( a r g v [ 2 ] ) ;}n main ( arg1 , a rg2 ) ;
}
224 ,
![Page 360: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/360.jpg)
Top-Down Parsing
225 ,
![Page 361: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/361.jpg)
Basic Idea of Recursive Descent
I One parsing function per non-terminal
I Initial function corresponds to start symbolI Each function:
I Uses an oracle to pick the correct productionI Processes the right hand side letter by letter against the input as
follows:I If the next symbol of the RHS is a terminal, it consumes that
terminal from the input (if it’s not in the input: error)I If the next symbol is a non-terminal, it calls the corresponding
function
Oracle: Based on next letter to be read!
I Good case: Every production can be clearly identifiedI Bad case: Common initial parts of right hand sides =⇒ ?
226 ,
![Page 362: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/362.jpg)
Basic Idea of Recursive Descent
I One parsing function per non-terminal
I Initial function corresponds to start symbolI Each function:
I Uses an oracle to pick the correct productionI Processes the right hand side letter by letter against the input as
follows:I If the next symbol of the RHS is a terminal, it consumes that
terminal from the input (if it’s not in the input: error)I If the next symbol is a non-terminal, it calls the corresponding
function
Oracle: Based on next letter to be read!
I Good case: Every production can be clearly identified
I Bad case: Common initial parts of right hand sides =⇒ ?
226 ,
![Page 363: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/363.jpg)
Basic Idea of Recursive Descent
I One parsing function per non-terminal
I Initial function corresponds to start symbolI Each function:
I Uses an oracle to pick the correct productionI Processes the right hand side letter by letter against the input as
follows:I If the next symbol of the RHS is a terminal, it consumes that
terminal from the input (if it’s not in the input: error)I If the next symbol is a non-terminal, it calls the corresponding
function
Oracle: Based on next letter to be read!
I Good case: Every production can be clearly identifiedI Bad case: Common initial parts of right hand sides =⇒ ?
226 ,
![Page 364: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/364.jpg)
Grammars for Recursive Descent
I A recursive descent parser deterministically finds leftmost derivationwith a 1 token lookahead
I This requires an LL(1) grammar
I No left recursion (results in endless descent)I No shared prefixes for rules with the same left hand non-terminal
(makes it impossible to decide which rule to use)
I We can often convert a non-LL(1)-grammar to a LL(1) grammar
I Convert left-recursion to right recursionI Use left factoring to handle common prefixes
227 ,
![Page 365: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/365.jpg)
Example/Exercise
I Consider the following productions from G1:
I S → aBI B → SbI B → b
I What is the language produced?
I How can we parse aabb?
228 ,
![Page 366: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/366.jpg)
Example Parser
Assumptions:
I Input comes from an implicitstream of terminal symbols(tokens)
I Function accept(t) checks if thefirst symbol of the stream is theterminal symbol t. If yes, t isconsumed from the stream. If no,a syntax error is signalled
I Function test(t) returns true ifthe first symbol of the stream isthe terminal symbol t, falseotherwise. The strem isunchanged. Special case: test(ε)tests for end of input
Recursive descent parser for G1:
S()
{
accept("a"); B(); }
}
B()
{
if test("b") {
accept("b");
}
else {
S();
accept("b");
}
}
229 ,
![Page 367: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/367.jpg)
Example/Exercise
I Consider the following productions from G1:
I S → aBI B → SbI B → b
I What is the language produced?
I How can we parse aabb?I What happens if we use the following productions from G2?
I S → aSbI S → ab
I Productions in G2 have common prefixes
I Common prefixes make the oracle work hard(er)I How can we get G1 from G2?
Left factoring!
230 ,
![Page 368: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/368.jpg)
Example/Exercise
I Consider the following productions from G1:
I S → aBI B → SbI B → b
I What is the language produced?
I How can we parse aabb?I What happens if we use the following productions from G2?
I S → aSbI S → ab
I Productions in G2 have common prefixes
I Common prefixes make the oracle work hard(er)I How can we get G1 from G2?
Left factoring!
230 ,
![Page 369: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/369.jpg)
Example/Exercise
I Consider the following productions from G1:
I S → aBI B → SbI B → b
I What is the language produced?
I How can we parse aabb?I What happens if we use the following productions from G2?
I S → aSbI S → ab
I Productions in G2 have common prefixes
I Common prefixes make the oracle work hard(er)I How can we get G1 from G2?
Left factoring!
230 ,
![Page 370: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/370.jpg)
Example/Exercise
I Consider the following productions from G1:
I S → aBI B → SbI B → b
I What is the language produced?
I How can we parse aabb?I What happens if we use the following productions from G2?
I S → aSbI S → ab
I Productions in G2 have common prefixes
I Common prefixes make the oracle work hard(er)I How can we get G1 from G2?
Left factoring!
230 ,
![Page 371: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/371.jpg)
Left Factoring
I Idea: Factor common prefixes out of right hand side of productionsI Consider:
I N → aR1
I N → abR2
I N → accR3
I Replace common prefix by new non-terminal:
I N → aXI X → R1
I X → bR2
I X → ccR3
I . . . and repeat as necessary
231 ,
![Page 372: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/372.jpg)
Left recursion
Definition (Left-recursive grammar)
A grammar G = 〈VN ,VT ,P, S〉 is left-recursive, if there exist
A ∈ VN ,w ∈ (VN ∪ VT )∗ with A+
=⇒ Aw .
I Left recursion leads to infinite loops in recursive descent parsers
I To parse A, we first need to parse A . . .
I Solution: Reformulate grammar
232 ,
![Page 373: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/373.jpg)
Left recursion
Definition (Left-recursive grammar)
A grammar G = 〈VN ,VT ,P, S〉 is left-recursive, if there exist
A ∈ VN ,w ∈ (VN ∪ VT )∗ with A+
=⇒ Aw .
I Left recursion leads to infinite loops in recursive descent parsers
I To parse A, we first need to parse A . . .
I Solution: Reformulate grammar
232 ,
![Page 374: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/374.jpg)
Our Running Example
I We will again consider the set of well-formed expressions overx ,+, ∗.(, ) as an example, i.e. L(G ) for G as follows
I VN = {E}I VT = {(, ),+, ∗, x}I Start symbol is EI Productions:
1. E → x2. E → (E)3. E → E + E4. E → E ∗ E
233 ,
![Page 375: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/375.jpg)
Our Running Example (unambiguous)
I We will again consider the set of well-formed expressions overx ,+, ∗.(, ) as an example, i.e. L(G ) for G as follows
I VN = {E ,T ,F}I VT = {(, ),+, ∗, x}I Start symbol is EI Productions:
1. E → E + T2. E → T3. T → T ∗ F4. T → F5. F → (E)6. F → x
What happens if we want to parse x + x with this grammar usingrecursive descent?
234 ,
![Page 376: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/376.jpg)
Our Running Example (unambiguous)
I We will again consider the set of well-formed expressions overx ,+, ∗.(, ) as an example, i.e. L(G ) for G as follows
I VN = {E ,T ,F}I VT = {(, ),+, ∗, x}I Start symbol is EI Productions:
1. E → E + T2. E → T3. T → T ∗ F4. T → F5. F → (E)6. F → x
What happens if we want to parse x + x with this grammar usingrecursive descent?
234 ,
![Page 377: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/377.jpg)
Exercise: Recursive Descent for Expressions
I Consider the following productions:
1. E → E + T2. E → T3. T → T ∗ F4. T → F5. F → (E )6. F → x
I Can we find an equivalent grammar that can be top-down parsed?
I How?
Solution End Lecture 9
235 ,
![Page 378: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/378.jpg)
Exercise: Recursive Descent for Expressions
I Consider the following productions:
1. E → E + T2. E → T3. T → T ∗ F4. T → F5. F → (E )6. F → x
I Can we find an equivalent grammar that can be top-down parsed?
I How?
Solution
End Lecture 9
235 ,
![Page 379: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/379.jpg)
Exercise: Recursive Descent for Expressions
I Consider the following productions:
1. E → E + T2. E → T3. T → T ∗ F4. T → F5. F → (E )6. F → x
I Can we find an equivalent grammar that can be top-down parsed?
I How?
Solution End Lecture 9
235 ,
![Page 380: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/380.jpg)
End of Lectures
236 ,
![Page 381: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/381.jpg)
Eliminating Ambiguity
Ambiguous: G = 〈VN ,VT ,P,E 〉I VN = {E}I VT = {(, ),+, ∗, x}I P as follows:
1. E → x2. E → (E )3. E → E + E4. E → E ∗ E
Unambiguous: G ′ = 〈V ′N ,VT ,P′,E 〉
I V ′N = {E , S ,F}I VT = {(, ),+, ∗, x}I P ′ as follows
1. E → E + S2. E → S3. S → S ∗ F4. S → F5. F → (E )6. F → x
Back
237 ,
![Page 382: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/382.jpg)
Recursive descent (1)
I Original grammar G :
1. E → E + T2. E → T3. T → T ∗ F4. T → F5. F → (E )6. F → x
I Problem: G is left-recursive (rules 1, 3)I Right-recursive version G ′:
1. E → T + E2. E → T3. T → F ∗ T4. T → F5. F → (E )6. F → x
238 ,
![Page 383: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/383.jpg)
Recursive descent (2)
I Problems:
I G ′ does not reflect left-associativity (this cannot be fixed in thegrammar, it needs fixing when building the AST in the parser)
I G ′′ has commom prefixes for E and T
I Left-factoring into G ′′:
1. E → TR2. R → +E | ε3. T → FS4. S → ∗T | ε5. F → (E )6. F → x
I G ′′ has no shared prefixes and is not left-recursive!
I . . . so let’s write a parser!
239 ,
![Page 384: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/384.jpg)
Recursive descent (3)
E() // Rule 1
{
T();
R();
}
R() // Rules 2a,b
{
if test("+") {
accept("+");
E();
} // else parse empty word
}
T() // Rule 3
{
F();
S();
}
S() // Rules 4a,b
{
if test("*") {
accept("*");
S();
} // else parse empty word
}
F() // Rules 5, 6
{
if test("x") {
accept("x")
}
else {
{
accept("(");
E();
accept(")");
}
}
Back
240 ,
![Page 385: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/385.jpg)
Recursive descent (3)
E() // Rule 1
{
T();
R();
}
R() // Rules 2a,b
{
if test("+") {
accept("+");
E();
} // else parse empty word
}
T() // Rule 3
{
F();
S();
}
S() // Rules 4a,b
{
if test("*") {
accept("*");
S();
} // else parse empty word
}
F() // Rules 5, 6
{
if test("x") {
accept("x")
}
else {
{
accept("(");
E();
accept(")");
}
} Back
240 ,
![Page 386: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/386.jpg)
End of Solutions
241 ,
![Page 387: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/387.jpg)
Goals for Lecture 1
I Introduction
I Context
I Practical issues
I Programming language survey
I Execution of languages
I Low-level code vs. high-level code
I Structure of a CompilerI Refresher
I GrammarsI Flex/Bison
I Programming exercises (Warmup)
I Scientific calculator
Lecture 1
242 ,
![Page 388: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/388.jpg)
Goals for Lecture 1
I Introduction
I Context
I Practical issues
I Programming language survey
I Execution of languages
I Low-level code vs. high-level code
I Structure of a CompilerI Refresher
I GrammarsI Flex/Bison
I Programming exercises (Warmup)
I Scientific calculator
Lecture 1
242 ,
![Page 389: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/389.jpg)
Exercise 0: Scientific Calculator
I Exercise 1 (Refresher):
I Go tohttp://wwwlehre.dhbw-stuttgart.de/~sschulz/cb2018.html
I Download scicalcparse.y and scicalclex.l
I Build the calculatorI Run and test the calculator
I Exercise 2 (Warm-up):
I Add support for division and subtraction /, -I Add support for unary minus (the negation operator -)
I Exercise 3 (Bonus):
I Change the desk calculator so that it converts its input into a Cprogram that will perform the same actions that the calculatorperformed interactively!
243 ,
![Page 390: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/390.jpg)
Review: Goals for Lecture 1
I Practical issues
I Programming language survey
I Execution of languages
I Low-level code vs. high-level code
I Structure of a CompilerI Refresher
I GrammarsI Flex/Bison
I Programming exercises
I Scientific calculator revisited
244 ,
![Page 391: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/391.jpg)
Feedback round
I What was the best part of today’s lecture?I What part of today’s lecture has the most potential for
improvement?
I Optional: how would you improve it?
245 ,
![Page 392: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/392.jpg)
Goals for Lecture 2
I RefresherI Reminder: Grammars and Chomsky-Hierarchy
I GrammarsI Regular languages and expressionsI Context-free grammars and languages
I Syntactic structure of programming languages
I nanoLang
I Programming exercise: Tokenizing nanoLang
246 ,
![Page 393: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/393.jpg)
Refresher
I Some properties of programming languages and implementations
I Object oriented vs. ProceduralI Imperative vs. FunctionalI Statically typed vs. dynamically typed (vs.
”no types“)
I Compiled vs. interpreted
I High-level level languages
I Expressive/Complex functionalityI Features correspond to application conceptsI Good abstraction
I Low-level languages
I Simple operationsI Features dictated by hardware architectureI (Close to) what processors can executeI Limited abstraction
247 ,
![Page 394: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/394.jpg)
Refresher
I Structure of compiler
I TokenizerI ParserI Semantic analyisI OptimizerI Code generatorI . . .
I Some applications of compiler technology
I Implementation of programming languagesI Parsing of data formats/serialization
I E.g. Word documents - may include optimization!I HTML/XML for web pages/SOAI XSLT document transformersI LATEXI ATCCLI . . .
I Flex & Bison
Lecture 2
248 ,
![Page 395: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/395.jpg)
Refresher
I Structure of compiler
I TokenizerI ParserI Semantic analyisI OptimizerI Code generatorI . . .
I Some applications of compiler technology
I Implementation of programming languagesI Parsing of data formats/serialization
I E.g. Word documents - may include optimization!I HTML/XML for web pages/SOAI XSLT document transformersI LATEXI ATCCLI . . .
I Flex & Bison
Lecture 2248 ,
![Page 396: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/396.jpg)
Exercise 1: nanoLang Scanner
I Write a flex-based scanner fornanoLang
I At minimum, it should outputthe program token by token
I Bonus: Find a way to keeptrack of line numbers fortokens
I Superbonus: Also keep trackof columns
I Reminder: Compiling flexprograms:
flex -t myflex.l > myflex.c
gcc -o myflex myflex.c
Example output for Hello World
Integer = 277
main = 274
( = 258
) = 259
{ = 270
print = 282
"Hello World\n" = 275
; = 272
return = 281
0 = 276
; = 272
} = 271
249 ,
![Page 397: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/397.jpg)
Bonus Output
S t r i n g h e l l o ( I n t e g e r dummy){
return ” H e l l o World\n” ;}
I n t e g e r main ( ){
p r i n t h e l l o ( 2 ) ;return 0 ;
}
< 1: 0: STRING[20]="String">
< 1: 7: IDENT[16]="hello">
< 1: 12: OPENPAR[0]="(">
< 1: 13: INTEGER[19]="Integer">
< 1: 21: IDENT[16]="dummy">
< 1: 26: CLOSEPAR[1]=")">
< 2: 0: OPENCURLY[12]="{">
< 3: 3: RETURN[23]="return">
< 3: 10: STRINGLIT[17]=""Hello World\n"">
< 3: 25: SEMICOLON[14]=";">
< 4: 0: CLOSECURLY[13]="}">
< 7: 0: INTEGER[19]="Integer">
< 7: 8: IDENT[16]="main">
< 7: 12: OPENPAR[0]="(">
< 7: 13: CLOSEPAR[1]=")">
< 8: 0: OPENCURLY[12]="{">
< 9: 3: PRINT[24]="print">
< 9: 9: IDENT[16]="hello">
< 9: 14: OPENPAR[0]="(">
< 9: 15: INTLIT[18]="2">
< 9: 16: CLOSEPAR[1]=")">
< 9: 17: SEMICOLON[14]=";">
< 10: 3: RETURN[23]="return">
< 10: 10: INTLIT[18]="0">
< 10: 11: SEMICOLON[14]=";">
< 11: 0: CLOSECURLY[13]="}">
250 ,
![Page 398: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/398.jpg)
Review: Goals for Lecture 2
I RefresherI Reminder: Grammars and Chomsky-Hierarchy
I GrammarsI Regular languages and expressionsI Context-free grammars and languages
I Syntactic structure of programming languages
I nanoLang
I Programming exercise: Tokenizing nanoLang
251 ,
![Page 399: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/399.jpg)
Feedback round
I What was the best part of today’s lecture?I What part of today’s lecture has the most potential for
improvement?
I Optional: how would you improve it?
252 ,
![Page 400: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/400.jpg)
Goals for Lecture 3
I RefresherI Context-free grammars revisited
I Derivations and Parse TreesI Abstract Syntax Trees
I Build automation with make
I Flex/Bison interface
I Programming exercise: Parsing nanoLang
253 ,
![Page 401: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/401.jpg)
Refresher
I Reminder: Grammars and Chomsky-Hierarchy
I GrammarsI Regular languages and expressionsI Context-free grammars and languages
I Syntactic structure of programming languagesI nanoLang
I Small procedural languageI Syntax inspired by C (note: grammar has been updated!)I Context-free grammarI . . . but differences e.g. in scoping
I Programming exercise: Tokenizing nanoLang
Lecture 3
254 ,
![Page 402: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/402.jpg)
Refresher
I Reminder: Grammars and Chomsky-Hierarchy
I GrammarsI Regular languages and expressionsI Context-free grammars and languages
I Syntactic structure of programming languagesI nanoLang
I Small procedural languageI Syntax inspired by C (note: grammar has been updated!)I Context-free grammarI . . . but differences e.g. in scoping
I Programming exercise: Tokenizing nanoLang
Lecture 3
254 ,
![Page 403: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/403.jpg)
Exercise 2: nanoLang Parser
I Write a Bison parser for nanoLang
I Bonus 1: Find out how to improve error handling (positions, recovery- try googling “Bison error handling” and “Bison error recovery” )
I Bonus 2: Translate nanoLang into Abstract Syntax Trees (will berequired next week!)
I Due date: Our lecture on April 4th
255 ,
![Page 404: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/404.jpg)
Review: Goals for Lecture 3
I RefresherI Context-free grammars revisited
I Derivations and Parse TreesI Rightmost/leftmost derivationI AmbiguityI Eliminating ambiguity
I Abstract Syntax Trees
I Build automation with make
I Flex/Bison interface
I Programming exercise: Parsing nanoLang
256 ,
![Page 405: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/405.jpg)
Feedback round
I What was the best part of today’s lecture?I What part of today’s lecture has the most potential for
improvement?
I Optional: how would you improve it?
257 ,
![Page 406: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/406.jpg)
Goals for Lecture 4
I Refresher
I Generating abstract syntax trees
I Parsing and error-handling
I Walk-through: Parsing nanoLang expressions in practice
I Programming exercise: ASTs for nanoLang
258 ,
![Page 407: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/407.jpg)
Refresher
I Context-free grammars revisited
I Derivations and Parse TreesI Abstract Syntax Trees
I Build automation with make
I Flex/Bison interface
I yylex() returns numerical code for tokenI yylex() sets yylval to “semantic value”
I Programming exercise: Parsing nanoLang
Lecture 4
259 ,
![Page 408: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/408.jpg)
Refresher
I Context-free grammars revisited
I Derivations and Parse TreesI Abstract Syntax Trees
I Build automation with make
I Flex/Bison interface
I yylex() returns numerical code for tokenI yylex() sets yylval to “semantic value”
I Programming exercise: Parsing nanoLang
Lecture 4
259 ,
![Page 409: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/409.jpg)
Exercise 3: ASTs for nanoLang
I Extend the nanoLang parser to generate abstract syntax trees fornanoLang programs
I You can use your own parser or extend the expression parser from thislecture
I Due date: Our lecture on April 18th
260 ,
![Page 410: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/410.jpg)
Review: Goals for Today
I Refresher
I Generating abstract syntax trees
I Parsing and error-handling
I Walk-through: Parsing expressions in practice
I Programming exercise: ASTs for nanoLang
261 ,
![Page 411: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/411.jpg)
Feedback round
I What was the best part of today’s lecture?I What part of today’s lecture has the most potential for
improvement?
I Optional: how would you improve it?
262 ,
![Page 412: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/412.jpg)
Goals for Lecture 5
I RefresherI Semantic properties
I Names, variables, identifiersI Visibility and scopesI Simple types and type systems
I Symbol tables
I Memory organisation and storage locations
263 ,
![Page 413: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/413.jpg)
Refresher
I Parse treesI Generating abstract syntax trees
I Leaves are delivered by the scannerI Internal nodes are created from subtrees in the semantic actions of
grammar rules in Bison/YACC
I nanoLang expression parserI Walk-through: Parsing expressions in practice
I Precedence and associativity in BisonI AST datatype: Structure
I Type of the AST node (roughly terminal/nonterminal of thegrammar)
I Lexeme (if needed)I Pointers to subtrees
I Programming exercise: ASTs for nanoLang
Lecture 5
264 ,
![Page 414: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/414.jpg)
Refresher
I Parse treesI Generating abstract syntax trees
I Leaves are delivered by the scannerI Internal nodes are created from subtrees in the semantic actions of
grammar rules in Bison/YACC
I nanoLang expression parserI Walk-through: Parsing expressions in practice
I Precedence and associativity in BisonI AST datatype: Structure
I Type of the AST node (roughly terminal/nonterminal of thegrammar)
I Lexeme (if needed)I Pointers to subtrees
I Programming exercise: ASTs for nanoLang
Lecture 5
264 ,
![Page 415: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/415.jpg)
Exercise 4: nanoLang Types and Symbol Tables
I Develop data structures for representing nanoLang types
I Develop data structures for implementing nested symbol tables
I Due date: Our lecture on April 18th
265 ,
![Page 416: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/416.jpg)
Review: Goals for Today
I Semantic properties
I Names, variables, identifiersI Visibility and scopesI Simple types and type systems
I Symbol tables
I Memory organisation and storage locations
266 ,
![Page 417: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/417.jpg)
Feedback round
I What was the best part of today’s lecture?I What part of today’s lecture has the most potential for
improvement?
I Optional: how would you improve it?
267 ,
![Page 418: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/418.jpg)
Goals for Lecture 6
I Refresher
I The big picture
I Symbol Tables and Type Tables in practice
I Type inference and type checking
I Exercise: Build symbol tables
268 ,
![Page 419: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/419.jpg)
Refresher
I Semantic properties
I Names, variables, identifiersI Visibility and scopesI Simple types and type systems
I Symbol tablesI Memory organisation and storage locations
I Global variabes: data segmentI Local (“automatic”) variables: calling stackI Dynamic memory (managed): heap
Lecture 6
269 ,
![Page 420: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/420.jpg)
Refresher
I Semantic properties
I Names, variables, identifiersI Visibility and scopesI Simple types and type systems
I Symbol tablesI Memory organisation and storage locations
I Global variabes: data segmentI Local (“automatic”) variables: calling stackI Dynamic memory (managed): heap
Lecture 6
269 ,
![Page 421: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/421.jpg)
Refresher
I Semantic properties
I Names, variables, identifiersI Visibility and scopesI Simple types and type systems
I Symbol tablesI Memory organisation and storage locations
I Global variabes: data segmentI Local (“automatic”) variables: calling stackI Dynamic memory (managed): heap
Lecture 6
269 ,
![Page 422: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/422.jpg)
Exercise 5: Implementing Symbol Tables
Extend your compiler project by computing the relevant symbol tables forall nodes of your AST
I Develop a type table date type for managing different typesI Define a symbol table data type for managing symbols and their
types
I Use a hierarchical structureI Suggested operations:
I EnterScope()I LeaveScope()I InsertSymbol() (with type)I FindSymbol() (return entry including type)I . . .
I Traverse the AST in a top-down fashion, computing the validsymbol table at each node
I Annotate each AST node with the symbol table valid at that node
At the end, print all symbols and types of the global, top-level symboltable!
270 ,
![Page 423: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/423.jpg)
Example Output
> ncc NANOEXAMPLES/scopes.nano
Global symbols:
---------------
i : Integer
fun1 : (Integer) -> Integer
main : () -> Integer
Types:
------
0: NoType
1: String
2: Integer
3: (Integer) -> Integer
4: () -> Integer
271 ,
![Page 424: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/424.jpg)
Review: Goals for Lecture 6
I RefresherI The big picture
1. We need to type every expression and subexpression
I Symbol Tables and Type Tables in practice
1. Build tables top-down2. Annotate AST nodes with symbols tables
I Type inference and type checking
1. Bottom-up type inference2. Check constraints as needed3. In more complex languages (C)
I More complex type inferenceI Type promotion
I Exercise: Build symbol tables
272 ,
![Page 425: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/425.jpg)
Feedback round
I What was the best part of today’s lecture?I What part of today’s lecture has the most potential for
improvement?
I Optional: how would you improve it?
273 ,
![Page 426: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/426.jpg)
Goals for Lecture 7
I Refresher
I Type checking revisited
I Excursion: assert() in CI Code generation considerations
I Parameter passingI AssignmentsI Calling conventionsI Runtime supportI Libraries
I nanoLang runtime
I Parameter passingI nanoLang string semanticsI nanoLang library functions and OS interaction
I Exercise: Type checking
274 ,
![Page 427: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/427.jpg)
Refresher
I The big picture
1. We need to type every expression and subexpression
I Symbol Tables and Type Tables in practice
1. Build tables top-down2. Annotate AST nodes with symbols tables
I Type inference and type checking
1. Bottom-up type inference2. Check constraints as needed3. In more complex languages (C): type promotion
Lecture 7
275 ,
![Page 428: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/428.jpg)
Refresher
I The big picture
1. We need to type every expression and subexpression
I Symbol Tables and Type Tables in practice
1. Build tables top-down2. Annotate AST nodes with symbols tables
I Type inference and type checking
1. Bottom-up type inference2. Check constraints as needed3. In more complex languages (C): type promotion
Lecture 7
275 ,
![Page 429: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/429.jpg)
Exercise 6: Typechecking Nanolang
Extend your compiler project by computing the types of all expressions inyour system and check type constraints
I Check that variables are only assigned values of the right type
I Check that functions are only called with correctly typed parameters
I Check that operators have compatible types
I Check that comparisons only happen between expressions of thesame type
I Bonus: Check that functions (always) return the correct type
276 ,
![Page 430: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/430.jpg)
Exercise 6: Example Typechecking
> ncc ../NANOEXAMPLES/semantic1.nano
1:25: error: symbol ’i’ doubly defined (previous
definition at 1:14)
7:13: error: undefined identifier j
15:4: error: undefined identifier fun2
15:4: error: undefined identifier fun2
1:1: warning: cannot guarantee proper
return value for function fun1()
12:1: warning: cannot guarantee proper
return value for function main()
277 ,
![Page 431: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/431.jpg)
Review: Goals for Lecture 7
I Type checking revisited
I Excursion: assert() in CI Code generation considerations
I Parameter passingI AssignmentsI Calling conventionsI Runtime supportI Libraries
I nanoLang runtime
I Parameter passingI nanoLang string semanticsI nanoLang library functions and OS interaction
278 ,
![Page 432: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/432.jpg)
Feedback round
I What was the best part of today’s lecture?I What part of today’s lecture has the most potential for
improvement?
I Optional: how would you improve it?
279 ,
![Page 433: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/433.jpg)
Goals for Lecture 8
I Refresher
I Coding Hints
I Code generation nanoLang to C
I (Simple) Optimizations
I Exercise: Code generation (I)
280 ,
![Page 434: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/434.jpg)
Refresher
I Type checking revisited
I Excursion: assert() in CI Code generation considerations
I Parameter passingI AssignmentsI Calling conventionsI Runtime supportI Libraries
I nanoLang runtime
I Parameter passingI nanoLang string semanticsI nanoLang library functions and OS interaction
Lecture 8
281 ,
![Page 435: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/435.jpg)
Refresher
I Type checking revisited
I Excursion: assert() in CI Code generation considerations
I Parameter passingI AssignmentsI Calling conventionsI Runtime supportI Libraries
I nanoLang runtime
I Parameter passingI nanoLang string semanticsI nanoLang library functions and OS interaction
Lecture 8
281 ,
![Page 436: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/436.jpg)
Exercise 7: Basic Code Generation
Extend your compiler project to generate a basic C programm
I Compile nanoLang statements into equivalent C statements
I Compile nanoLang definitions into C declarations and definitions
I Generate a basic main()
I For now, you can treat String as an imutable char* - we’ll do thelibrary next week
282 ,
![Page 437: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/437.jpg)
Review: Goals for Lecture 8
I Coding HintsI Code generation nanoLang to C
I (Name mangling)I BoilerplateI GlobalsI Library codeI nanoLang functionsI C main()
I (Simple) Optimizations
283 ,
![Page 438: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/438.jpg)
Feedback round
I What was the best part of today’s lecture?I What part of today’s lecture has the most potential for
improvement?
I Optional: how would you improve it?
284 ,
![Page 439: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/439.jpg)
Goals for Lecture 9
I Refresher
I Practical aspects of nanoLang code generation
I An introduction to top-down recursive descent parsing
285 ,
![Page 440: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/440.jpg)
Refresher
I Coding Hints
I Code structure (small functions with one clear job)I Reasonable commentsI assert() and/or unit tests
I Code generation nanoLang to C
I PreambleI Mine symbol tables for declarationsI LibraryI Walk the AST to generate actual code
I (Simple) Optimizations
I Constant subexpressionsI Common subexpressionsI Lift code out of loopsI Detect and remove unused code and variables
I Exercise: Code generation (I)
Lecture 9
286 ,
![Page 441: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/441.jpg)
Refresher
I Coding Hints
I Code structure (small functions with one clear job)I Reasonable commentsI assert() and/or unit tests
I Code generation nanoLang to C
I PreambleI Mine symbol tables for declarationsI LibraryI Walk the AST to generate actual code
I (Simple) Optimizations
I Constant subexpressionsI Common subexpressionsI Lift code out of loopsI Detect and remove unused code and variables
I Exercise: Code generation (I)
Lecture 9
286 ,
![Page 442: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/442.jpg)
Exercise 8: Completing the Compiler
I Finish your compiler projectI Bonus: Implement proper string handling
I String data typeI Garbage collection
287 ,
![Page 443: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/443.jpg)
Review: Goals for Lecture 9
I Practical aspects of nanoLang code generation
I An introduction to top-down recursive descent parsing
288 ,
![Page 444: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/444.jpg)
Feedback round
I What was the best part of today’s lecture?I What part of today’s lecture has the most potential for
improvement?
I Optional: how would you improve it?
289 ,
![Page 445: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/445.jpg)
Goals for Lecture 10
I Training exam
I Solution discussion
290 ,
![Page 446: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/446.jpg)
Training exam
291 ,
![Page 447: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/447.jpg)
Review: Goals for Lecture 10
I Training exam
I Solution discussion
292 ,
![Page 448: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/448.jpg)
Feedback round
I What was the best part of the course?
I Suggestions for improvements?
293 ,
![Page 449: Code-Generierung Semantik Optimierungsschulz/TEACHING/CB2018/Compilerbau.pdf · Semantik Optimierung Code-Generierung. Table of Contents Preliminaries Introduction Flex and Bison](https://reader030.fdocuments.us/reader030/viewer/2022040416/5d3801a088c9932a128b4d31/html5/thumbnails/449.jpg)
The End
294 ,