-
Notifications
You must be signed in to change notification settings - Fork 270
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
15 changed files
with
1,005 additions
and
337 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,250 @@ | ||
# Compiler Design | ||
|
||
Compiler design involves the creation of programs that translate high-level code written by programmers into machine code that can be executed by a computer's hardware. This field is fundamental in computer science and involves several stages including lexical analysis, syntax analysis, semantic analysis, optimization, and code generation. The study and implementation of compilers help in understanding the intricacies of programming languages and the efficient execution of programs. | ||
|
||
## Table of Contents | ||
|
||
- [Roadmap](#Roadmap)<br> | ||
- [Courses](courses)<br> | ||
- [Free Cources](#free-courses)<br> | ||
- [Paid Courses](#paid-courses)<br> | ||
- [Books](#books)<br> | ||
- [YouTube](#youtube) | ||
- [Youtube Channels](#youtube-channels)<br> | ||
- [YouTube Playlist](#youtube-playlists)<br> | ||
- [Interview](#interview)<br> | ||
- [GitHub Repositories](#github-repositories)<br> | ||
- [Communities](#communities) | ||
- [Reddit Communities](#reddit-communities) | ||
- [Other Communities](#other-communities) | ||
- [Conclusion](#conclusion)<br> | ||
- [Projects](#projects)<br> | ||
|
||
## Roadmap | ||
|
||
To become proficient in compiler design, one needs a thorough understanding of various aspects of compilers. Here’s a roadmap to help guide your learning journey. | ||
|
||
<table width="100%" id="Roadmap"> | ||
<tr> | ||
<th>Resource Name</th> | ||
<th>Description</th> | ||
</tr> | ||
<tr> | ||
<td><a href="https://github.com/aalhour/awesome-compilers">Awesome Compilers</a></td> | ||
<td>A comprehensive list of resources for learning about compilers, including books, tutorials, and tools.</td> | ||
</tr> | ||
<tr> | ||
<td><a href="https://softwareengineering.stackexchange.com/questions/211835/path-to-learning-compiler-design">Roadmap of Compilers</a></td> | ||
<td>IBM’s guide on getting started with compiler design and the various stages involved.</td> | ||
</tr> | ||
</table> | ||
|
||
# Courses | ||
|
||
These courses will help you learn the fundamentals and advanced topics in compiler design. | ||
|
||
## Free Courses | ||
|
||
<table width="100%"> | ||
<tr> | ||
<th>Resource Name</th> | ||
<th>Description</th> | ||
</tr> | ||
<tr> | ||
<td><a href="https://www.coursera.org/learn/compilers">Stanford's Compilers Course</a></td> | ||
<td>This course introduces the major ideas behind the implementation of programming languages, including how to build a compiler from scratch.</td> | ||
</tr> | ||
<tr> | ||
<td><a href="https://www.mygreatlearning.com/academy/learn-for-free/courses/compiler-design">Compiler Design</a></td> | ||
<td>A comprehensive course from MIT covering the design and implementation of compilers and interpreters.</td> | ||
</tr> | ||
<tr> | ||
<td><a href="https://nptel.ac.in/courses/106/108/106108113/">NPTEL - Principles of Compiler Design</a></td> | ||
<td>An in-depth course on compiler design offered by the National Programme on Technology Enhanced Learning (NPTEL).</td> | ||
</tr> | ||
</table> | ||
|
||
## Paid Courses | ||
|
||
<table width="100%"> | ||
<tr> | ||
<th>Resource Name</th> | ||
<th>Description</th> | ||
</tr> | ||
<tr> | ||
<td><a href="https://www.udemy.com/topic/compiler-design/">Compiler Design Course on Udemy</a></td> | ||
<td>A detailed course on Udemy that covers the theory and practical aspects of compiler construction.</td> | ||
</tr> | ||
<tr> | ||
<td><a href="https://www.udemy.com/course/compiler-design-course/?couponCode=LETSLEARNNOWPP">Compiler Design Course on Udemy</a></td> | ||
<td>A detailed course on Udemy that covers the theory and practical aspects of compiler construction.</td> | ||
</tr> | ||
</table> | ||
|
||
## Books | ||
|
||
Essential books for mastering compiler design concepts. | ||
|
||
<table width="100%"> | ||
<tr> | ||
<th>Book Title</th> | ||
<th>Description</th> | ||
</tr> | ||
<tr> | ||
<td><a href="https://www.amazon.com/Compilers-Principles-Techniques-Tools-2nd/dp/0321486811">Compilers: Principles, Techniques, and Tools (Dragon Book)</a></td> | ||
<td>The definitive text on compiler design, covering the theoretical and practical aspects comprehensively.</td> | ||
</tr> | ||
<tr> | ||
<td><a href="https://www.amazon.com/Engineering-Compiler-Keith-Cooper/dp/012088478X">Engineering a Compiler</a></td> | ||
<td>This book provides a detailed look at modern techniques and algorithms used in compiler design.</td> | ||
</tr> | ||
<tr> | ||
<td><a href="https://www.amazon.com/Modern-Compiler-Implementation-Andrew-Appel/dp/0521607647">Modern Compiler Implementation in C/Java/ML</a></td> | ||
<td>A series that focuses on practical compiler implementation, available in three programming languages.</td> | ||
</tr> | ||
</table> | ||
|
||
# YouTube | ||
|
||
## YouTube Channels | ||
|
||
Channels that provide valuable tutorials and insights into compiler design. | ||
|
||
<table width="100%"> | ||
<tr> | ||
<th>Channel Name</th> | ||
<th>Description</th> | ||
</tr> | ||
<tr> | ||
<td><a href="https://www.youtube.com/@GateSmashers">GateSmashers</a></td> | ||
<td>Offers lectures and courses on compiler design from University.</td> | ||
</tr> | ||
<tr> | ||
<td><a href="https://www.youtube.com/user/NPTELHRD">NPTEL HRD</a></td> | ||
<td>National Programme on Technology Enhanced Learning provides comprehensive lectures on compiler design and other CS topics.</td> | ||
</tr> | ||
</table> | ||
|
||
## YouTube Playlists | ||
|
||
Curated playlists focused on compiler design. | ||
|
||
<table width="100%"> | ||
<tr> | ||
<th>Playlist Name</th> | ||
<th>Description</th> | ||
</tr> | ||
<tr> | ||
<td><a href="https://youtube.com/playlist?list=PLBlnK6fEyqRjT3oJxFXRgjPNzeS-LFY-q&si=J-c09WHzcWAZN1db">Compiler Design - Neso Academy</a></td> | ||
<td>This playlist covers the basics and advanced topics in compiler design, presented by Neso Academy.</td> | ||
</tr> | ||
<tr> | ||
<td><a href="https://youtube.com/playlist?list=PLEbnTDJUr_IcPtUXFy2b1sGRPsLFMghhS&si=zOs3DeF1iv5dQr_8">Compiler Design - Gate Lectures by Ravindrababu Ravula</a></td> | ||
<td>A series of lectures focused on compiler design, aimed at students preparing for competitive exams.</td> | ||
</tr> | ||
<tr> | ||
<td><a href="https://youtube.com/playlist?list=PLxCzCOWd7aiEKtKSIHYusizkESC42diyc&si=DaQ1v0pTAi2Rp0QM">Compiler Design - Gate Smasher</a></td> | ||
<td>A series of lectures focused on compiler design, aimed at students preparing for competitive exams.</td> | ||
</tr> | ||
</table> | ||
|
||
## Interview Preparation | ||
|
||
Resources to help you prepare for interviews related to compiler design roles. | ||
|
||
<table width="100%"> | ||
<tr> | ||
<th>Resource Name</th> | ||
<th>Description</th> | ||
</tr> | ||
<tr> | ||
<td><a href="https://www.geeksforgeeks.org/introduction-of-compiler-design/?ref=header_search">GeeksforGeeks - Compiler Design</a></td> | ||
<td>Comprehensive set of interview questions and answers on compiler design.</td> | ||
</tr> | ||
<tr> | ||
<td><a href="https://www.javatpoint.com/compiler-tutorial">JavaTpoint - Compiler Design Interview Questions</a></td> | ||
<td>A collection of frequently asked interview questions and detailed answers on compiler design.</td> | ||
</tr> | ||
</table> | ||
|
||
## GitHub Repositories | ||
|
||
Helpful repositories that provide source code, examples, and tutorials on compiler design. | ||
|
||
<table width="100%"> | ||
<tr> | ||
<th>Repository Name</th> | ||
<th>Description</th> | ||
</tr> | ||
<tr> | ||
<td><a href="https://github.com/RichardGong/PlayWithCompiler>">Cxx</a></td> | ||
<td>John McFarlane's repository that provides a simple, educational compiler implemented in C++.</td> | ||
</tr> | ||
<tr> | ||
<td><a href="https://github.com/baquer/GATE-and-CSE-Resources-for-Students">Write a C Interpreter</a></td> | ||
<td>A step-by-step guide to writing a simple C interpreter, useful for understanding the basics of compiler design.</td> | ||
</tr> | ||
</table> | ||
|
||
## Communities | ||
|
||
Join these communities to learn from others, share your knowledge, and stay updated with the latest trends in compiler design. | ||
|
||
### Reddit Communities | ||
|
||
<table width="100%"> | ||
<tr> | ||
<th>Subreddit</th> | ||
<th>Description</th> | ||
</tr> | ||
<tr> | ||
<td><a href="https://www.reddit.com/r/Compilers/">r/Compilers</a></td> | ||
<td>A subreddit dedicated to the discussion of compiler construction and related topics.</td> | ||
</tr> | ||
<tr> | ||
<td><a href="https://www.reddit.com/r/ProgrammingLanguages/">r/ProgrammingLanguages</a></td> | ||
<td>Discussion about programming languages, including their design, implementation, and compilers.</td> | ||
</tr> | ||
</table> | ||
|
||
### Other Communities | ||
|
||
<table width="100%"> | ||
<tr> | ||
<th>Community</th> | ||
<th>Description</th> | ||
</tr> | ||
<tr> | ||
<td><a href="https://stackoverflow.com/questions/1494308/compiler-design">Stack Overflow</a></td> | ||
<td>A large community where you can ask questions and share knowledge about compiler design.</td> | ||
</tr> | ||
<tr> | ||
<td><a href="https://discord.com/invite/programming">Discord Programming Community</a></td> | ||
<td>A Discord server with channels dedicated to various aspects of programming, including compiler design.</td> | ||
</tr> | ||
</table> | ||
|
||
## Conclusion | ||
|
||
Mastering compiler design requires a combination of theoretical knowledge and practical experience. Utilize the resources provided to build a strong foundation and stay engaged with the community to keep up with advancements in the field. | ||
|
||
## Projects | ||
|
||
Apply your knowledge by working on these projects to gain hands-on experience. | ||
|
||
<table width="100%"> | ||
<tr> | ||
<th>Project</th> | ||
<th>Description</th> | ||
</tr> | ||
<tr> | ||
<td><a href="https://github.com/Rashed112/Compiler-Design-Projects">A Basic Compiler </a></td> | ||
<td>Built a project to understand the working basics of compiling for academic purposes, where I customized a programming language that can be compiled using Flex and Bison.</td> | ||
</tr> | ||
<tr> | ||
<td><a href="https://github.com/SandyaSivakumar/Mini-Compiler">Mini Compiler</a></td> | ||
<td>A simple compiler for a custom language, implemented to illustrate compiler design concepts.</td> | ||
</tr> | ||
</table> | ||
|
||
By following this guide, you'll be well-equipped to dive into the world of compiler design, from learning the fundamentals to applying your skills in practical projects and participating in the community. |
Oops, something went wrong.