Commit Graph

16 Commits

Author SHA1 Message Date
rvcas ab3a418b9c feat(parser): add support for and/or chaining 2023-08-15 09:58:35 -04:00
rvcas 69fdee9f7e fix: trace expr 2023-07-15 20:08:16 -04:00
rvcas 2edfd33594 fix: some attempted adjustments 2023-07-15 20:08:16 -04:00
rvcas 1ab1ff9a1f feat: rename error to fail 2023-07-12 09:16:37 -04:00
KtorZ 78d34f7f76 Fix parsing of negative int patterns and constants
This was trickier than expected as the expression parser, and in particular the bin-op parser will interpret negative patterns as a continuation of a binary operation and eventually choke on the next right-arrow symbol. This is due to how we actually completely erase newlines once we're done with the lexer. The newline separating when clause is actually semantically important. In principle, we could only parse an expression until the next newline.

  Ideally, we would keep that newline in the list of token but it's difficult to figure out which newline to keep between two right arrows since a clause guard can be written over multiple lines. Though, since we know that this is only truly a problem for negative integers, we can use the same trick as for tuples and define a new 'NewLineMinus' token. That token CANNOT be part of a binop expression. That means it's impossible to write a binary operation with a minus over multiple lines, or more specifically, with the '-' symbol on a newline. This sounds like a fair limitation. What we get in exchange is less ambiguity when parsing patterns following expressions in when clause cases.

  Another more cumbersome option could be to preserve the first newline encountered after a 'right-arrow' symbol and before any parenthesis or curly brace is found (which would otherwise signal the beginning of a new block). That requires to traverse, at least partially, the list of tokens twice. This feels unnecessary for now and until we do face a similar issue with a binary operator.
2023-07-06 16:10:46 -04:00
KtorZ 346df47232 Refactor chain parser
The main goal is to make the parser more reusable to be used for when-clauses, instead of the expression parser. A side goal has been to make it more readable by moving the construction of some untyped expression as method on UntypedExpr. Doing so, I got rid of the extra temporary 'ParseArg' type and re-used the generic 'CallArg' instead by simply using an Option<UntypedExpr> as value to get the same semantic as 'ParseArg' (which would distinguish between plain call args and holes). Now the chained parser is in a bit more reusable state.
2023-07-06 16:10:46 -04:00
KtorZ ed85cb1c00
Fix todo/error parsing
This was a bit more tricky than anticipated but played out nicely in
  the end. Now we have one holistic way of parsing todos and errors
  instead of it being duplicated between when/clause and sequence. The
  error/todo parser has been moved up to the expression part rather than
  being managed when parsing sequences. Not sure what motivated that to
  begin with.

  Fixes #621.
2023-07-05 20:12:57 +02:00
KtorZ a306d6e9f2
Move chain and chained parsing into their own submodule
Alleviate a bit more the top-level expression parser. Note that we
probably need a bit more disciplined in what we export and at what level
because there doesn't seem to be much logic as for whether a parser is
private, exported to the crate only or to the wide open. I'd be in favor
of exporting everything by default.
2023-07-05 15:18:07 +02:00
KtorZ 4f6defcf3e
rename: 'r' → 'expression' & 'seq_r' → 'sequence'
Better readability.
2023-07-05 14:42:14 +02:00
KtorZ e15cdaf248
Move 'utils::bytearray' to 'expr/bytearray' 2023-07-05 14:10:47 +02:00
rvcas 5e8edcb340
test(parser): finish moving tests to their correct modules 2023-07-04 17:48:48 -04:00
rvcas 2226747dc1
feat: finish splitting up parsers 2023-07-04 17:19:28 -04:00
rvcas eea94fc9a4
feat: move anon fn, let, and expect 2023-07-04 17:19:28 -04:00
rvcas 9c98fc8026
feat: start splitting apart expr_parser 2023-07-04 17:19:28 -04:00
rvcas e3ed5d3b00
feat: move expr_parser and remove module.rs to definitions 2023-07-04 17:19:28 -04:00
rvcas 3339d41fdd
feat: finish moving definitions and start exprs 2023-07-04 17:19:27 -04:00