# http://unicode.org/reports/tr35/tr35-numbers.html#Language_Plural_Rules defmodule Cldr.Number.PluralRule.Compiler do @moduledoc """ Function to tokenize and parse a plural rule. """ @doc """ Tokenize a plural rule definition. Using a leex lexer, tokenize a rule definition """ def tokenize(definition) when is_binary(definition) do definition |> String.to_charlist() |> :plural_rules_lexer.string() end @doc """ Parse a plural rule definition. Using a yexx lexer, parse a rule definition into an Elixir AST that can then be `unquoted` into a function definition. """ def parse(tokens) when is_list(tokens) do :plural_rules_parser.parse(tokens) end def parse(definition) when is_binary(definition) do {:ok, tokens, _end_line} = tokenize(definition) tokens |> :plural_rules_parser.parse() end end