April 14, 2002: I haven't worked on Yapps for a while, mainly because I spent all my energy on trying to graduate. Now that I've finished school, I have several projects I want to start working on again, including Yapps. Notes for myself: Add a debugging mode that helps you understand how the grammar is constructed and how things are being parsed Look into an English output mode that would use natural language to describe a grammar Optimize unused variables Add a convenience to automatically gather up the values returned from subpatterns, put them into a list, and return them Improve the documentation Write some larger examples Get rid of old-style regex support Use SRE's lex support to speed up lexing (this may be hard given that yapps allows for context-sensitive lexers) Look over Dan Connoly's experience with Yapps (bugs, frustrations, etc.) and see what improvements could be made Add something to pretty-print the grammar (without the actions) Maybe conditionals? Follow this rule only if holds. But this would be useful mainly when multiple rules match, and we want the first matching rule. The conditional would mean we skip to the next rule. Maybe this is part of the attribute grammar system, where rule X<0> can be specified separately from X. Convenience functions that could build return values for all rules without specifying the code for each rule individually Patterns (abstractions over rules) -- for example, comma separated values have a certain rule pattern that gets replicated all over the place "Gather" mode that simply outputs the return values for certain nodes. For example, if you just want all expressions, you could ask yapps to gather the results of the 'expr' rule into a list. This would ignore all the higher level structure. Look at everyone's Yapps grammars, and come up with larger examples http://www.w3.org/2000/10/swap/SemEnglish.g http://www.w3.org/2000/10/swap/kifExpr.g http://www.w3.org/2000/10/swap/rdfn3.g It would be nice if you could feed text into Yapps (push model) instead of Yapps reading text out of a string (pull model). However, I think that would make the resulting parser code mostly unreadable (like yacc, etc.). Coroutines/stacklesspython may be the answer.