Building a Robust Lox Parser: From Tokens to Syntax Trees