lwb_parser/parser/peg/
parser_core_ast.rs1use 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 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}