Commit Graph

292 Commits

Author SHA1 Message Date
greg
27d4c2ccbd No references in pattern-matching 2017-09-19 22:10:58 -07:00
greg
6794d22f1d Run rustfmt on eval.rs, parser.rs 2017-09-19 22:10:58 -07:00
greg
1858d26638 Add comparison operators
+  make operator evaluation more concise
2017-09-19 22:10:58 -07:00
greg
84fbe73cf6 Add Lambda type
And change name FuncNode -> FuncDefNode

Now function definition nodes reduce to a Lambda, which is not
reducible.
2017-09-19 22:10:58 -07:00
greg
ad994c38ae Test simplification 2017-09-19 22:10:58 -07:00
greg
48343d3fad Tightened tokenization tests 2017-09-19 22:10:58 -07:00
greg
4f8ff35d0f fixed bug with ends_identifier 2017-09-19 22:10:58 -07:00
greg
7311d0311f Simplify pattern a little bit 2017-09-19 22:10:58 -07:00
greg
1b59c264b4 Use itertools peeking_take_while
Cuts down on lines in the tokenizer
2017-09-19 22:10:58 -07:00
greg
b2e453a9de Rewrite of tokenizer 2017-09-19 22:10:58 -07:00
greg
59226eb731 Ran rustfmt on parser.rs 2017-09-19 22:10:58 -07:00
greg
297003c0b0 Operator only needs to be a tuple struct 2017-09-19 22:10:58 -07:00
greg
e5ee072b00 Convert tokenizer to large match statement
In the hopes of making it shorter
2017-09-19 22:10:58 -07:00
greg
9b62efc830 Fix conditional parsing
Needed to account for semicolons/newlines. Maybe need to generalize
delimiter-separated list of things
2017-09-19 22:10:58 -07:00
greg
f626ca1427 Add test for conditional parsing 2017-09-19 22:10:57 -07:00
greg
82c52ede48 Finish evaluating conditionals 2017-09-19 22:10:57 -07:00
greg
7f52b20d97 Conditional eval partway implemented
Need to change the AST representation to support compound statements I
think
2017-09-19 22:10:57 -07:00
greg
12fee6158c Vector'd expressions don't need to be boxed 2017-09-19 22:10:57 -07:00
greg
2d21de7cc3 Added support for conditionals to parser
Not to eval yet
2017-09-19 22:10:57 -07:00
greg
9cc9c5977d Fixed evaluation of function calls
This bit still isn't quite small-step but maybe that's okay for
functions
2017-09-19 22:10:57 -07:00
greg
ed9d1312d1 Change representation of variables 2017-09-19 22:10:57 -07:00
greg
29d9e50311 All environment changes represented explicitly
Start the work of rewriting the evluator to be a true small-step
evaluator - that is, all state changes are represented explicitly as
SideEffect types, and not as methods called on the evaluator, except at
the very top of the evaluation loop
2017-09-19 22:10:57 -07:00
greg
e84550f3ec Kill two compilation warnings 2017-09-19 22:10:57 -07:00
greg
3063de1242 Run rustfmt on the rest of them 2017-09-19 22:10:57 -07:00
greg
e1d07b4e66 Rustfmt on llvm_wrap 2017-09-19 22:10:57 -07:00
greg
af45004afa Run rustfmt on some files 2017-09-19 22:10:57 -07:00
greg
d4d61ce5ad Use process::exit in main 2017-09-19 22:10:57 -07:00
greg
743311d18a Convert Tokenize to Result 2017-09-19 22:10:57 -07:00
greg
17f9846bb9 Make tests pass w/ new match syntax 2017-09-19 22:10:57 -07:00
greg
fe8418edbe Kill some extraneous spaces 2017-09-19 22:10:57 -07:00
greg
1d8102b9fa Make compilation controllable 2017-09-19 22:10:57 -07:00
greg
aac3ca40fe Add getopts 2017-09-19 22:10:57 -07:00
greg
c389b44bf8 Compile statements with variables 2017-09-19 22:10:57 -07:00
greg
db52f9b716 Package compilation context into one struct 2017-09-19 22:10:57 -07:00
greg
d3a743442b = should have high precedence 2017-09-19 22:10:57 -07:00
greg
e46d840d96 Move more code to llvm_wrap
And silence a few compiler warnings
2017-09-19 22:10:57 -07:00
greg
3d406f1dd2 Move llmv wrapper into separate file 2017-09-19 22:10:57 -07:00
greg
fca307d3ab Package more functions in LLVMWrapper 2017-09-19 22:10:57 -07:00
greg
a65544356c Fix bug in delete routine 2017-09-19 22:10:57 -07:00
greg
10d51cc29c Compile binexps 2017-09-19 22:10:57 -07:00
greg
95b773de7f Compilation sequence
-move all steps of the llvm IR compilation process into the binary
2017-09-19 22:10:57 -07:00
greg
c032da712f Successfully compiling a main function 2017-09-19 22:10:57 -07:00
greg
cfb93d9dea Compilation that returns an output code works 2017-09-19 22:10:57 -07:00
greg
08798fb690 Move all LLVM functions into LLVMWrap
so I can kill the global unsafe
2017-09-19 22:10:57 -07:00
greg
e0eef5e58f More moving functions around 2017-09-19 22:10:57 -07:00
greg
2107e6344e More function wrapping 2017-09-19 22:10:57 -07:00
greg
2ad65a1c5d Some in-progress work 2017-09-19 22:10:57 -07:00
greg
a01b6c874e Small-step function arg evaluation 2017-09-19 22:10:57 -07:00
greg
907af38f44 Evaluate printing 2017-09-19 22:10:57 -07:00
greg
923566c4e9 Get rid of println's for token/ast debugging
Instead just explicitly stick them into the returned string.

This is necessary 'cause I'm gonna convert simplerepl to use ncurses
soon, so I can't have any side effects
2017-09-19 22:10:57 -07:00
greg
96c51a9b88 Move some more unsafe code into block 2017-09-19 22:10:57 -07:00
greg
8528c912bd Added side effect framework 2017-09-19 22:10:57 -07:00
greg
47f4c25020 Doing some wrapping 2017-09-19 22:10:56 -07:00
greg
c18c1a639a compilation does something usefl
Following along with:
http://blog.ulysse.io/2016/07/03/llvm-getting-started.html
2017-09-19 22:10:56 -07:00
greg
d3f6bbabaa Starting to add actual LLVM generating code 2017-09-19 22:10:56 -07:00
greg
ee12e10ac6 Fix slice syntax 2017-09-19 22:10:56 -07:00
greg
6a0b50f278 Kill hashmap import for now 2017-09-19 22:10:56 -07:00
greg
6c44d295db Framework for compilation 2017-09-19 22:10:56 -07:00
greg
cd69ebaa9d Split main() into subfunctions 2017-09-19 22:10:56 -07:00
greg
3fe9ec95d5 Fix repl error message 2017-09-19 22:10:56 -07:00
greg
8b5d1ecd15 Kill compilation for now
Don't wanna deal with this right this second
2017-09-19 22:10:56 -07:00
greg
272fa92052 More fleshing out 2017-09-19 22:10:56 -07:00
greg
0c717c721e Import Function type 2017-09-19 22:10:56 -07:00
greg
64d560a1fc Still more work 2017-09-19 22:10:56 -07:00
greg
8a92d5ffa8 Partial LLVM work 2017-09-19 22:10:56 -07:00
greg
5ed0ed727b Starting to add LLVM code 2017-09-19 22:10:56 -07:00
greg
5428810d2c Add llvm dependencies 2017-09-19 22:10:56 -07:00
greg
b48c007bca Get rid of old evaluator file
No longer need it
2017-09-19 22:10:56 -07:00
greg
5aa4c404a5 Added conditionals to grammar 2017-09-19 22:10:56 -07:00
greg
0e3aaa8b08 Add conditional expression support 2017-09-19 22:10:56 -07:00
greg
f33cfdadfe Fix variable lookup order
Evaluator uses frames as a stack, so to find the most-recent variable
binding we have to iterate through it the reverse way. This fixes a bug
manifested by:

fn a(x)
 x + 20
end

fn b(x)
 a(x) + 20
end
2017-09-19 22:10:56 -07:00
greg
231de69084 Added infrastructure for reading files 2017-09-19 22:10:56 -07:00
greg
f014c1a9d9 Kill compiler warnings 2017-09-19 22:10:56 -07:00
greg
c36bc3377e Fix lookup_binding in function call case 2017-09-19 22:10:56 -07:00
greg
5eba222679 Variable binding in fucntion call work 2017-09-19 22:10:56 -07:00
greg
dcf89aa429 Move lookup_function back onto Evaluator
THe problem was that we were borrowing the output of the inner HashMap,
if we clone it we don't borrow anything
2017-09-19 22:10:56 -07:00
greg
1ffbeb6472 Return last value out of function 2017-09-19 22:10:56 -07:00
greg
f8a521fc9b Start making function calls work
This commit isn't fully done yet
2017-09-19 22:10:56 -07:00
greg
77f72806be Add support for multiple frames 2017-09-19 22:10:56 -07:00
greg
dcde5d6018 Start function call reduction
Move the varmap and funcmap functions to the Evaluator, to mkae it
easier to facilitate separate frames
2017-09-19 22:10:56 -07:00
greg
6bb227d052 Rename methods
make reduce() the entry point to evaluation
2017-09-19 22:10:56 -07:00
greg
29d4cb53a4 Add infrastructure to do function evaluation
Right now you can successfully evaluate a function definition (returning
Null), but cannot call a function
2017-09-19 22:10:56 -07:00
greg
3915c1f035 Remove println from reduction 2017-09-19 22:10:56 -07:00
greg
b400796e4d Get rid of test variable input 2017-09-19 22:10:56 -07:00
greg
96e6a87f64 Add string concat 2017-09-19 22:10:56 -07:00
greg
b1f9e5cefc Fix variable lookup 2017-09-19 22:10:56 -07:00
greg
be36d4697d Pretty-print evaluated AST nodes 2017-09-19 22:10:56 -07:00
greg
ce8c511929 Evaluate additional operators 2017-09-19 22:10:55 -07:00
greg
a8cafa8c64 Move Evaluator state into interpreter state 2017-09-19 22:10:55 -07:00
greg
229e6ae733 More expression parsing work 2017-09-19 22:10:55 -07:00
greg
e9dd0d9ae8 Add concept of Null expression
Finally, the null-only behavior is starting to manifest itself!
2017-09-19 22:10:55 -07:00
greg
15d4317191 Add null expression 2017-09-19 22:10:55 -07:00
greg
7114e446a4 Adding, subtracting works 2017-09-19 22:10:55 -07:00
greg
044f534ac5 Start implementing variable lookup 2017-09-19 22:10:55 -07:00
greg
d3207ad890 Move evaluation logic back into methods
They need to be able to access the environment which is stored in the
Evalator struct
2017-09-19 22:10:55 -07:00
greg
19fffd5063 Variable binding infrastructure 2017-09-19 22:10:55 -07:00
greg
785c916ece Start reducing ASTs
Start writing code to reduce AST nodes
q
2017-09-19 22:10:55 -07:00
greg
5a9ebb188d Make Evaluable trait 2017-09-19 22:10:55 -07:00
greg
16e8d969be Add basic evaluation 2017-09-19 22:10:55 -07:00
greg
70bf68d9bd More concision in parser 2017-09-19 22:10:55 -07:00