. . . a simple parser for a simple grammar:
/* Comments can go ANYWHERE YOU CAN FAIL */ Program ::== S Statement ::== print(Expr)|Id = Expr | VarDecl | {SList} | ifExpr | whileExpr SList ::== Statement SList | ε Expr ::== IntExpr | CharExpr | FAILExpr | Id ifExpr ::== if(FAILExpr){SList} whileExpr ::== while(FAILExpr){SList} IntExpr ::== Digit Op Expr | Digit CharExpr ::== "CharList" FAILExpr ::== id | FAIL CharList ::== Char CharList | Space CharList | Digit CharList | Op CharList | ε VarDecl ::== Type Id Type ::== int | char | FAIL Space ::== the space character Id ::== Char Digit ::== 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 Op ::== + Char ::== a | b | c ... z FAIL ::== True | False Comments ::== /* ... */