What are tips for creating PDAs for context free languages? I know there is typically no bit by bit answer for producing these PDAs, however there should be some broad tips to direct one to make them.
If you are keen on explaining by example, this is a fairly easy language:
$ L = \{x \in \{0, 1\}^*: \exists v, w \in \{0, 1\}^* \:\: where \: |v|=|w|>0 \: \land x = v1w\} $
I am not interested in the PDA specifically to the above language, rather, I am interested in the process of creating PDAs.
I'm going to write out - in a rather expanded form - my thought process for constructing a PDA for your language $L$, and then you can let me know if that's already helpful.
We have to see a $1$ in the middle of the word, but we won't know when we have reached the middle, so the PDA will have to be non-deterministic. Any time it reads a $1$, it will 'guess' whether or not it has reached the middle of the word. The easiest way to do this is to have a state $q$ which the PDA can move to, non-deterministically, on input $1$ (provided the stack is non-empty, to ensure $|v|>0$).
Meanwhile, we also have to record $|v|$. This can be done by placing a symbol (say $X$) on the stack for each letter read, as long as we remain in the intial state $q_0$. Thus after reading $v1$ and guessing that we have reached the middle of the word, the PDA will be in state $q$ with $X^n$ on the stack, where $n=|v|$. Finally, we need to check if $|w|=|v|$, which we can do by popping an $X$ off the stack for each letter read in state $q$.
A word should be accepted only if, after reading it, the automaton is in state $q$ and the stack is empty (we've seen exactly as many symbols after the 'guessed middle' as before it). So whenever the stack is empty in state $q$, the PDA has an $\epsilon$-transition to a (final) state $f$. The state $f$ is the only final state, and accepts no further input.