1bfeeb1755
interpreter: shrink integers to pointer-size in temp type implementation, for speed
2024-02-26 15:32:49 -06:00
59b73f314a
ast: Remove unary hash operator to reserve the symbol for use in attribute parsing
2024-02-26 15:30:50 -06:00
cdf283064e
ast: Improve ExprKind descriptions
2024-02-26 15:25:49 -06:00
2095bfec80
Lexer tests: import formatting
2024-02-26 15:21:14 -06:00
3f8c2b6267
ast: remove done TODOs
2024-02-26 15:20:33 -06:00
77db95791a
cl-frontend: Improve the line-editing capabilities in REPL mode.
...
- Note: This adds a dependency on Crossterm, to set the terminal into raw mode. This could be eliminated by linking the libraries Crossterm uses directly... Or I could embrace Crossterm, and use it for all escape sequences in the terminal, instead of assuming DEC VT500 compatibility.
2024-02-26 15:15:34 -06:00
5e4e70a72e
fibonacci.cl: Move the input number out of the string
2024-02-26 15:11:28 -06:00
b8d70d3393
Cleanup: Break Loc out into a common module, rename WhileParsing => Parsing
2024-01-23 01:51:00 -06:00
c4a32895df
conlang 0.3.0: Total grammar overhaul
...
- Rewrote the grammar
- Rewrote the AST
- Rewrote the Parser
- Removed pretty printer (now handled by ast::ast_impl::Pretty, a Writer wrapper)
- Added items, and new keywords to go with them
- Syntax is ~maybe temporary, based on Rust syntax
2024-01-21 05:32:18 -06:00
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