Parsing or syntactic analysis is one of the first stages in designing and implementing a compiler. A well-designed syntax of your programming language is a big motivation why users would prefer and choose exactly your language.
Note: this is a practical class on building a manual Recursive-descent parser. If you’re interested in parsing theory and automated algorithms you may also consider the [ Parsing Algorithms ] class.
Recursive descent parsers are the group of parsers which are widely used on practice in many production programming languages. In contrast with automated parsing algorithms, the manual implementation allows having full control over the parsing process, and handling complex constructs, which may not be possible in the automatic parsers.
Besides, implementing a full manual parser from scratch allows understanding and seeing this process from inside, demystifying internal structures, and turning building parsers into an interesting engineering task.
In the Building a Parser from scratch class we dive into pure practical implementation, building and learning different aspects of parsers.
Implementing a parser would also make your practical usage of other programming languages more professional.
Who this class is for?
This class is for any curious engineer, who would like to gain skills of building complex systems (and building a parser for a programing language is a pretty advanced engineering task!), and obtain a transferable knowledge for building such systems.
If you are interested specifically in compilers, interpreters, and source code transformation tools, then this class is also for you.
The pre-requisites for this class are the basic data structures and algorithms: trees, lists, traversal, and regular expressions.
What is used for implementation?
Note: we want our students to actually follow, understand and implement every detail of the parser themselves, instead of just copy-pasting from final solution. The full source code for the language is available in video lectures, showing and guiding how to structure specific modules.
What's specific in this class?
The main features of these lectures are:
Concise and straight to the point. Each lecture is self-sufficient, concise, and describes information directly related to the topic, not distracting on unrelated materials or talks.
Animated presentation combined with live-editing notes. This makes understanding of the topics easier, and shows how (and when at time) the object structures are connected. Static slides simply don’t work for a complex content.
Live coding session end-to-end with assignments. The full source code, starting from scratch, and up to the very end is presented in video lectures of the class
What is in the course?
The course is divided into four parts, in total of 18 lectures, and many sub-topics in each lecture. Below is the table of contents and curriculum.
Part 1: Basic expressions and Tokenizer
In this part we describe basic expressions, such as Numbers and Strings, and also build the Tokenizer modules, operating with regular expressions.
Part 2: Program structure
In this part we talk about program structures, such as statements and statement lists, blocks and recursive production rules. In addition we discuss different AST formats and start building more complex expressions.
Part 3: Control flow and Functions
In this part we implement variables, assignment, work with operator precedence, and introduce function abstraction. In addition we define control structures such as If-statement and iteration loops.
Part 4: Object-oriented programming
The final part of the course we implement classes and objects, talk about property and array access. In addition we implement generic function and method calls, and build the final parser executable.