Also, I gave up trying to enhance the pattern-matching capabilities of my SCA* and proceed using the original implementation, so that I can do more debugging and add flags to the script files to control things like segmentation, decomposition/composition mode, and the loading of other files. I might also move forward with supporting feature models soon, which shouldn't be too difficult given that the overall framework was designed to accommodate the use of features.
You can't use ! on sets or subexpressions when using NFAs without blowing up the graph size, and I didn't want to bother with that. I tried just using an expression tree, where this would be possible, but I spent a lot of time futzing around with the implementation, and realized this weekends that something is badly wrong with the way that repeatable expressions withe * or + are matched inside sets {}. I have an idea, but I want to leave that until later.