summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorNat Lasseter <user@4574.co.uk>2024-01-31 22:33:59 +0000
committerNat Lasseter <user@4574.co.uk>2024-01-31 22:33:59 +0000
commitb57a3877fe0bb6b887f24d36f1eb17c726079273 (patch)
treebdae68198bdad47f479f7bb75b1e93c360846e0c /lib
parent0b02a56a4cf8ffe7f5fd3aac72b4ae69798f95f7 (diff)
members_to_tree -> to/from_a in parserHEADmain
Diffstat (limited to 'lib')
-rw-r--r--lib/sexp/parse.rb30
1 files changed, 21 insertions, 9 deletions
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)