Skip to main content

oxilean_codegen/prolog_backend/
dcgrhs_traits.rs

1//! # DcgRhs - Trait Implementations
2//!
3//! This module contains trait implementations for `DcgRhs`.
4//!
5//! ## Implemented Traits
6//!
7//! - `Display`
8//!
9//! 🤖 Generated with [SplitRS](https://github.com/cool-japan/splitrs)
10
11use super::functions::fmt_dcg_seq;
12use super::types::DcgRhs;
13use std::fmt;
14
15impl fmt::Display for DcgRhs {
16    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
17        match self {
18            DcgRhs::NonTerminal(t) => write!(f, "{}", t),
19            DcgRhs::Terminals(ts) => {
20                write!(f, "[")?;
21                for (i, t) in ts.iter().enumerate() {
22                    if i > 0 {
23                        write!(f, ", ")?;
24                    }
25                    write!(f, "{}", t)?;
26                }
27                write!(f, "]")
28            }
29            DcgRhs::Epsilon => write!(f, "[]"),
30            DcgRhs::Goal(goals) => {
31                write!(f, "{{")?;
32                for (i, g) in goals.iter().enumerate() {
33                    if i > 0 {
34                        write!(f, ", ")?;
35                    }
36                    write!(f, "{}", g)?;
37                }
38                write!(f, "}}")
39            }
40            DcgRhs::Disjunction(a, b) => {
41                write!(f, "(")?;
42                fmt_dcg_seq(f, a)?;
43                write!(f, " ; ")?;
44                fmt_dcg_seq(f, b)?;
45                write!(f, ")")
46            }
47            DcgRhs::Seq(parts) => fmt_dcg_seq(f, parts),
48        }
49    }
50}