Commit Graph

  • 5484d96e7d ast: Add the "Self" type in preparation for cl-typeck John 2024-02-27 22:48:24 -06:00
  • e3f08ac013 parser: Overhaul the semi-functional Parser::{delimited, separated, repeated} methods into real higher-order functions John 2024-02-27 22:46:36 -06:00
  • 978f5e40c1 conlang: Introduce type-alias/typedef syntax type T; | type T = U; John 2024-02-27 20:49:02 -06:00
  • 0c1b3bfe39 ast: Do not promise PartialOrd/Ord (breaking change) John 2024-02-27 20:41:15 -06:00
  • 87c8d43d11 grammar.ebnf: Fix ModuleKind grammar John 2024-02-26 16:19:21 -06:00
  • c36eec216a parser: Allow StmtKind to parse itself (whoops!) John 2024-02-26 16:03:18 -06:00
  • 66deb41301 grammar.ebnf: Sync changes with AST John 2024-02-26 16:02:36 -06:00
  • 9bde97942c ast: Enum variants can have no data, or have an associated integer. John 2024-02-26 15:59:15 -06:00
  • bb3eecd190 interpreter: Allow statements to choose their own return value (reduces code duplication) John 2024-02-26 15:53:45 -06:00
  • ffa313eea8 ast: Allow type specifier in let statement John 2024-02-26 15:49:55 -06:00
  • 490d320633 parser: allow end of input in binary and indexing operations. This improves robustness and correctness of implementation. John 2024-02-26 15:37:07 -06:00
  • 13995259aa parser: use different wording when the expected value was an operator vs an expression John 2024-02-26 15:35:07 -06:00
  • ae76df9c83 interpreter: Fix bug where a break instruction would instead signal a return from subroutine John 2024-02-26 15:33:47 -06:00
  • 1bfeeb1755 interpreter: shrink integers to pointer-size in temp type implementation, for speed John 2024-02-26 15:32:49 -06:00
  • 59b73f314a ast: Remove unary hash operator to reserve the symbol for use in attribute parsing John 2024-02-26 15:30:50 -06:00
  • cdf283064e ast: Improve ExprKind descriptions John 2024-02-26 15:25:49 -06:00
  • 2095bfec80 Lexer tests: import formatting John 2024-02-26 15:21:14 -06:00
  • 3f8c2b6267 ast: remove done TODOs John 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. John 2024-02-26 15:15:34 -06:00
  • 5e4e70a72e fibonacci.cl: Move the input number out of the string John 2024-02-26 15:11:28 -06:00
  • b8d70d3393 Cleanup: Break Loc out into a common module, rename WhileParsing => Parsing John 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 John 2024-01-21 05:32:18 -06:00
  • 5e2f365f45 conlang: deprecate the AST John 2024-01-21 01:34:40 -06:00
  • 6bb2f3774f interpreter: Add regression tests for operators and precedence John 2024-01-09 23:52:48 -06:00
  • d9d8c70556 interpreter: revert storing environments in functions This change broke recursion entirely John 2024-01-09 22:42:15 -06:00
  • 99ade72756 interpreter: fix variable resolution and assignment John 2024-01-09 22:39:58 -06:00
  • 56f0550829 resolver: remove unused, deprecated stack functions John 2024-01-09 21:04:28 -06:00
  • 15d7565703 token: Add new keywords in preparation for grammar update John 2024-01-06 14:32:56 -06:00
  • 77f7623041 resolver: Improve block scoping with a scope guard John 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 John 2024-01-05 22:47:16 -06:00
  • 54bae6a9c5 cl-frontend: update doc comment for new behavior John 2024-01-05 21:49:05 -06:00
  • 8d03b8a8eb ast: update todo John 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) John 2024-01-05 17:48:19 -06:00
  • 9eafae0757 resolver: Whoops! Commit early WIP resolver. John 2024-01-05 17:44:09 -06:00
  • 79fda16788 cl 0.0.2: MAJOR ERGONOMIC BOOST John 2024-01-04 02:18:09 -06:00
  • 9b7cf9c017 lexer: Add :: and #! tokens John 2023-10-30 19:17:03 -05:00
  • c3e02d21ad sample-code: Add some sample Conlang programs :D John 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 John 2023-10-30 00:07:27 -05:00
  • 374017d5e3 examples/interpret: Call main if loading from file John 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. John 2023-10-29 23:47:00 -05:00
  • f3306e7ba4 examples/format: Rename from parse_input John 2023-10-29 21:10:09 -05:00
  • 9a6eb6b0f1 examples/interpret: Improve the repl's UX somewhat John 2023-10-29 01:14:36 -05:00
  • 8fe89e6297 conlang: Variable binding and cleanup ast: Separate concerns, and remove Walk interpreter: implement variable binding John 2023-10-29 01:13:48 -05:00
  • 35d214c9f6 ast: Remove vestigial "ignore" in Expr John 2023-10-27 00:19:19 -05:00
  • ac540ebd22 parser: parse let statements - TODO: Type expressions token: Add mut keyword John 2023-10-27 00:18:02 -05:00
  • f3aad36f32 examples/interpret: Multi-line input support John 2023-10-26 22:33:31 -05:00
  • b906775006 dummy.cl: Remove "shebang comment" (lmao) John 2023-10-26 22:14:12 -05:00
  • e22b1b7bfd examples/interpret: Misc cleanup John 2023-10-26 22:13:48 -05:00
  • aead97e357 interpreter: Implement ranges and for loops John 2023-10-26 21:51:18 -05:00
  • 55070bcc41 ast: Improve documentation linking John 2023-10-26 17:56:02 -05:00
  • ed6917070c interpreter: fix comment John 2023-10-26 14:51:13 -05:00
  • 15a3d265df interpreter: Prototype interpreter TODO: Type-checking, floats, variables & scope TODO Later: A bytecode interpreter John 2023-10-26 14:48:44 -05:00
  • 9ab9583a5b parser: Reorder functions, add doc comments John 2023-10-26 14:41:59 -05:00
  • 0445598ae8 grammar: Remove Ignore expression to avoid parsing ambiguity :'( John 2023-10-26 14:36:55 -05:00
  • b1f90ca4e9 conlang: Add statements TODO: Parse let statements John 2023-10-26 14:33:56 -05:00
  • d1b5c48aac constr/lerox: remove John 2023-10-26 12:23:26 -05:00
  • 5c4c8bcb80 lexer: Consume invalid characters John 2023-10-25 19:28:54 -05:00
  • 32bde2f749 Minor documentation fixes John 2023-10-23 23:43:11 -05:00
  • 0e1beca43d Cargos.toml: wrong key ("publish") John 2023-10-23 23:42:39 -05:00
  • 9196d3b1da Add package metadata John 2023-10-23 21:38:06 -05:00
  • 1b14a43129 Add LICENSE John 2023-10-23 21:05:51 -05:00
  • a339dfd549 dummy.cl: Use unicode escape 🦈 John 2023-10-23 21:02:45 -05:00
  • 0e917837c0 identify_tokens: Use Display on token Data John 2023-10-23 21:02:09 -05:00
  • 8b1a1534f3 docs: Improve and update documentation John 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 John 2023-10-23 19:43:16 -05:00
  • 2d1b6d82db Update readme John 2023-10-22 18:41:10 -05:00
  • ccfddcc09a Conlang: Add range operators TODO: Limit range operators to at most 2 operands John 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 John 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. John 2023-10-21 12:24:52 -05:00
  • 4ec91ff806 constr: switch to Rust-style unicode parsing John 2023-10-21 12:20:22 -05:00
  • 1e5f7149d9 Token: Add range operators, rename for consistency John 2023-10-20 17:09:14 -05:00
  • 34525ec77a lexer: Only allow lines up to 4GB in size. Saves 8 bytes per token John 2023-10-20 15:34:54 -05:00
  • a26a01fc17 constr: Misuse iterators to parse tokens John 2023-10-20 15:33:02 -05:00
  • 7f7393d2c6 conlang: Grammatical cleanup; merge control flow expressions John 2023-10-19 14:40:03 -05:00
  • 331141356a tests: Move module into file John 2023-10-17 13:39:05 -05:00
  • 73f7337fd5 pretty_printer: Move module into file John 2023-10-17 13:38:30 -05:00
  • 59617d805a parser: Move module into file John 2023-10-17 13:36:21 -05:00
  • 3d0698ba60 lexer: Move module into file John 2023-10-17 13:33:07 -05:00
  • b1d9e4fd03 ast: Move module into file John 2023-10-17 13:30:16 -05:00
  • 5d9c45c26a token: Move module into file John 2023-10-17 13:23:34 -05:00
  • 71f43d852a readme.md: Clarify goals John 2023-10-16 23:01:09 -05:00
  • d6a80e4961 dummy.cl: Update to include while expressions John 2023-10-16 22:55:07 -05:00
  • b707bcef81 examples: Add parse_input REPL for fun! John 2023-10-16 22:51:59 -05:00
  • 8d1107cb57 Conlang: Add a pretty printer for the AST John 2023-10-16 22:51:07 -05:00
  • b89ed307a2 parser: Add recursive descent parser for AST. TODO: Error recovery and synchronization. John 2023-10-16 22:50:15 -05:00
  • 0a99a37bd8 ast: Disallow unused imports John 2023-10-16 22:47:16 -05:00
  • c7d1aa4d2c lexer: Make the Lexer IntoIter'able John 2023-10-16 22:46:38 -05:00
  • 2ce89eec82 lexer: unmatched delimiters? in my commits? Shame! Shame for a thousand years! John 2023-10-16 22:42:32 -05:00
  • 4870ff17ba Token: whoops, these fields need to be public (for now) John 2023-10-16 22:37:04 -05:00
  • 3866a2e9f2 libconlang: Define the AST (TODO: clean up the AST) John 2023-10-16 22:36:26 -05:00
  • cdb8c28e64 grammar.ebnf: Initial prototype grammar John 2023-10-16 22:33:38 -05:00
  • e4c827e429 Update .gitignore John 2023-10-16 22:32:22 -05:00
  • 8eb1f46a65 Update readme.md John 2023-10-16 22:32:06 -05:00
  • 1f0725d2c8 examples/identify_tokens.rs: Overhaul user experience John 2023-10-16 22:26:32 -05:00
  • 50bb03ae18 token/lexer: Keywords are identifiers. Add missing operators. Fix <<=/>>=. John 2023-10-16 22:25:48 -05:00
  • 9c993b31a1 token: Rename literal tokens & assoc. functions John 2023-10-16 22:14:08 -05:00
  • c15490847a token & lexer: add line & col to tokens John 2023-10-13 13:05:14 -05:00
  • 545483dae6 token: Add Display impl for Type John 2023-09-28 01:34:56 -05:00
  • 48f5e5248c conlang: Add break, true, false keywords, and example file John 2023-09-28 01:31:46 -05:00
  • f25685560a conlang: Tokenize punctuation (resolves #9) Things left to consider: - token::Type enum is getting fairly large. breaking it up could invoke substantial code bloat - Compound operators might make more sense at the parser level - Compound-assign operators are ripe for syntactic desugaring, but there must be some reason it's done separately in other languages. - Operators like FatArrow may still make sense at the tokenizer level, regardless. - What is a lexer? A miserable pile of parsers! - Operator overloading, or user-defined operators? Hmm... John 2023-09-28 00:11:31 -05:00