leex_helpers.ex (768B)
1 defmodule EarmarkParser.Helpers.LeexHelpers do 2 3 @moduledoc false 4 @doc """ 5 Allows to lex an Elixir string with a leex lexer and returns 6 the tokens as needed for a yecc parser. 7 """ 8 def lex text, with: lexer do 9 case text 10 |> String.to_charlist() 11 |> lexer.string() do 12 {:ok, tokens, _} -> tokens 13 end 14 end 15 16 def tokenize line, with: lexer do 17 {:ok, tokens, _} = 18 line 19 |> to_charlist() 20 |> lexer.string() 21 elixirize_tokens(tokens,[]) 22 |> Enum.reverse() 23 end 24 25 defp elixirize_tokens(tokens, rest) 26 defp elixirize_tokens([], result), do: result 27 defp elixirize_tokens([{token, _, text}|rest], result), do: elixirize_tokens(rest, [{token,to_string(text)}|result]) 28 29 end 30 31 # SPDX-License-Identifier: Apache-2.0