Commit graph

317 commits

Author SHA1 Message Date
e339b519de Abort trying to do complex numbers in the DOT graph for now 2018-09-03 12:26:01 -07:00
92df0d9cfd [lexer] Attempt to add complex numbers to the DOT graph -- this is dumb 2018-09-03 11:46:45 -07:00
fb77e7e203 [lexer] Add fractionals and prefix fixes
- Add states to handle fractionals. Easy.
- Add states to properly handle the prefixes. You can have #i#x and #x#i. It
  should now reflect that...
2018-09-03 11:10:29 -07:00
0b5fb57ba9 [lexer] Ignore lexer DOT .pdf output 2018-09-03 10:44:23 -07:00
4341268d0d [lexer] DOT graph of lexer states: numbers, bools, and parens so far 2018-09-03 10:43:41 -07:00
ebee8c8646 [lexer] Add Num token type, which only takes ints for now... 2018-09-02 17:24:07 -07:00
0f18569292 [lexer] Add (failing) test for integers 2018-09-02 17:23:48 -07:00
04f2eb0937 [lexer] Remove empty Lexer impl 2018-09-02 17:23:32 -07:00
757f943fff [lexer] Oops forgot a return type on Hash::new() 2018-09-02 14:05:56 -07:00
7a6c2b91d1 [lexer] Bit of code cleanup in Lexer 2018-09-02 14:05:35 -07:00
f35fe5fd08 [lexer] Implement Hash::new() 2018-09-02 13:50:33 -07:00
aa4de7d4bd [lexer] Laying groundwork for lexing numbers... 2018-09-01 22:25:40 -07:00
7b6259977f [lexer] Add fail() constructor to StateResult 2018-09-01 22:21:21 -07:00
d69c3dbc31 [lexer] Obey Rust book recommendation about order of leading lines 2018-09-01 22:21:05 -07:00
0ed4aa3ae5 [types] Implement Add and Mul on Int 2018-09-01 20:00:09 -07:00
1dfc6823f0 Merge branch 'port-numbers' 2018-09-01 12:22:46 -07:00
68eec8578c [types] Passing integer tests and build fixes 2018-09-01 12:21:13 -07:00
3bdf14720c [types] Expand the documentation of Numbers 2018-09-01 12:03:26 -07:00
9801113c01 [types] Move exactness flag to is_exact() method on Number 2018-09-01 11:58:25 -07:00
f18b6a5719 [types] Simplify explicit lifetimes for Int::eq(Obj) 2018-09-01 11:52:49 -07:00
576b81e52c [types] OMG SO MUCH LIFETIME NONSENSE 2018-09-01 08:33:45 -07:00
1e12508348 [types] Number trait, Int type (which does not work), and some API improvements for Objects 2018-08-31 19:15:12 -07:00
683e2504b9 WIP 2018-08-31 19:10:54 -07:00
e61dc0b6a4 [lexer] Add failing test for issue #12 2018-08-27 06:56:48 -07:00
c14c939ad3 [parser] ListParser can handle lists of more than 2 elements 😮
As ListParser sees items within its list, it assembles a vector of Pairs. When
the parser encounters ')', it assembles the pairs into an actual linked list and
returns the root Pair.

This work also revealed that I was asserting incorrectly in my single_pair test.
It should return Null instead of an empty Pair. Neat.

Closes #17.
2018-08-26 22:24:17 -07:00
c02706e36f [parser] Add failing test for #17 2018-08-26 18:23:40 -07:00
ae63ce8e20 [parser] Add a test for parsing bools
Related to #13
2018-08-26 17:48:22 -07:00
4fab810d1f [parser] Add BoolParser and hook it up to existing parsers
Closes #13.
2018-08-26 17:43:59 -07:00
3a7fe94b32 [types] Implement From<bool> for Bool 2018-08-26 17:41:50 -07:00
fe478fadc7 [parser] Reorganize NodeParsers into parsers/ subdirectory 2018-08-26 17:32:09 -07:00
1304e04808 [lexer] Bring over the REPL from the parser 2018-08-26 13:45:52 -07:00
a23b917785 [lexer] Lex bools!
Extend the lexer to support Scheme bools like this: #t, #f, #true, #false.
Add some positive tests for this too.
2018-08-26 13:40:27 -07:00
b0b4699476 [lexer] Rewrite the Lexer!
Implement structs for each state in the lexer. The State objects are responsible
for determining how to handle a character and emit a Result  indicating to the
driver (the Lexer struct) how to proceed.
2018-08-26 11:47:18 -07:00
d0441965eb [types] Add Bools to the mix 2018-08-26 09:52:17 -07:00
4d5fcb69ee Update the TODO list in the README 2018-08-25 20:46:15 -07:00
8d8cf34234 [parser] Simple REPL that parses input and prints output 2018-08-25 20:38:54 -07:00
cf503838ae [parser] Add a single pair test 2018-08-25 20:21:18 -07:00
d312c41dc7 [parser] Integration test of parsing a single Sym! 2018-08-25 11:46:42 -07:00
9a728c9489 [types] Add some tests for equality of pairs 2018-08-25 11:32:19 -07:00
22f3c3a9e3 [types] Value equivalence via PartialEq! 2018-08-25 11:18:59 -07:00
1a3b7adc5a [types] Clean up Object a little, add default implementations 2018-08-25 09:21:51 -07:00
31081ba5a9 [types] Move tests to tests/ directory; implement a bunch of Display tests 2018-08-25 09:21:34 -07:00
d10c72711b [types] Test for displaying empty Pair 2018-08-25 08:33:39 -07:00
fc1f3acfa2 [types] Clean up failing tests 2018-08-25 08:33:23 -07:00
3024efe65e [types] Add some unit tests for Sym 2018-08-25 08:18:32 -07:00
cd7ea8f543 [types] Revert to a more Rusty way to print objects for Debug 2018-08-25 08:00:39 -07:00
37455641ec [parser] Attempt to write a unit test; realize you need a way to check for equality of objects 🤷 2018-08-25 07:59:43 -07:00
683c9df243 [parser] Handle the result of passing a subparser's result to the next parser in the stack 2018-08-25 07:58:49 -07:00
580a71c997 [parser] This resolved a warning about this variable's value being unread -- idk what is going on here 2018-08-25 07:57:45 -07:00
c35fce7727 [parser, types] Call subparser_completed 2018-08-24 21:07:04 -07:00