Current section
Files
Jump to
Current section
Files
src/scheme/tokenizer.erl
-module(tokenizer).
-export([tokenize/1]).
-ifdef(EUNIT).
-include_lib("eunit/include/eunit.hrl").
-compile(export_all).
-endif.
%%====================================================================
%% API functions
%%====================================================================
tokenize(Text) ->
clean(split(grow_open(grow_close(Text)))).
%%====================================================================
%% Internal functions
%%====================================================================
grow_open(Text) ->
replace(Text, "(", " ( ").
grow_close(Text) ->
replace(Text, ")", " ) ").
replace(Text, From, To) ->
lists:append(string:replace(Text, From, To, all)).
split(Text) ->
string:split(Text, " ", all).
clean(Tokens) ->
[T || T <- Tokens, length(T) > 0].
%%====================================================================
%% Tests
%%====================================================================
-ifdef(EUNIT).
tokenize_minimal_test() ->
Text = "(define (f x y) (+ x y))",
Tokens = tokenize(Text),
?assert(Tokens =:= ["(", "define",
"(", "f", "x", "y", ")",
"(", "+", "x", "y", ")", ")"]).
-endif.