Packages

Compile and evaluate regular expressions using Non-deterministic Finite Automata (NFAs).

Current section

Files

Jump to
rexen src rexen@nfa@state.erl
Raw

src/rexen@nfa@state.erl

-module(rexen@nfa@state).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/rexen/nfa/state.gleam").
-export([new/1, matches/2, is_epsilon/1, add_transition/2]).
-export_type([state/0, matcher/0]).
-type state() :: {state, binary(), list({matcher(), binary()})}.
-type matcher() :: {character_matcher, binary()} | epsilon_matcher | any_matcher.
-file("src/rexen/nfa/state.gleam", 16).
-spec new(binary()) -> state().
new(Name) ->
{state, Name, []}.
-file("src/rexen/nfa/state.gleam", 20).
-spec matches(matcher(), binary()) -> boolean().
matches(M, C) ->
case M of
epsilon_matcher ->
true;
{character_matcher, A} ->
A =:= C;
any_matcher ->
true
end.
-file("src/rexen/nfa/state.gleam", 30).
-spec is_epsilon(matcher()) -> boolean().
is_epsilon(M) ->
case M of
epsilon_matcher ->
true;
{character_matcher, _} ->
false;
any_matcher ->
false
end.
-file("src/rexen/nfa/state.gleam", 38).
-spec add_transition(list({matcher(), binary()}), {matcher(), binary()}) -> list({matcher(),
binary()}).
add_transition(Transitions, Transition) ->
lists:append(Transitions, [Transition]).