I was one of the people that tried to tangle with this sort of thing - I made a color descriptor importer/exporter just before one of the major versions came out. It was horribly messy and made in VB, so it's not around hehe.
What would be exceptionally helpful for the longevity of this project (though perhaps not for your sanity) is if you considered tags and their parameters on the level of a system of components. What I mean is that there's going to be a limited group of behaviors for values, that tags with parameters will accept some of the groups but not others, and that to add a tag, instead of worrying about every possible input value again, you go back and look at what behaviors for inputs you do have (color, strings, other tags), and use those first. Then if they don't match up at all, you add a new behavior/component so that you can use it if it comes up again later.
It would also be easy to model tag groupings this way (things like [SELECT_CASTE:BLAH], where it looks until it finds another [SELECT_CASTE]) - for every caste you find in the raw, you have a container component which contains all of its own tags separate from the rest in that creature. To extend the entity model metaphor if you've looked at it before, creatures would be components, not entities, but the archetype Creature entity would exist that contains all creature components, with methods to do things like look for duplicate creatures.
There's probably other ways to do this, but in general I think anything like this is going to have to implement some kind of relatively simple to maintain parameter control for tags down the line, since things are added/removed/become more or less acceptable as valid raws as Toady develops.