1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
use crate::sources::character_class::CharacterClass;
use crate::sources::span::Span;
use std::collections::HashMap;
#[derive(Debug, Clone)]
pub enum CoreExpression<'src> {
Name(&'src str),
Sequence(Vec<CoreExpression<'src>>),
Repeat {
subexpr: Box<CoreExpression<'src>>,
min: u64,
max: Option<u64>,
},
CharacterClass(CharacterClass),
Choice(Vec<CoreExpression<'src>>),
FlagNoLayout(Box<CoreExpression<'src>>),
FlagNoErrors(Box<CoreExpression<'src>>, String),
}
#[derive(Debug, Clone)]
pub struct CoreAst<'src> {
pub sorts: HashMap<&'src str, CoreExpression<'src>>,
pub starting_sort: &'src str,
}
#[derive(Debug, Clone)]
pub enum ParsePairRaw {
Name(Span, Box<ParsePairRaw>),
List(Span, Vec<ParsePairRaw>),
Choice(Span, usize, Box<ParsePairRaw>),
Empty(Span),
Error(Span),
}
impl ParsePairRaw {
pub fn span(&self) -> Span {
match self {
ParsePairRaw::Name(span, _) => span,
ParsePairRaw::List(span, _) => span,
ParsePairRaw::Choice(span, _, _) => span,
ParsePairRaw::Empty(span) => span,
ParsePairRaw::Error(span) => span,
}
.clone()
}
}