When you parse a user's query, you want to create a Query object as a result. To achieve this, you set the initial assembly's target to be a QueryBuilder object. This builder collects information as you parse the user's query. You need assemblers to capture select terms, class names, and comparisons. To handle expressions, you need assemblers for arithmetic operations and variables. Finally, you need an assembler that exchanges a token on an assembly's stack with an atom that has the token's value as its functor. Altogether, the Jaql parser uses six assemblers, as Figure 15.15 shows.