wip name cleanups

This commit is contained in:
Peter Harpending
2026-06-01 18:00:37 -07:00
parent f548c7d88d
commit 9da6dbf18d
12 changed files with 804 additions and 281 deletions
+59
View File
@@ -0,0 +1,59 @@
% @doc
% working out infix parsing bullshit on toy arith language
%
% our operators for now are
%
% [+, *, ^] in outer->inner order
-module(ifarith).
-export([main/0]).
test_str() ->
"1 + 2 + 3"
main() ->
% first going to tokenize
Tokens = tokens(test_str()).
-record(tk,
{type = none :: int | op | noise,
str = none :: none | string(),
val = none :: none | integer() | atom()}).
tokens(Stk, []) ->
lists:reverse(Stk).
% [+*^] op token
tokens(Stk, [Char | Rest]) ->
case Char of
Op when $+ =:= Op; $* =:= Op; $^ =:= Op ->
Tk = #tk{type = op, str = [Op], val = list_to_tuple([Op])},
tokens([Tk | Stk], Rest);
D when $0 =< D, D =< $9 ->
{Tk, NewSrcStr} = tk_int([D], [D], Rest),
tokens([Tk | Stk], NewSrcStr).
_ ->
tokens(Stk, Rest)
end.
% tokens for now are
-spec tk_int(DigitStack, CharStack, SrcStr) -> Result when
DigitStack :: string(),
CharStack :: string(),
SrcStr :: string(),
Result :: {Token, NewSrcStr},
Token :: #tk{},
NewSrcStr :: string().
tk_int(DigitStack, CharStack, SrcStr) ->
case SrcStr of
% cases when still consuming the int
% [0-9]
[D | NewSrcStr] when $0 =< D, D =< $9 ->
tk_int([D | DigitStack], [D | CharStack], NewSrcStr);
[$_ | NewSrcStr] ->
tk_int(DigitStack, [D | CharStack], NewSrcStr);
% otherwise done
_ ->
Digits =
end.