 The classic examples of compile @-@ time words are the control structures such as IF and WHILE . Almost all of Forth 's control structures and almost all of its compiler are implemented as compile @-@ time words . Apart from some rarely used control flow words only found in a few implementations , such as a conditional return , all of Forth 's control flow words are executed during compilation to compile various combinations of primitive words along with their branch addresses . For instance , IF and WHILE , and the words that match with those , set up BRANCH ( unconditional branch ) and ? BRANCH ( pop a value off the stack , and branch if it is false ) . Counted loop control flow words work similarly but set up combinations of primitive words that work with a counter , and so on . During compilation , the data stack is used to support control structure balancing , nesting , and back @-@ patching of branch addresses . The snippet : 
