Applying DFS algorithm to a transition system to find reachable states
You can design an algorithm to traverse the product of two TSs.
With a simple DFS algorithm, start from start state and with rules for handshaking generate next states.
You need to keep the states that has been visited so far to avoid loop.
There may be more efficient ways but here is a sudo-code of a solution:

stack = new Stack()  
visited_states = new Array()  
stack.push(start_state)  
while ~stack.isEmpty() {  
    current_state = stack.pop()  
    if current_state not in visited_states {  
        visited_states.add(current_state)  
        next_states = generate_next_states(current_state)  
        for each state in next_states {  
            stack.push(state)  
        }  
    }  
}  


Where generate_next_states is a function that generates next states according to the rule in page 48, Figure 2.11.
Now the set of states in visited_states are reachable states.