Commit Graph

105 Commits

Author SHA1 Message Date
5e2f365f45 conlang: deprecate the AST 2024-01-21 01:34:40 -06:00
6bb2f3774f interpreter: Add regression tests for operators and precedence 2024-01-09 23:52:48 -06:00
d9d8c70556 interpreter: revert storing environments in functions
This change broke recursion entirely
2024-01-09 22:42:15 -06:00
99ade72756 interpreter: fix variable resolution and assignment 2024-01-09 22:39:58 -06:00
56f0550829 resolver: remove unused, deprecated stack functions 2024-01-09 21:04:28 -06:00
15d7565703 token: Add new keywords in preparation for grammar update 2024-01-06 14:32:56 -06:00
77f7623041 resolver: Improve block scoping with a scope guard 2024-01-06 14:32:06 -06:00
53f9ec2356 interpreter: use an explicit stack, rather than a cons list
Also gets rid of some dead code
2024-01-05 22:47:16 -06:00
54bae6a9c5 cl-frontend: update doc comment for new behavior 2024-01-05 21:49:05 -06:00
8d03b8a8eb ast: update todo 2024-01-05 21:47:36 -06:00
d387e4dfd7 interpreter: rewrite interpreter
- Remove interpreter struct
- Replace with `Interpret` trait
- This separates concerns dramatically! Yay!
- Implement block scoping via `Frame` abstraction
  - TODO: is this the right abstraction?
  - TODO: Modules??
  - TODO: What environment should be passed into a function call?
ast:
- rename Name.name to Name.symbol (name.name.name.name.name.name.name is very readable, yes yes)
2024-01-05 17:48:19 -06:00
9eafae0757 resolver: Whoops! Commit early WIP resolver. 2024-01-05 17:44:09 -06:00
79fda16788 cl 0.0.2: MAJOR ERGONOMIC BOOST
Broke frontend into its own library, "cl-frontend"
- Frontend is pretty :D
- Included sample fibonacci implementation

Deprecated conlang::ast::Visitor in favor of bespoke traits
- Rust traits are super cool.
- The Interpreter is currently undergoing a major rewrite

Added preliminary type-path support to the parser
- Currently incomplete: type paths must end in Never..?

Pretty printer is now even prettier
- conlang::ast now exports all relevant AST nodes, since there are no namespace collisions any more
2024-01-04 02:18:09 -06:00
9b7cf9c017 lexer: Add :: and #! tokens 2023-10-30 19:17:03 -05:00
c3e02d21ad sample-code: Add some sample Conlang programs :D 2023-10-30 00:23:43 -05:00
c1c834701a parser: Mockup type-expression syntax
- Allow `name: Type` notation for parameters
- Allow `fn x() -> RetVal` notation for return values
- TODO: Create syntax for type-expressions/paths
2023-10-30 00:07:27 -05:00
374017d5e3 examples/interpret: Call main if loading from file 2023-10-29 23:48:38 -05:00
ee5dabb4f3 Conlang: Implement functions 1.0 (Resolves #12)
- [x] Call syntax
- [x] Function declaration syntax
TODO:
- [ ] Any form of type checking
- [ ] Static variable resolution
- [ ] Closures, etc.
2023-10-29 23:47:00 -05:00
f3306e7ba4 examples/format: Rename from parse_input 2023-10-29 21:10:09 -05:00
9a6eb6b0f1 examples/interpret: Improve the repl's UX somewhat 2023-10-29 01:14:36 -05:00
8fe89e6297 conlang: Variable binding and cleanup
ast: Separate concerns, and remove Walk
interpreter: implement variable binding
2023-10-29 01:13:48 -05:00
35d214c9f6 ast: Remove vestigial "ignore" in Expr 2023-10-27 00:19:19 -05:00
ac540ebd22 parser: parse let statements
- TODO: Type expressions
token: Add `mut` keyword
2023-10-27 00:18:02 -05:00
f3aad36f32 examples/interpret: Multi-line input support 2023-10-26 22:33:31 -05:00
b906775006 dummy.cl: Remove "shebang comment" (lmao) 2023-10-26 22:14:12 -05:00
e22b1b7bfd examples/interpret: Misc cleanup 2023-10-26 22:13:48 -05:00
aead97e357 interpreter: Implement ranges and for loops 2023-10-26 21:51:18 -05:00
55070bcc41 ast: Improve documentation linking 2023-10-26 17:56:02 -05:00
ed6917070c interpreter: fix comment 2023-10-26 14:51:13 -05:00
15a3d265df interpreter: Prototype interpreter
TODO: Type-checking, floats, variables & scope
TODO Later: A bytecode interpreter
2023-10-26 14:48:44 -05:00
9ab9583a5b parser: Reorder functions, add doc comments 2023-10-26 14:41:59 -05:00
0445598ae8 grammar: Remove Ignore expression to avoid parsing ambiguity :'( 2023-10-26 14:36:55 -05:00
b1f90ca4e9 conlang: Add statements
TODO: Parse `let` statements
2023-10-26 14:33:56 -05:00
d1b5c48aac constr/lerox: remove 2023-10-26 12:23:26 -05:00
5c4c8bcb80 lexer: Consume invalid characters 2023-10-25 19:28:54 -05:00
32bde2f749 Minor documentation fixes 2023-10-23 23:43:11 -05:00
0e1beca43d Cargos.toml: wrong key ("publish") 2023-10-23 23:42:39 -05:00
9196d3b1da Add package metadata 2023-10-23 21:38:06 -05:00
1b14a43129 Add LICENSE 2023-10-23 21:05:51 -05:00
a339dfd549 dummy.cl: Use unicode escape 🦈 2023-10-23 21:02:45 -05:00
0e917837c0 identify_tokens: Use Display on token Data 2023-10-23 21:02:09 -05:00
8b1a1534f3 docs: Improve and update documentation 2023-10-23 21:01:32 -05:00
c43ecf00d1 token::token_data::Data: Renamed from token::TokenData
& Moved into its own module
+ Added token::preamble; common imports when working with Token
2023-10-23 19:43:16 -05:00
2d1b6d82db Update readme 2023-10-22 18:41:10 -05:00
ccfddcc09a Conlang: Add range operators
TODO: Limit range operators to at most 2 operands
2023-10-22 18:30:00 -05:00
b5abd2bff1 Lexer rewrite:
- Scan the input string *linearly*, without backtracking
  - Peek at most one character (unicode code-point) ahead
- Store data (unescaped string literals and chars, identifiers, integers, floats) inside Token
  - This unfortunately makes tokens non-Copy
- Refactor Parser to accommodate these changes
  - On the bright side, Parser no longer needs a reference to the text!
- Write a new set of lexer tests
  - TODO: write a new set of token tests using tokendata

Every day, we get closer to parsing `dummy.cl`!
2023-10-22 18:28:20 -05:00
feb5cc5dd0 AST: Refactor binary operations, fix Walk trait
- Unified math operations into a single self-referential enum
- Walk now visits the children of a node, rather than the node itself
  - The old behavior was super confusing, and led to numerous stack overflows.
2023-10-21 12:24:52 -05:00
4ec91ff806 constr: switch to Rust-style unicode parsing 2023-10-21 12:20:22 -05:00
1e5f7149d9 Token: Add range operators, rename for consistency 2023-10-20 17:09:14 -05:00
34525ec77a lexer: Only allow lines up to 4GB in size. Saves 8 bytes per token 2023-10-20 15:34:54 -05:00