A Simple S-Expression Parser
S-expressions are a plain ASCII form for representing complex data structures. They can be used to serialize data to send over a communication path, to persist into a database, or to otherwise use as a string representation of a hierarchical data element. When displayed in indented form, S-expressions are even suitable for human comprehension, providing a simple and intuitive nesting syntax, with parentheses used as the nesting operators. Here is a sample S-expression describing an authentication certificate:
(certificate
(issuer
(name
(public-key
rsa-with-md5
(e |NFGq/E3wh9f4rJIQVXhS|)
(n |d738/4ghP9rFZ0gAIYZ5q9y6iskDJwASi5rEQpEQq8ZyMZeIZzIAR2I5iGE=|))
aid-committee))
(subject
(ref
(public-key
rsa-with-md5
(e |NFGq/E3wh9f4rJIQVXhS|)
(n |d738/4ghP9rFZ0gAIYZ5q9y6iskDJwASi5rEQpEQq8ZyMZeIZzIAR2I5iGE=|))
tom
mother))
(not-after "1998-01-01_09:00:00")
(tag
(spend (account "12345678") (* numeric range "1" "1000"))))The attraction of S-expressions is that they consist purely of lists of basic character or numeric strings, with structure represented using nested parentheses.
The languages Lisp and Scheme use S-expressions as their actual program syntax. Here is a factorial function written in Common Lisp:
(defun factorial (x)
(if (zerop x) 1
(* x (factorial (- x 1)))))The online Wikipedia article (http://en.wikipedia.org/wiki/s-expression) has more background and additional links for further information on S-expressions.
In computer science classes, it is common ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access