iowo/crates/lang/src/parser/ast.rs

37 lines
965 B
Rust
Raw Normal View History

2024-04-03 00:08:00 +02:00
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>>>),
}