Commit Graph

23 Commits

Author SHA1 Message Date
Peter McGoron 85e38a2b19 miniscm: add better support for immutable strings, and refactor to use real strings 2024-09-08 10:10:12 -04:00
Peter McGoron f26ab0db3f miniscm: add string-ref 2024-09-08 09:48:52 -04:00
Peter McGoron 775eb863ef readtable: handle EOF by returning EOF symbol 2024-09-08 08:46:15 -04:00
Peter McGoron 657db57826 readtable: comments 2024-09-08 08:44:42 -04:00
Peter McGoron 8bee2d39a4 readtable: simplify
After taking a look at the R7RS syntax and how Chicken parses
directives, I realized that it's easier to have "#!", "#\\", etc.
parse identifiers instead of baking in trie actions. This is slightly
slower but completely removes the trie concept from the readtable,
which simplifies the implementation and removes many corner cases
involving combining readtables with different action types.
2024-09-08 08:22:39 -04:00
Peter McGoron 6945841d1c readtable: case folding 2024-09-07 21:10:40 -04:00
Peter McGoron 3f56b03f1a readtable: when adding sequences to the readtable, push the last
read character back to the character reader before executing the
action.

This fixes the issue where sequences eat characters in front of them.
2024-09-07 19:41:22 -04:00
Peter McGoron 530dd18087 readtable: Normalize character handled by ACTIONs at the end of
sequences.

Previously, if "#true" and "#t" were in the readtable as sequences,
the string "#true" would call "#true"'s EXEC function after reading
"e", but it would call "#t"'s EXEC function after reading a
character after "t" (which could be EOF).

The new behavior normalizes everything so that the ACTIONs read the
character after the sequence.
2024-09-07 19:14:09 -04:00
Peter McGoron 42cd5a0678 readtable: add documentation for PUSH->READ 2024-09-07 18:44:18 -04:00
Peter McGoron 4d40be38d0 Readtable: fix propagation of default handlers in trie paths
Previous version did (ACTION 'UPDATE (CDR REST) ACTION) when a new
action had to be made. This caused default actions to propagate
through the trie.

While this isn't bad (it causes #TRU to be equal to #TRUE when that
was the last prefix in the tree), it can cause unexpected errors at
runtime, and no program should ever depend on its behavior.

The current solution is to make a new PASS readtable with a default
error action.
2024-09-07 18:37:17 -04:00
Peter McGoron 40b129b0db readtable: correctly add trie values. Incorrectly propogates default procedure 2024-09-07 17:58:18 -04:00
Peter McGoron 53a174f8e2 readtables, first pass 2024-09-07 17:47:10 -04:00
Peter McGoron f0cad72190 change around insert, delete, and update to hide representation 2024-09-05 21:18:04 -04:00
Peter McGoron 1e93de26d5 fix set and trie, add compat COND-EXPAND for chez 2024-09-05 03:03:22 -04:00
Peter McGoron c510054119 trie: add with test 2024-09-04 02:16:10 -04:00
Peter McGoron 40b03b5714 set:refactor maps 2024-09-04 01:18:35 -04:00
Peter McGoron ad49a18de5 set: add update 2024-09-04 00:54:11 -04:00
Peter McGoron 931cd50159 set: add insert multiple test 2024-08-31 10:53:29 -04:00
Peter McGoron f160ecaae1 add sets 2024-08-29 22:24:33 -04:00
Peter McGoron 1b56759726 miniscm: add mutable string emulation and char->integer 2024-08-26 17:52:19 -04:00
Peter McGoron 9d08c1f59e miniscm: add ports 2024-08-22 22:43:49 -04:00
Peter McGoron 93cfe0d94a minischeme: add char 2024-08-22 21:51:25 -04:00
Peter McGoron 45cfd8ff11 add doubly linked lists, tests, minischeme 2024-08-22 20:05:49 -04:00