We may earn an affiliate commission when you visit our partners.
Course image
Santosh Pande and Catherine Gamboa

Udacity's Compilers course teaches the theory and practice behind building compilers for higher level programming languages. Learn online with Udacity.

What's inside

Syllabus

P1L1: Introduction to Compilers
P1L2:RegEx Det. Finite Automata
P1L3: RegEx NFA
P1L4: CFGs, and Ambiguity
Read more
P1L5: Recursive Descent Parsing
P1L6: Top Down Parsing: LL Parsing
P2L1: Semantic Analysis
P2L2: IR Code Generation
P2L3: Control Flow Graphs
P3L1: Liveness Analysis
P3L2: Register Allocation
P3L3: Code Optimizations
P3L4: Instruction Selection
P4L1: Procedure Abstraction
P4L2: Object Oriented Languages

Good to know

Know what's good
, what to watch for
, and possible dealbreakers
Introduces students to the fundamentals of compiler design and development
Covers a range of key concepts in compiler design, including regular expressions, context-free grammars, and parsing techniques
Provides hands-on experience in implementing compilers using the LLVM compiler infrastructure
Taught by experienced instructors with a strong track record in compiler research and development
Suitable for students with a background in computer science and programming
May require students to purchase additional software or hardware to complete the course

Save this course

Save Compilers: Theory and Practice to your list so you can find it easily later:
Save

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in Compilers: Theory and Practice with these activities:
Implement Regular Expressions Using Deterministic Finite Automata
Practice implementing regular expressions using deterministic finite automata (DFA) to strengthen your understanding of how regular languages are recognized by finite automata.
Browse courses on Regular Expressions
Show steps
  • Review the concept of regular expressions and deterministic finite automata.
  • Create a DFA for a given regular expression.
  • Simulate the DFA to determine if it accepts or rejects a given string.
Generate Intermediate Representation (IR) Code
Practice generating intermediate representation (IR) code from high-level programming language code. This will enhance your ability to translate source code into a form that can be efficiently processed by the compiler.
Browse courses on Code Generation
Show steps
  • Review the concept of intermediate representation (IR).
  • Design and implement a simple IR code generator.
  • Generate IR code for a given program.
Construct Context-Free Grammars (CFGs) and Check for Ambiguity
Practice constructing context-free grammars (CFGs) and checking for ambiguity. This will enhance your ability to describe and analyze the structure of programming languages.
Show steps
  • Review the definition of context-free grammars (CFGs).
  • Construct a CFG for a given language.
  • Identify and resolve ambiguities in a given CFG.
Five other activities
Expand to see all activities and additional details
Show all eight activities
Generate Optimized Assembly Code
Practice generating optimized assembly code from intermediate representation (IR) code. This will improve your understanding of how compilers translate high-level code into efficient machine instructions.
Browse courses on Assembly Code
Show steps
  • Review the principles of assembly code generation.
  • Design and implement a simple assembly code generator.
  • Generate assembly code for a given program and analyze its efficiency.
Design and Implement a Recursive Descent Parser
Challenge yourself by designing and implementing a recursive descent parser. This hands-on experience will deepen your understanding of the parsing process and its role in compiler construction.
Browse courses on Compiler Design
Show steps
  • Familiarize yourself with the principles of recursive descent parsing.
  • Design the data structures and algorithms for your parser.
  • Implement the parser and test it with various input strings.
Optimize Register Allocation Using Graph Coloring
Develop and implement an algorithm for register allocation using graph coloring. This optimization technique will enhance your understanding of how compilers improve the efficiency of code.
Show steps
  • Study the concept of register allocation and graph coloring.
  • Design and implement a graph coloring algorithm for register allocation.
  • Test your algorithm on various programs and evaluate its effectiveness.
Explore Advanced Compiler Optimization Techniques
Expand your knowledge by exploring advanced compiler optimization techniques, such as loop unrolling, constant propagation, and dataflow analysis. This will enhance your understanding of how compilers improve the performance of compiled code.
Browse courses on Compiler Optimization
Show steps
  • Identify and research advanced compiler optimization techniques.
  • Find tutorials or documentation on these techniques.
  • Follow the tutorials and apply the techniques to your own code.
Develop a Compiler for a Simple Language
Challenge yourself by developing a compiler for a simple language. This comprehensive project will provide you with a deep understanding of the entire compilation process, from parsing to code generation.
Browse courses on Compiler Design
Show steps
  • Choose a simple language to implement a compiler for.
  • Design and implement the various phases of the compiler, including lexical analysis, parsing, semantic analysis, code generation, and optimization.
  • Test your compiler on various programs and evaluate its correctness and efficiency.

Career center

Learners who complete Compilers: Theory and Practice will develop knowledge and skills that may be useful to these careers:
Compiler Developer
As a Compiler Developer, you will help build compilers that convert high-level programming languages into machine code. Udacity's Compilers course can help you understand the theory and practice behind building compilers. This course covers topics such as regular expressions, finite automata, context-free grammars, parsing, semantic analysis, and code optimization. This knowledge will be essential for you to succeed in this role.
Software Engineer
As a Software Engineer, you will design, develop, and maintain software applications. Udacity's Compilers course can help you understand the underlying principles of programming languages and how they are compiled into machine code. This knowledge will be helpful for you to write efficient and reliable software.
Computer Scientist
As a Computer Scientist, you will research and develop new computing technologies. Udacity's Compilers course can help you understand the theoretical foundations of computer science. This knowledge will be essential for you to make groundbreaking contributions to the field.
Data Scientist
As a Data Scientist, you will use data to solve business problems. Udacity's Compilers course can help you understand the principles of data analysis and how to use programming languages to manipulate and analyze data. This knowledge will be essential for you to succeed in this role.
Machine Learning Engineer
As a Machine Learning Engineer, you will develop and implement machine learning algorithms. Udacity's Compilers course can help you understand the underlying principles of machine learning and how to use programming languages to implement these algorithms. This knowledge will be essential for you to succeed in this role.
Web Developer
As a Web Developer, you will design and develop websites and web applications. Udacity's Compilers course can help you understand the principles of web development and how to use programming languages to create dynamic and interactive web pages. This knowledge will be essential for you to succeed in this role.
Database Administrator
As a Database Administrator, you will manage and maintain databases. Udacity's Compilers course can help you understand the principles of database management and how to use programming languages to manipulate and query data. This knowledge will be essential for you to succeed in this role.
Systems Analyst
As a Systems Analyst, you will analyze and design computer systems. Udacity's Compilers course can help you understand the principles of systems analysis and how to use programming languages to implement these systems. This knowledge will be essential for you to succeed in this role.
Technical Writer
As a Technical Writer, you will create documentation for software and other technical products. Udacity's Compilers course can help you understand the principles of technical writing and how to use programming languages to create clear and concise documentation. This knowledge will be essential for you to succeed in this role.
Quality Assurance Analyst
As a Quality Assurance Analyst, you will test and evaluate software products. Udacity's Compilers course can help you understand the principles of software testing and how to use programming languages to write test scripts. This knowledge will be essential for you to succeed in this role.
Information Security Analyst
As an Information Security Analyst, you will protect computer systems and networks from security threats. Udacity's Compilers course can help you understand the principles of information security and how to use programming languages to implement security measures. This knowledge will be essential for you to succeed in this role.
Network Administrator
As a Network Administrator, you will manage and maintain computer networks. Udacity's Compilers course can help you understand the principles of network administration and how to use programming languages to configure and troubleshoot networks. This knowledge will be essential for you to succeed in this role.

Reading list

We've selected ten books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in Compilers: Theory and Practice.
Comprehensive overview of the field of compiler design. It provides a detailed treatment of the theoretical and practical aspects of compiler construction.
Comprehensive overview of the field of compiler design. It provides a detailed treatment of the theoretical and practical aspects of compiler construction.
Comprehensive overview of the field of compiler design. It provides a detailed treatment of the theoretical and practical aspects of compiler construction.
Uses Java to illustrate many of the latest techniques in compiler implementation, including just-in-time compilation, garbage collection, and reflection. It provides a good balance between theory and practice, and it good resource for students who want to learn more about compiler construction.
Provides a comprehensive overview of the techniques used in modern compiler construction, including code generation, optimization, and runtime systems. It good resource for students who want to learn more about the practical aspects of compiler design.
Provides a practical overview of the techniques used in compiler construction. It good resource for students who want to learn more about the practical aspects of compiler design.
Classic text on compiler construction. It provides a clear and concise overview of the fundamental concepts of compiler design. It good resource for students who want to learn the basics of compiler construction.
Practical guide to using Lex and Yacc, two widely used tools for compiler construction. It provides a step-by-step guide to using these tools to build a compiler.

Share

Help others find this course page by sharing it with your friends and followers:
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2024 OpenCourser