Add more expressions to parser, add EOL and newline tokens

* Lexer recognizes semicolons as EOL tokens, and newline tokens
* Parser can be configured to ignore newlines (which is also used
  internally)
* Newlines are allowed in lists, tuples, and parenthesized expressions
* Add a bunch of tests for the new stuff

Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
This commit is contained in:
2020-05-05 16:38:07 -04:00
parent d9edf21d16
commit a4f289fb53
6 changed files with 274 additions and 22 deletions

View File

@@ -3,10 +3,23 @@ use derivative::Derivative;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum Stmt {
Assign(Expr, Expr),
Assign(AssignStmt),
Expr(Expr),
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct AssignStmt {
pub lhs: Expr,
pub rhs: Expr,
pub span: Span,
}
impl Spanned for AssignStmt {
fn span(&self) -> Span {
self.span
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum Expr {
Base(BaseExpr),