From e180dc955d2c00701dacf06fd93fd0aca3ef63f0 Mon Sep 17 00:00:00 2001 From: Peter Harpending Date: Wed, 3 Jun 2026 19:28:55 -0700 Subject: [PATCH] stuff --- cli/src/gsc_test_ntree.erl | 47 +++++++++++++++++++++++--------------- src/gsc_ntree.erl | 7 ++++-- 2 files changed, 34 insertions(+), 20 deletions(-) diff --git a/cli/src/gsc_test_ntree.erl b/cli/src/gsc_test_ntree.erl index 6183897..5285157 100644 --- a/cli/src/gsc_test_ntree.erl +++ b/cli/src/gsc_test_ntree.erl @@ -68,27 +68,38 @@ parse(Signal) -> % think)? F0 = Signal, F1 = f2f_parens(F0), - %F2 = f2f_op("=>", F1), - Result = F1, + F2 = f2f_op("=>", F1), + F3 = f2f_op("*", F2), + Result = F2, Result. -%f2f_op(OpStr, Fst) -> -% case f2f_op(OpStr, [], none, Fst) of -% % never saw it, no change -% ident -> Fst; -% -% -%% never saw the op -%f2f_op(_, _, none, []) -> -% ident; -%% see op -%f2f_op(OpStr, LhsStk, none, [OpTk = #tk{str = OpStr} | Rest]) -> -% Lhf = lists:reverse(LhsStk), -% Rhf = f2f_op(OpStr, Rest), -% Lht = #ns{meta = none, kids = Lhf}, -% Rht = #ns{meta = none, kids = Rhf}, -% Result = +f2f_op(OpStr, Fst) -> + f2f_op(OpStr, [], Fst). + + +% never saw the op +f2f_op(_opstr, Stk, []) -> + lists:reverse(Stk); +% see op +f2f_op(OpStr, LhsStk, [#tk{str = OpStr} = OpTk | Rest]) -> + Lhf = lists:reverse(LhsStk), + Rhf = f2f_op(OpStr, Rest), + Lht = #ns{meta = none, kids = Lhf}, + Rht = #ns{meta = none, kids = Rhf}, + ResultT = #ns{meta = {op, OpTk}, + kids = [Lht, Rht]}, + ResultF = [ResultT], + ResultF; +% see stem, descend +f2f_op(OpStr, LhsStk, [Ns = #ns{kids = NsKids} | Rest]) -> + NewNsKids = f2f_op(OpStr, NsKids), + NewNs = Ns#ns{kids = NewNsKids}, + NewStk = [NewNs | LhsStk], + f2f_op(OpStr, NewStk, Rest); +% see leaf, just add +f2f_op(OpStr, Stk, [L | Rest]) -> + f2f_op(OpStr, [L | Stk], Rest). -spec f2f_parens(Forest) -> NewForest when diff --git a/src/gsc_ntree.erl b/src/gsc_ntree.erl index 49328ad..3090140 100644 --- a/src/gsc_ntree.erl +++ b/src/gsc_ntree.erl @@ -51,7 +51,6 @@ %% API: functions %%===================================================== - -spec nstem(Root, Forest) -> Tree when Root :: S, Forest :: nforest(S, L), @@ -67,6 +66,7 @@ meta(#ns{meta = M}) -> M. kids(#ns{kids = K}) -> K. + -spec flatten_tree(Tree) -> Leafs when Tree :: ntree(_, L), Leafs :: [L], @@ -76,6 +76,7 @@ flatten_tree(T) -> lists:flatten(ft(T)). + -spec flatten_forest(Forest) -> Leafs when Forest :: nforest(_, L), Leafs :: [L], @@ -88,4 +89,6 @@ flatten_forest(F) -> ft(#ns{kids = F}) -> ff(F); ft(Leaf) -> [Leaf]. -ff(F) -> [ft(T) || T <- F]. +ff(F) -> + [ft(T) || T <- F]. +