lang: basic parser

This commit is contained in:
Schrottkatze 2024-04-03 00:08:00 +02:00
parent ae86ae29ab
commit ca84af4e1b
Signed by: schrottkatze
SSH key fingerprint: SHA256:hXb3t1vINBFCiDCmhRABHX5ocdbLiKyCdKI4HK2Rbbc
11 changed files with 362 additions and 33 deletions

View 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>>>),
}