To my knowledge the pumping lemma is *by far* the simplest and most-used technique. If you find [it][1] hard, try the [regular version][2] first, it's not that bad. There are some other means for languages that are far from context free. For example undecidable languages are trivially not context free. That said, I am also interested in other techniques than the pumping lemma if there are any. EDIT: Here is an example for the pumping lemma: suppose the language $L=\{ a^k \mid k ∈ P\}$ is context free ($P$ is the set of prime numbers). The pumping lemma has a lot of $∃/∀$ quantifiers, so I will make this a bit like a game: 1. The pumping lemma gives you a $p$ 2. You give a word $s$ of the language of length at least $p$ 3. The pumping lemma rewrite it like this: $s=uvxyz$ with some conditions ($|vxy|≤p$ and $|vy|≥1$) 4. You give an integer $n≥0$ 5. If $uv^nxy^nz$ is not in $L$, you win, $L$ is not context free. For this particular language for $s$ any $a^k$ (with $k≥p$ and $k$ is a prime number) will do the trick. Then the pumping lemma gives you $uvxyz$ with $|vy|≥1$. Do disprove the context-freeness, you need to find $n$ such that $|uv^nxy^nz|$ is not a prime number. $$|uv^nxy^nz|=|s|+(n-1)|vy|=k+(n-1)|vy|$$ And then $n=k+1$ will do. [1]: http://en.wikipedia.org/wiki/Pumping_lemma_for_context-free_languages [2]: http://en.wikipedia.org/wiki/Pumping_lemma_for_regular_languages