These are lecture notes on natural language parsing for students with supporting code for illustration and exercises.
The code is designed to be compact and easy to read rather than efficient. There are useless data structure copies and dummy string processing that should be fixed in efficient implementations.