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

49 lines
1.2 KiB
Rust
Raw Normal View History

2024-04-03 00:08:00 +02:00
use std::collections::{BTreeMap, HashMap};
use indexmap::IndexMap;
2024-04-07 00:55:12 +02:00
use super::{Span, Spanned};
2024-04-03 00:08:00 +02:00
#[derive(Debug, PartialEq, Eq)]
pub struct File<'src> {
2024-04-07 00:55:12 +02:00
pub decls: IndexMap<Spanned<&'src str>, Expression<'src>>,
}
#[derive(Debug, PartialEq, Eq)]
pub struct Expression<'src> {
pub expr: Expr<'src>,
pub span: Span,
}
impl<'src> Expression<'src> {
pub fn new(expr: Expr<'src>, span: Span) -> Self {
Self { expr, span }
}
2024-04-03 00:08:00 +02:00
}
#[derive(Debug, PartialEq, Eq)]
pub enum Expr<'src> {
Node(
Spanned<&'src str>,
2024-04-07 00:55:12 +02:00
Option<Spanned<IndexMap<Spanned<&'src str>, Expression<'src>>>>,
2024-04-03 00:08:00 +02:00
),
2024-04-07 00:55:12 +02:00
SimplePipe(Box<Expression<'src>>, Box<Expression<'src>>),
2024-04-03 00:08:00 +02:00
NamingPipe(
2024-04-07 00:55:12 +02:00
Box<Expression<'src>>,
2024-04-03 00:08:00 +02:00
(Vec<Spanned<&'src str>>, Vec<Spanned<&'src str>>),
2024-04-07 00:55:12 +02:00
Box<Expression<'src>>,
2024-04-03 00:08:00 +02:00
),
2024-04-07 00:55:12 +02:00
MappingPipe(Box<Expression<'src>>, Box<Expression<'src>>),
NullPipe(Box<Expression<'src>>, Box<Expression<'src>>),
MultiPipe(IndexMap<Spanned<&'src str>, Expression<'src>>),
2024-04-03 00:08:00 +02:00
LetIn(
2024-04-07 00:55:12 +02:00
IndexMap<Spanned<&'src str>, Box<Expression<'src>>>,
Box<Expression<'src>>,
2024-04-03 00:08:00 +02:00
),
// $
2024-04-07 00:55:12 +02:00
Var(&'src str),
2024-04-03 00:08:00 +02:00
// @
2024-04-07 00:55:12 +02:00
InputVar(&'src str),
AttrSet(Spanned<IndexMap<Spanned<&'src str>, Expression<'src>>>),
2024-04-03 00:08:00 +02:00
}