Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I like using
sexpfmt
to format log messages. Unfortunately, without this PR,sexpfmt
will wait for EOF before spitting out formatted output. This PR is intended to improve this situation.Parsing large input is more cache-efficient when lexing and parsing occur in separate passes. Parser and lexer generators like
lex
andyacc
(or their modern counterparts,flex
andbison
) typically accept input character-at-a-time. However, more modern parser frameworks, likeLALRPOP
andnom
(the latter used in this project at the moment) rely on string input to lex and parse in separate passes.As a compromise, we read input using the 'matching parentheses' property of S-expressions, using spaces to delimit atoms and parentheses (as well as other bookends) to delimit lists. This way, we can read each form into a temporary buffer, parse, and then print. This branch implements this approach. It is not as elegant as the Yacc-like approach since we must effectively lex twice, but will do for now and should be functionally equivalent.