[:input, :loop_begin, :output, :loop_begin, :decrement, :loop_end, :input, :loop_end]
[:input, [:loop_begin, :output, [:loop_begin, :decrement, :loop_end], :input, :loop_end]]
def tree(tokens), do: do_tree(tokens, [])
defp do_tree([:loop_begin|rest], acc) do
[tree(rest, [:loop_begin]) | acc]
end
defp do_tree([:loop_end|rest], acc) do
[:loop_end, acc]
end
defp do_tree([t|rest], acc), do: map(rest, [t | acc])
defmodule Grouper dodef group(list) dogroup(list, [])enddefp group([h | t], acc) dogroup(t, [h | acc])enddefp group([], acc) doEnum.reverse(acc)endend
defp group([:loop_begin | t], acc) do
{current, rest} = loop(t, [:loop_begin])
group(rest, [current | acc])end
defp loop([:loop_end | t], acc) do{Enum.reverse([:loop_end | acc]), t}enddefp loop([h | t], acc) doloop(t, [h | acc])end
defp loop([:loop_begin | t], acc) do{current, rest} = loop(t, [:loop_begin])loop(rest, [current | acc])end
defmodule Grouper dodef group(list) dogroup(list, [])enddefp group([:loop_begin | t], acc) do{current, rest} = loop(t, [:loop_begin])group(rest, [current | acc])enddefp group([h | t], acc) dogroup(t, [h | acc])enddefp group([], acc) doEnum.reverse(acc)enddefp loop([:loop_begin | t], acc) do{current, rest} = loop(t, [:loop_begin])loop(rest, [current | acc])enddefp loop([:loop_end | t], acc) do{Enum.reverse([:loop_end | acc]), t}enddefp loop([h | t], acc) doloop(t, [h | acc])endend
--
You received this message because you are subscribed to the Google Groups "elixir-lang-talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to elixir-lang-talk+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-talk/beb86ff0-be20-462c-8996-14e251201983%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
You received this message because you are subscribed to a topic in the Google Groups "elixir-lang-talk" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/elixir-lang-talk/UHOIVvmUS4s/unsubscribe.
To unsubscribe from this group and all its topics, send an email to elixir-lang-ta...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-talk/CAGnRm4LmeQj2_anpG4AG%2BOTBoTThnSMZDJBHAGCWrJsNKC88aQ%40mail.gmail.com.