diff options
author | Nat Lasseter <user@4574.co.uk> | 2024-01-31 22:33:59 +0000 |
---|---|---|
committer | Nat Lasseter <user@4574.co.uk> | 2024-01-31 22:33:59 +0000 |
commit | b57a3877fe0bb6b887f24d36f1eb17c726079273 (patch) | |
tree | bdae68198bdad47f479f7bb75b1e93c360846e0c | |
parent | 0b02a56a4cf8ffe7f5fd3aac72b4ae69798f95f7 (diff) |
-rw-r--r-- | lib/sexp/parse.rb | 30 |
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) |