There exists tons of "toy" language implementation available online. I wonder why no students came up with a forth or lisp like solution that would have been able to handle nested loops, ifs, etc...
When I was in my 2nd year as a CS student, one of the assignment was to reimplement the Unix's M4 preprocessor (a superset of C's preprocessor), based on its manual... It includes an expression evaluator, we were told that tools like lex and yacc would help...
Well... that was 25 years ago.