lang: basic parser
This commit is contained in:
parent
ae86ae29ab
commit
ca84af4e1b
11 changed files with 362 additions and 33 deletions
36
crates/lang/src/parser/ast.rs
Normal file
36
crates/lang/src/parser/ast.rs
Normal file
|
@ -0,0 +1,36 @@
|
|||
use std::collections::{BTreeMap, HashMap};
|
||||
|
||||
use indexmap::IndexMap;
|
||||
|
||||
use super::Spanned;
|
||||
|
||||
#[derive(Debug, PartialEq, Eq)]
|
||||
pub struct File<'src> {
|
||||
pub decls: IndexMap<Spanned<&'src str>, Spanned<Expr<'src>>>,
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialEq, Eq)]
|
||||
pub enum Expr<'src> {
|
||||
Node(
|
||||
Spanned<&'src str>,
|
||||
Option<Spanned<IndexMap<Spanned<&'src str>, Expr<'src>>>>,
|
||||
),
|
||||
SimplePipe(Box<Expr<'src>>, Box<Expr<'src>>),
|
||||
NamingPipe(
|
||||
Box<Expr<'src>>,
|
||||
(Vec<Spanned<&'src str>>, Vec<Spanned<&'src str>>),
|
||||
Box<Expr<'src>>,
|
||||
),
|
||||
MappingPipe(Box<Expr<'src>>, Box<Expr<'src>>),
|
||||
NullPipe(Box<Expr<'src>>, Box<Expr<'src>>),
|
||||
MultiPipe(IndexMap<Spanned<&'src str>, Expr<'src>>),
|
||||
LetIn(
|
||||
IndexMap<Spanned<&'src str>, Box<Expr<'src>>>,
|
||||
Box<Expr<'src>>,
|
||||
),
|
||||
// $
|
||||
Var(Spanned<&'src str>),
|
||||
// @
|
||||
InputVar(Spanned<&'src str>),
|
||||
AttrSet(Spanned<IndexMap<Spanned<&'src str>, Expr<'src>>>),
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue