If you're creating stuff and then passing it to be processed then almost surely you can design your application to make use of message passing and object isolation.
First step will be identify responsibilities, that is, identifying who is gonna handle what. Every who is rounded by a box.
Second step will be defining the information flow between your boxes, that is, if A produces X... who consumes it?
After that two steps you'll have a simple graph with leafs representing workers and arrows representing messages. Every arrow represents a dependency order (that is, if an arrow goes from A to B then A needs to be executed before B).
With this you'll be able to easily see what actions can be made parallel and what actions are indeed sequential in a graphical easy to see, easy to show way.
Then just implement a Pipe structure to let you pass messages between workers so that every worker has a pipeline of work.
On a final note: Once the original design is done, it's relatively easy to refactor it in order to improve. For example, nodes which make the same work can share work PIPES, so that 8 syntax analyzer consume from the "lexic token" pipe, or change it so that workers can "steal" work from other workers pipes, etc.