Commit Graph

88 Commits

Author SHA1 Message Date
greg 186c900920 Implement expect macro
Seems like there's no way around passing in self manually
2017-09-19 22:10:54 -07:00
greg 509ab80b9c I can now parse one thing 2017-09-19 22:10:54 -07:00
greg 247638c4db Get parsing REPL working 2017-09-19 22:10:54 -07:00
greg be98f8387e Add another test 2017-09-19 22:10:54 -07:00
greg 841b38d5b1 Add tokenization test 2017-09-19 22:10:53 -07:00
greg 16dfbb27d5 Use state features from simplerepl 2017-09-19 22:10:53 -07:00
greg 3af7e6a409 Refactoring Schala
Gonna work on Schala in earnest now! Using the simplerepl crate instead
of a build-in REPL, temporarily dropping parsing and evaluation code.
2017-09-19 22:10:53 -07:00
greg 123f388711 Rename language to "Schala" 2017-09-19 22:10:53 -07:00
greg bb349cda5f Fix newline tokenizing bug
Still need to fix <statements> parsing because of the final newline
2017-09-19 22:10:53 -07:00
greg caa331ecdc Read from file as well as repl 2017-09-19 22:10:53 -07:00
greg ae3a030ad8 Use iterative semantics for reduction
Becuase if you try to make reduce() recursive you blow out the stack.

Incidentally, "let a = 0; while a < 999999; let a = a + 1 end" is a neat
thing to try at this stage of the game
2017-09-19 22:10:53 -07:00
greg ddb09b453d Implement booleans 2017-09-19 22:10:53 -07:00
greg 9a4760d44f Implement while-reduction 2017-09-19 22:10:53 -07:00
greg eb5ce2ef9e Don't print newline for empty REPL result 2017-09-19 22:10:53 -07:00
greg b080ea7c81 Add if-statement evaluation 2017-09-19 22:10:53 -07:00
greg dffab8ae94 Fixed arg list parsing 2017-09-19 22:10:53 -07:00
greg 48ee6c9a75 Add function name to parse 2017-09-19 22:10:53 -07:00
greg 58d399dace More function parsing 2017-09-19 22:10:53 -07:00
greg 57ea1bae30 Preliminary addition of function blocks 2017-09-19 22:10:53 -07:00
greg e870d8172a Make = a keyword 2017-09-19 22:10:53 -07:00
greg 72b26755a7 Make ParseResult just a normal Result type
No reason for it to be different
2017-09-19 22:10:53 -07:00
greg 1416c9d444 Parse null as simple_expression 2017-09-19 22:10:53 -07:00
greg 5c79563e53 Reduce binop args before reducing full expr 2017-09-19 22:10:53 -07:00
greg c27c900e7f Add operators % and **
semantics for these are hard with floats handle later
2017-09-19 22:10:53 -07:00
greg 50c5dbe96d Evaluate simple binops
Woo this is kind of a neat milestone! I can now compute with this
language!
2017-09-19 22:10:53 -07:00
greg be8c8b3343 Add paren test 2017-09-19 22:10:53 -07:00
greg b856023072 Fixed paren parsing
also made error reporting a bit nicer
2017-09-19 22:10:53 -07:00
greg 868373f409 use match syntax in simple_parse 2017-09-19 22:10:53 -07:00
greg 582a7fd6dc Make parse and tokens optional 2017-09-19 22:10:53 -07:00
greg a947ec3cb2 Add simple parsing test 2017-09-19 22:10:53 -07:00
greg 79619025ea Add directive to print precedence chart 2017-09-19 22:10:53 -07:00
greg 56b338a6a8 Move to global precedence table 2017-09-19 22:10:53 -07:00
greg 7d6f946e22 Fill out a few more precedences 2017-09-19 22:10:53 -07:00
greg 0da7f7e3a1 Fully fixed binop parsing 2017-09-19 22:10:53 -07:00
greg 19a344fa77 Fixed precedent-less binop parsing 2017-09-19 22:10:53 -07:00
greg 626a7f3861 Working on binop parsing 2017-09-19 22:10:53 -07:00
greg 8e3a571d67 .env dirctive to display environment 2017-09-19 22:10:53 -07:00
greg f88f115567 Environment persistent across repl loop 2017-09-19 22:10:53 -07:00
greg 08f1092b69 Variable lookup works
Note this introduces a panic - if the AST node inserted into the
environment is not reduced, it throws an error when trying to look it up
2017-09-19 22:10:53 -07:00
greg 6ddea790c0 Beginning of variable lookup
everything is null
2017-09-19 22:10:53 -07:00
greg 6897eb1283 Implemented variable binding 2017-09-19 22:10:53 -07:00
greg 34fdf2be00 Add machinery for evaluation environments 2017-09-19 22:10:53 -07:00
greg 4ef93fafb5 Cause tokenize error for unclosed strings 2017-09-19 22:10:53 -07:00
greg d2108f0f97 First pass at evaluation
Very incomplete
2017-09-19 22:10:52 -07:00
greg 2989ac338c Implemented binop parsing
Uses Operator-precedence parsing algorithm, which I don't fully
understand.
2017-09-19 22:10:52 -07:00
greg 8b6d54aec2 Fix let clause parsing
let a = x, x should be expression not just simple expression
2017-09-19 22:10:52 -07:00
greg cdb47bb3b9 Add paren parsing 2017-09-19 22:10:52 -07:00
greg 9d6dc5a5f2 Tokenize periods separately 2017-09-19 22:10:52 -07:00
greg 71d2428e57 Update Grammar 2017-09-19 22:10:52 -07:00
greg 8f9bfbc5bd Rename rhs to simple_expression 2017-09-19 22:10:52 -07:00