Commit graph

132 commits

Author SHA1 Message Date
Alex Bethel bdb32c4599 Remove 0..0 placeholder from unexpected_eof() 2021-06-07 20:03:26 -05:00
Alex Bethel dfededfe26 Fix all 0..0 span placeholders in interpret.rs 2021-06-07 19:57:44 -05:00
Alex Bethel b6a4ecba29 Fix unit tests 2021-06-07 17:35:49 -05:00
Alex Bethel aedeeb2512 Remove giant comment block left in by mistake 2021-06-07 16:28:27 -05:00
Alex Bethel 3bca3f88a6 Repair interpreter after parser changes 2021-06-07 16:20:20 -05:00
Erin 717d592710 Added T-Dark test 2021-06-07 23:06:13 +02:00
Erin 84f58dab3d Added tests, Bugfix
- Originally, it spanned from operator (bug)
2021-06-07 22:58:28 +02:00
Erin 99ebd71dac Added missing mut 2021-06-07 22:24:43 +02:00
Erin 7b1546387e Unified span terminology
- Add more derivations, because it's required by another parts of project
2021-06-07 22:21:21 +02:00
Erin beffef80c6 Changed position terminology 2021-06-07 21:28:24 +02:00
Erin 17a7f33c0b Removed unwraps, added Rlyeh 2021-06-07 11:07:50 +02:00
Erin 42df59705b Implement function calls
- And printing
- Revised terminology in Lexer
- Control flow
2021-06-07 11:00:06 +02:00
Erin f0cd6cd0ad Added logical operators 2021-06-07 09:17:30 +02:00
Erin 927ad5e955 Binary operator boilerplate reduction 2021-06-07 09:17:18 +02:00
Erin afee5fb82d Added basic parsing
- Expressions
- If, Functio
2021-06-07 00:09:45 +02:00
Erin d66874624b Initial chthulic error impl in Lexer
- See discussions #17
2021-06-06 23:15:11 +02:00
Erin b9d10fae03 AST revamp
- Unified terminology of span in error.rs
2021-06-06 23:13:48 +02:00
Erin e5c6feacb9 Updated AST 2021-06-06 21:09:18 +02:00
Erin bccf5bc74b Removed custom Lexer, reorganised Token definition
- As peeking will not be involved in parsing, it was removed
2021-06-06 20:28:13 +02:00
Erin 935ba3b791 Deleted old parser 2021-06-06 20:05:18 +02:00
Alex Bethel 08b4fff20d Correct spelling of "occurred" 2021-06-05 08:50:20 -05:00
Alex Bethel 2cb915dd24 Prettier error handling 2021-06-04 18:56:26 -05:00
Alex Bethel 98b2fae6f3 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 d80f47716d 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 2c35691ec4 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 b3866eea9e 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 d13c22a473 More thorough unit tests 2021-05-30 13:32:29 -05:00
Alex Bethel 7bfefd3ba1 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
Alex Bethel fcfa83a8a6 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 00e80e9740 Use single-letter identifiers as base-55 digits 2021-05-29 10:45:39 -05:00
Alex Bethel 51db37f1fe 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 7537b4ac98 Implement break and hopback statements 2021-05-25 21:22:38 -05:00
Alexander Bethel e7560f9364 Better abstractions, implement scoping rules 2021-05-25 13:26:01 -05:00
Alexander Bethel 1c2032ab87 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 b37c189da9 Slightly more curse 2021-05-24 01:18:36 -05:00
Alexander Bethel e79fc9a005 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 464337bd53 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 e31b8fb00d 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
tdark 1306c797c8 Added support for specifying a tape size limit 2021-05-15 18:39:49 +02:00
tdark 99758a177b Implemented brainfuck interpreter 2021-05-15 18:10:50 +02:00
able fafe6cf672 consider using able brand products 2021-05-05 07:33:40 -05:00
able ac88a2e3c6 Brain fuck work 2021-05-04 22:23:17 -05:00
able f98c4d83d9 Minor Changes 2021-05-03 19:33:21 -05:00
Erin 1618262948 Tidy up 2021-05-03 23:02:19 +02:00
Erin 5bdbc2bbb0 Obeyed our paperclip overlord + fmt 2021-05-03 21:36:32 +02:00
Erin 7057c3cfef Fixed some incompatible old code
- Added assignment support
- Reduced boilerplate
- Removed `else`
2021-05-03 21:35:43 +02:00
Erin c0ecf5f2a3 Variable assignment implemented 2021-05-03 09:54:27 +02:00
Erin 4b2d306ccb Fixed #13 2021-05-03 08:47:52 +02:00
Erin d80b5514ce Added tests and loop flow 2021-05-02 18:12:51 +02:00
Erin f8db60bc7c Added T-Dark block
- obeyed clippy
2021-05-02 17:38:12 +02:00
Erin ecd972e55d Parser production ready
- TODO: T-Dark block
- cargo fmt
- Obeyed our clippy overlord
2021-05-02 16:48:33 +02:00
Erin 4a9b656093 Parser implements examples
- Function call is now stmt (muhehe)
2021-05-02 15:43:25 +02:00
Erin 91bd015e9b Added basic math operations
- cargo fmt
2021-05-02 00:39:08 +02:00
Erin d7cf1b013d 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 c26c4a14bb Tidy up 2021-04-29 19:19:35 +02:00
Erin 5c00446c59 Implemented function calls 2021-04-29 18:50:51 +02:00
Erin 27a8de70fa 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 3e019621b2 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
Erin 00a464321a Added parsing of conditionals 2021-04-27 13:48:56 +02:00
Erin fc8c3a3499 Made parser to throw error when unexpected EOF 2021-04-27 11:57:11 +02:00
Erin 2a0b2952d4 Redone original parser
= implemented original features
2021-04-27 11:49:07 +02:00
Erin 138b9efadc Added testing for base55, new identifier lexing 2021-04-27 11:09:19 +02:00
Erin 83c549607c Continue work on parser, improved lexer
- Added literal parsing (improved lexing)
- Revised error handling
2021-04-27 10:51:39 +02:00
Erin 47400ee2ce Starting work on parser improvements
- Parser should parse single expressions
2021-04-26 10:44:42 +02:00
Erin f7d1287fd5 Implemented abool
- Tidied up code
2021-04-18 23:40:41 +02:00
Erin 3e2dc5fba9 Added function/variable parsing
- Added block support
- TODO: Tidy it up
2021-04-18 22:33:55 +02:00
Erin 7026711b64 Initial parser work 2021-04-18 16:39:43 +02:00
able 08af75fbda variable things added 2021-04-13 18:01:19 -05:00
Erin 4ca017671c clippy + fmt 2021-04-13 17:43:54 +02:00
Erin 406c6b1297 Improved Scanner 2021-04-13 17:40:20 +02:00
Erin 2194e2726f Added tokenization
- Added tokenization
- Modified `Token` definition for make it compatible with Logos
- And also obeyed our paperclip overlord and changed all names to be complaint with Rust conventions
2021-04-12 20:20:45 +02:00
able 00cca9fc74 Merge branch 'master' of https://github.com/AbleTheAbove/able-lang
merge
2021-04-11 22:40:32 -05:00
able 607b51c6cb abbolean change 2021-04-11 21:47:10 -05:00
ondra05 b062b9a216 Add ANSWER const 2021-04-12 01:02:08 +02:00
able 2c4154025f Tokens added or something 2021-04-11 17:22:06 -05:00
able 6719d955e8 Worst best parser 2021-04-11 15:11:23 -05:00
able abd2d7e5f8 more fixes 2021-04-11 14:18:41 -05:00
able b96bba96de damn ablelang 2021-04-11 14:11:39 -05:00
able c81fa06641 License and constants added 2021-04-11 13:22:59 -05:00
able 18354befd1 More representative of base_55 as it should be 2021-04-11 11:59:26 -05:00
able 1e701f73ab added base 55 2021-04-11 11:47:35 -05:00
able cc66d0b63a AbleLang is coming together boys :) and girls and enby pals 2021-04-08 16:11:20 -05:00