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
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
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
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
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
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
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
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
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
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
a26a01fc17
constr: Misuse iterators to parse tokens
2023-10-20 15:33:02 -05:00
7f7393d2c6
conlang: Grammatical cleanup; merge control flow expressions
2023-10-19 14:40:03 -05:00
331141356a
tests: Move module into file
2023-10-17 13:39:05 -05:00
73f7337fd5
pretty_printer: Move module into file
2023-10-17 13:38:30 -05:00
59617d805a
parser: Move module into file
2023-10-17 13:36:21 -05:00
3d0698ba60
lexer: Move module into file
2023-10-17 13:33:07 -05:00
b1d9e4fd03
ast: Move module into file
2023-10-17 13:30:16 -05:00
5d9c45c26a
token: Move module into file
2023-10-17 13:23:34 -05:00
8d1107cb57
Conlang: Add a pretty printer for the AST
2023-10-16 22:51:07 -05:00
b89ed307a2
parser: Add recursive descent parser for AST. TODO: Error recovery and synchronization.
2023-10-16 22:50:15 -05:00
0a99a37bd8
ast: Disallow unused imports
2023-10-16 22:47:16 -05:00
c7d1aa4d2c
lexer: Make the Lexer IntoIter'able
2023-10-16 22:46:38 -05:00
2ce89eec82
lexer: unmatched delimiters? in my commits? Shame! Shame for a thousand years!
2023-10-16 22:42:32 -05:00
4870ff17ba
Token: whoops, these fields need to be public (for now)
2023-10-16 22:37:04 -05:00
3866a2e9f2
libconlang: Define the AST (TODO: clean up the AST)
2023-10-16 22:36:26 -05:00
50bb03ae18
token/lexer: Keywords are identifiers. Add missing operators. Fix <<=/>>=.
2023-10-16 22:25:48 -05:00
9c993b31a1
token: Rename literal tokens & assoc. functions
2023-10-16 22:14:08 -05:00
c15490847a
token & lexer: add line & col to tokens
2023-10-13 13:05:14 -05:00
545483dae6
token: Add Display impl for Type
...
This improves readability in identify_tokens
2023-09-28 01:34:56 -05:00