in reply to Writing a Grammar?
It, in turn, uses Parse::RecDescent, but hides the complexities.
"Choose a job you like and you will never have to work a day of your life" - Confucius