Alex Bethel
528de718dc
Clean up eval_expr
some more
...
I keep going back and forth on how I want this block to look :P
Anyway, this is *probably* its final-ish form, until the parser gets
re-written.
2021-06-02 18:41:20 -05:00
Alex Bethel
ce02aebd91
Use impl Value
rather than trait BfWriter
...
It probably makes more sense to be writing values with
`Value::bf_write` than to go for the complexity of using a trait to
allow `Writer::write_value` (which also looks ambiguous because it's
not immediately clear that a generic name like "write_value" relates
to BF or AbleScript).
2021-06-02 18:20:30 -05:00
Alex Bethel
326d0511e7
Add Brainfuck functio interpretation
...
BF functios can now be declared and called from AbleScript code.
Function parameters supplied from AbleScript are serialized manually
into byte sequences using the `BfWriter` trait, and are available from
BF code using the input operator, `,`.
At the moment, BF functios simply write output to stdout, and are
therefore incapable of communicating results to the rest of the
program; this might change in the future if we can get something close
to pass-by-reference working.
2021-06-02 15:29:31 -05:00
Alex Bethel
07195d4cf6
Fix panic on arithmetic error
...
Divide by zero and add, subtract, or multiply with overflow are all
caught now and reported as an ArithmeticError, rather than causing the
interpreter to panic.
2021-05-30 13:32:29 -05:00
Alex Bethel
acfd81ead2
More thorough unit tests
2021-05-30 13:32:29 -05:00
Alex Bethel
344a11084e
Add some unit tests to interpret.rs
...
Currently `overflow_should_not_panic` and `variable_persistence` both
fail due to bugs in the interpreter.
2021-05-30 13:32:29 -05:00
Able
90773eea3d
Merge pull request #27 from AlexBethel/master
2021-05-29 17:14:25 -05:00
Alex Bethel
099b9e23d6
Make base-55 encoding & decoding match
...
Changed "U"'s encoding to -210, so now when the README claims "U =
-210", it's actually accurate :)
2021-05-29 14:24:46 -05:00
Alex Bethel
585bf2e19f
Use single-letter identifiers as base-55 digits
2021-05-29 10:45:39 -05:00
Able
7b21eaf48a
Merge pull request #26 from Seppel3210/patch-1
2021-05-28 05:10:43 -05:00
Seppel3210
d52c775ed1
Change "*" versions to explicit versions
...
Change "*" versions to explicit versions in Cargo.toml
2021-05-28 09:30:16 +02:00
Able
e02edbbd16
Update README.md
2021-05-27 17:51:08 -05:00
Able
18973333b0
Merge pull request #24 from AlexBethel/master
2021-05-25 23:06:08 -05:00
Alex Bethel
c906366e3f
Improve name & documentation accuracy
...
Renamed ControlFlow -> HaltStatus because that's what the enum really
is -- a status on why something halted. Also reviewed `interpret.rs`'s
documentation and fixed a few things that were out of date.
2021-05-25 21:55:02 -05:00
Alexander Bethel
ec81ead3ea
Implement break
and hopback
statements
2021-05-25 21:22:38 -05:00
Alexander Bethel
669f379700
Better abstractions, implement scoping rules
2021-05-25 13:26:01 -05:00
Alexander Bethel
109c77eeb2
Implement more statements
...
Added variable declaration, `if` statements, `loop` statements,
variable assignment, and variable banning to go along with
printing (which was already implemented). We still need function
declarations, brainfuck declarations, function calls, and the control
flow operators "break" and "hopback".
2021-05-24 10:50:26 -05:00
Able
c27837a807
Slightly more curse
2021-05-24 01:18:36 -05:00
Able
84016d3dcd
Merge pull request #22 from AlexBethel/master
2021-05-21 12:29:03 -05:00
Alexander Bethel
b625a71711
Allow abool -> bool coercion
...
The expression `sometimes & true` now evaluates to `true` 50% of the
time and false 50% of the time, rather than throwing a type error
because `sometimes` is not a bool.
2021-05-21 12:25:37 -05:00
Alexander Bethel
ea211fc3b0
Make ablescript -f
run interpreter
...
`ablescript -f foo.able` will now both parse and interpret `foo.able`,
rather than just parsing it.
2021-05-20 18:24:18 -05:00
Alexander Bethel
eccc00ff81
Implement basic interpreter
...
Added code for interpreting parsed AbleScript expressions and
statements, and hooked it up to the REPL.
2021-05-20 18:18:01 -05:00
Able
0ad680cadd
Merge pull request #18 from T-Dark0/tdark-brainfuck
2021-05-15 20:34:29 -05:00
tdark
1b195dc955
Added support for specifying a tape size limit
2021-05-15 18:39:49 +02:00
tdark
7b5ae34bfd
Implemented brainfuck interpreter
2021-05-15 18:10:50 +02:00
Able
c0b7bd2f34
Update README.md
2021-05-14 10:52:16 -05:00
Able
396650ae95
Update README.md
2021-05-11 13:39:41 -05:00
able
87139c4448
consider using able brand products
2021-05-05 07:33:40 -05:00
able
9b7367353d
Brain fuck work
2021-05-04 22:23:17 -05:00
able
57d86b9f92
README changes
2021-05-04 21:29:51 -05:00
able
bdf27c83da
Minor Changes
2021-05-03 19:33:21 -05:00
Able
143ae613d8
Merge pull request #15 from erindesu/master
...
Fixed some incompatible old code
2021-05-03 18:41:23 -05:00
Erin
72cd540728
Tidy up
2021-05-03 23:02:19 +02:00
Erin
798c1807db
Obeyed our paperclip overlord + fmt
2021-05-03 21:36:32 +02:00
Erin
30eedbc854
Fixed some incompatible old code
...
- Added assignment support
- Reduced boilerplate
- Removed `else`
2021-05-03 21:35:43 +02:00
Erin
29bf01935c
Variable assignment implemented
2021-05-03 09:54:27 +02:00
Able
e8a2b87c6e
Merge pull request #14 from erindesu/master
2021-05-03 02:17:38 -05:00
Erin
8c6f415ac9
Fixed #13
2021-05-03 08:47:52 +02:00
Able
e080fc65e3
Merge pull request #12 from erindesu/master
2021-05-02 12:49:30 -05:00
Erin
051f6e781f
Added tests and loop flow
2021-05-02 18:12:51 +02:00
Erin
ecce080378
Added T-Dark block
...
- obeyed clippy
2021-05-02 17:38:12 +02:00
Erin
5a8dd5051f
Parser production ready
...
- TODO: T-Dark block
- cargo fmt
- Obeyed our clippy overlord
2021-05-02 16:48:33 +02:00
Erin
c90d242b0f
Parser implements examples
...
- Function call is now stmt (muhehe)
2021-05-02 15:43:25 +02:00
Erin
18a1343e11
Added basic math operations
...
- cargo fmt
2021-05-02 00:39:08 +02:00
Erin
3794fd3c8f
Divided token types
...
- Item = Expr | Stmt
- Added REPL (AST dump)
- Removed operator parsing because it was horrible and I need to redo it
2021-05-01 13:44:58 +02:00
Erin
eef7ec16fa
Tidy up
2021-04-29 19:19:35 +02:00
Erin
ca60f818eb
Implemented function calls
2021-04-29 18:50:51 +02:00
Erin
17a32a8df7
Bugfix: Peeking
...
- Fixed `PeekableLexer` next to not-be passtrough to iterator
- Made error handling depend on state of Option
2021-04-29 09:47:29 +02:00
Erin
e45afeac5e
Added Peekable Lexer
...
- Added wrapper for Lexer with `peek()` method
- Renamed `token` module to `lexer` as it more describe it's function
- Started work on operator flow
2021-04-28 22:52:19 +02:00
Able
b4d3f0c9b6
Merge pull request #10 from erindesu/master
...
Reimplemented parser
2021-04-27 09:26:29 -05:00