01.03.2015 Views

Modern compiler design [PDF]

Modern compiler design [PDF]

Modern compiler design [PDF]

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Contents<br />

1 Introduction & Explanation 3<br />

1.1 What Is This Document? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3<br />

1.2 How To Use This Document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3<br />

1.3 So Where Are Chapters 3 and 4? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3<br />

1.4 Where Can I Find Necessary Files for Creating a Compiler in C? . . . . . . . . . . . . . . . . 3<br />

2 Lexical Analysis 4<br />

2.1 Lex – A Lexical Analyzer Generator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4<br />

2.1.1 Structure of a Lex file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5<br />

2.1.2 Named Regular Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6<br />

2.1.3 Tokens With Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7<br />

2.1.4 Dealing with White Space . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8<br />

2.1.5 Keeping Track of Token Positions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9<br />

2.1.6 States in Lex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9<br />

2.1.7 Using Lex with Other C Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11<br />

2.1.8 Advanced Lex Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11<br />

2.2 Creating a Lexical Analyzer for simpleJava in Lex . . . . . . . . . . . . . . . . . . . . . . . . 14<br />

2.2.1 Project Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14<br />

2.2.2 Project Difficulty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18<br />

2.2.3 Project “Gotcha”s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18<br />

2.2.4 Provided Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19<br />

5 Bottom-Up Parsing & Yacc 21<br />

5.1 Yacc – Yet Another Compiler Compiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21<br />

5.1.1 Structure of a Yacc File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21<br />

5.1.2 Dealing With Parsing Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22<br />

5.1.3 Tokens With Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23<br />

5.1.4 When Yacc Has Conflicts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23<br />

5.1.5 Operator Precedence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26<br />

5.2 Writing a Parser For simpleJava Using Yacc . . . . . . . . . . . . . . . . . . . . . . . . . . . 29<br />

5.2.1 Project Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29<br />

5.2.2 Project Difficulty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29<br />

5.2.3 Project “Gotcha”s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30<br />

5.2.4 Provided Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30<br />

5.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32<br />

6 Abstract Syntax Trees in C 33<br />

6.1 Implementing Trees in C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33<br />

6.1.1 Representing trees – structs and unions . . . . . . . . . . . . . . . . . . . . . . . . . . 33<br />

6.1.2 Using Constructors in C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35<br />

6.1.3 Traversing Trees in C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36<br />

6.2 Yacc Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36<br />

6.2.1 Simple Yacc Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36<br />

1

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!