use std::ops::Range; use crate::lexer::Spanned; #[derive(Clone, Debug)] pub struct Tuple<'a>(pub Vec>>); #[derive(Clone, Debug)] pub enum Symbol<'a> { Epsilon, Ident(&'a str), } #[derive(Clone, Debug)] pub enum Dest<'a> { Ident(&'a str), Function(Spanned<&'a str>, Spanned>), } #[derive(Clone, Debug)] pub enum Item<'a> { Symbol(Symbol<'a>), Tuple(Tuple<'a>), List(List<'a>), } #[derive(Clone, Debug)] pub enum Regex<'a>{ Terminal(&'a str), Match{ complement: bool, patterns: Vec> }, Concat(Vec>), Star(Box>), Plus(Box>), Union(Vec>), Intersection(Vec>), Complement(Box>), } #[derive(Clone, Debug)] pub struct List<'a>(pub Vec>>); #[derive(Clone, Debug)] pub enum TopLevel<'a> { Assignment(Spanned>, Spanned>), ProductionRule(Spanned>, Spanned>), Table(), }