lwb_parser/parser/peg/
parser_core_ast.rs

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