"Sorry, young man, but it's Turtles all the way down!"
Mathematica 200 198 188 171 168 

Spaces added for clarity:

f[i_, b_, h_, j_, r_, n_] :=
 (a = h; p = j; s = k = {}; t = Flatten;
  (Switch[#,
      6, s = {a, p, s},
      8, {a, p, s} = s,
      _C, k = {k, Line@{p, p += {Cos@a, Sin@a}}}];
     If[# &lt; 9, a += I^# b ]) &amp; /@ t@Nest[# /. r &amp;, i, n];
  Graphics@t@k)


Where:


  i : Initial state;
  b : rotation angle
  h : initial angle
  j : initial position
  r : production rules
  n : iterations  


Production rules grammar:


  2 = Turn Left (-);
  4 = Turn Right (+);
  6 = Push and Turn Left  ("[");
  8 = Pop  and Turn Right ("]");
  C[i] = Draw (Any number of symbols)
  Any other symbol = Do Nothing, just use it in producing next state (Any number of symbols)    


The {2,4,6,8} sequence is there because I'm using I^n (I = imaginary unit) to make turns.

Examples:

f[{C[1], X}, Pi/2, 0, {0, 0}, {X -&gt; {X, 4, Y, C[1]}, Y -&gt; {C[1], X, 2, Y}}, 10]




f[{C@1}, Pi/2, 0, {0,0}, {C@1-&gt;{C@1, 2, C@1, 4, C@1, 4, C@1, 2, C@1}}, 6]




f[{C[1]}, Pi/4, Pi/2, {0, 0}, {C[2] -&gt; {C[2], C[2]}, C[1] -&gt; {C[2], 6, C[1], 8, C[1]}}, 10]




f[{C[1]}, Pi/3, 0, {0, 0}, {C@1 -&gt; {C@2, 4, C@1, 4, C@2}, C@2 -&gt; {C@1, 2, C@2, 2, C@1}}, 10]




f[{X},5/36 Pi, Pi/3, {0,0},{X-&gt;{C@1, 4, 6, 6, X, 8, 2, X, 8, 2, C@1, 6, 2, C@1, X, 8, 4, X},
                            C@1-&gt;{C@1, C@1}}, 6]