I'm following this playlist by CodePulse
Lexer: it goes through the input and divides it into a list of tokens. A token in an object characterized by a type and optionally a value.
Parser: creates a syntax tree of the program from the tokens created by the Lexer. This tree defines the hierarchy of the operations. More deails about the grammar are in grammar.txt.
Interpreter