Skip to main content

step_p21/parser/exchange/
reference.rs

1use crate::{
2    ast::*,
3    parser::{combinator::*, token::*},
4};
5use nom::Parser;
6
7/// reference_section = `REFERENCE;` [reference_list] `ENDSEC;` .
8pub fn reference_section(input: &str) -> ParseResult<'_, Vec<ReferenceEntry>> {
9    tuple_((tag_("REFERENCE;"), reference_list, tag_("ENDSEC;")))
10        .map(|(_start, list, _end)| list)
11        .parse(input)
12}
13
14/// reference_list = { [reference()] } .
15pub fn reference_list(input: &str) -> ParseResult<'_, Vec<ReferenceEntry>> {
16    many0_(reference).parse(input)
17}
18
19/// reference = [lhs_occurrence_name] `=` [resource] `;` .
20pub fn reference(input: &str) -> ParseResult<'_, ReferenceEntry> {
21    tuple_((lhs_occurrence_name, char_('='), resource, char_(';')))
22        .map(|(name, _def, resource, _semicolon)| ReferenceEntry {
23            name,
24            resource,
25        })
26        .parse(input)
27}