oxilean_codegen/prolog_backend/
dcgrhs_traits.rs1use 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}