EBNF: nonterminals

This commit is contained in:
Greg Shuflin 2024-01-31 00:31:16 -08:00
parent 698e05081a
commit a55a806a60
1 changed files with 9 additions and 0 deletions

View File

@ -26,6 +26,7 @@ impl Representation {
#[derive(Debug)] #[derive(Debug)]
pub enum EBNF { pub enum EBNF {
None, None,
Nonterminal(String),
CharTerminal(char), CharTerminal(char),
Alternation(Vec<EBNF>), Alternation(Vec<EBNF>),
} }
@ -44,6 +45,7 @@ impl fmt::Display for EBNF {
} }
write!(f, "") write!(f, "")
} }
EBNF::Nonterminal(name) => write!(f, "{name}"),
} }
} }
} }
@ -62,5 +64,12 @@ mod tests {
]); ]);
assert_eq!(example.to_string(), "'f' | 'a' | 'k' | 'e'"); assert_eq!(example.to_string(), "'f' | 'a' | 'k' | 'e'");
let example = EBNF::Alternation(vec![
EBNF::Nonterminal("other-rule".into()),
EBNF::CharTerminal('q'),
EBNF::CharTerminal('m'),
]);
assert_eq!(example.to_string(), "other-rule | 'q' | 'm'");
} }
} }