From b57a3877fe0bb6b887f24d36f1eb17c726079273 Mon Sep 17 00:00:00 2001 From: Nat Lasseter Date: Wed, 31 Jan 2024 22:33:59 +0000 Subject: members_to_tree -> to/from_a in parser --- lib/sexp/parse.rb | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) (limited to 'lib/sexp/parse.rb') diff --git a/lib/sexp/parse.rb b/lib/sexp/parse.rb index 58692fb..51a86e3 100644 --- a/lib/sexp/parse.rb +++ b/lib/sexp/parse.rb @@ -47,6 +47,26 @@ class SExp "(#{car} . #{cdr})" end end + + def to_a + res = [] + at = self + + until at.nil? + res << at.car + at = at.cdr + end + + res + end + + def self.from_a(list) + if list.empty? + SExp.new + else + SExp.new(list[0], SExp.from_a(list[1..-1])) + end + end end def peek_token(tokens) @@ -78,14 +98,6 @@ def num_members(tokens) members end -def members_to_tree(members) - if members.empty? - SExp.new - else - SExp.new(members[0], members_to_tree(members[1..-1])) - end -end - def parse_sexp(tokens) need = num_members(tokens) get_token(tokens) @@ -103,7 +115,7 @@ def parse_sexp(tokens) get_token(tokens) - members_to_tree(members) + SExp.from_a(members) end def parse_sexps(tokens) -- cgit v1.2.1