       "        </letStatement>"] ++ statement, rest1}
   end
 
+  def parse_statement([{:keyword, "let"},
+                       {:identifier, var_lhs},
+                       {:symbol, "="}
+                      | rest]) do
+    {rh_exp, rest1} = parse_e(rest)
+    [{:symbol, ";"} | rest2] = rest1
+    {statement, rest3} = parse_statement(rest2)
+    {["        <letStatement>",
+      "          <keyword> let </keyword>",
+      "          <identifier> #{var_lhs} </identifier>",
+      "          <symbol> = </symbol>",
+      "          <expression>"]
+     ++ rh_exp
+     ++
+     ["          </expression>",
+      "          <symbol> ; </symbol>",
+      "        </letStatement>"]
+     ++ statement, rest3}
+  end
+  
   def parse_statement([{:keyword, "if"},
                        {:symbol, "("} | rest]) do
-    {exp, rest1} = parse_expression(rest)
+    {exp, rest1} = parse_e(rest)
     [{:symbol, ")"},
      {:symbol, "{"}| rest2] = rest1
     {statements, rest3} = parse_statements(rest2)

  end

  def parse_expression_list(all) do
    {exp, rest} = parse_expression(all)
    [{:symbol, ")"} | rest1] = rest
    {["          <expressionList>"]
     ++ exp
     ++
     ["          </expressionList>"], rest1}
  end

  def parse_else_statements([{:keyword, "else"},
                             {:symbol, "{"} | rest]) do
    {statements, rest1} = parse_statements(rest)

    {more, rest5} = parse_statement(rest4)
    {["        <ifStatement>",
      "          <keyword> if </keyword>",
      "          <symbol> ( </symbol>",
      "          <expression>"]
     ++ exp
     ++
     ["          </expression>",
      "          <symbol> ) </symbol>",
      "          <symbol> { </symbol>"]
     ++ statements
     ++
