Skip to content

Commit 631fb69

Browse files
committed
Progress on grammar routines.
1 parent 6aed8e9 commit 631fb69

6 files changed

Lines changed: 534 additions & 761 deletions

File tree

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ regex-automata = "0.4.9"
1616
# candle-transformers = "0.9.1"
1717
# tokenizers = { version = "0.21.0", features = ["http"] }
1818
# hf-hub = "0.4.2"
19-
# rayon = "1.11.0"
19+
rayon = "1.11.0"
2020
# serde = "1.0.225"
2121
# serde_json = "1.0.145"
2222

src/ebnf.rs

Lines changed: 48 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -787,36 +787,54 @@ mod tests {
787787
use std::fs;
788788
extern crate test;
789789

790-
// #[test]
791-
// fn parse_simple_grammar() {
792-
// let parser = EBNFParser::new("s: c c\n c: \"C\" c | \"D\"", "s");
793-
// let Ok(grammar) = parser.parse() else {
794-
// panic!()
795-
// };
796-
// let expected_grammar = Grammar {
797-
// symbol_set: vec![
798-
// "__ANONYMOUS_LITERAL_C_1".to_string(),
799-
// "__ANONYMOUS_LITERAL_D_2".to_string(),
800-
// "c".to_string(),
801-
// "s".to_string(),
802-
// "$".to_string(),
803-
// ],
804-
// terminals: vec![
805-
// Terminal::new("__ANONYMOUS_LITERAL_C_1", "C", 0),
806-
// Terminal::new("__ANONYMOUS_LITERAL_D_2", "D", 0),
807-
// Terminal::new("$", "", 0),
808-
// ],
809-
// start_symbol: "s".to_string(),
810-
// productions: vec![
811-
// Production::new("s", vec!["c", "c"]),
812-
// Production::new("c", vec!["__ANONYMOUS_LITERAL_C_1", "c"]),
813-
// Production::new("c", vec!["__ANONYMOUS_LITERAL_D_2"]),
814-
// ],
815-
// ignore_terminals: vec![],
816-
// };
817-
818-
// assert_eq!(grammar, expected_grammar);
819-
// }
790+
#[test]
791+
fn parse_simple_grammar() {
792+
let parser = EBNFParser::new(
793+
r#"
794+
s: c c
795+
c: "C" c | "D"
796+
"#,
797+
"s",
798+
);
799+
let Ok(grammar) = parser.parse() else {
800+
panic!()
801+
};
802+
let expected_grammar = Grammar {
803+
start_symbol: Symbol::NonTerminal("s".to_string()),
804+
productions: vec![
805+
Production {
806+
lhs: Symbol::NonTerminal("s".to_string()).into(),
807+
rhs: vec![
808+
Symbol::NonTerminal("c".to_string()),
809+
Symbol::NonTerminal("c".to_string()),
810+
]
811+
.into(),
812+
},
813+
Production {
814+
lhs: Symbol::NonTerminal("c".to_string()).into(),
815+
rhs: vec![
816+
Symbol::NonTerminal("__ANONYMOUS_LITERAL_C_1".to_string()),
817+
Symbol::NonTerminal("c".to_string()),
818+
]
819+
.into(),
820+
},
821+
Production {
822+
lhs: Symbol::NonTerminal("c".to_string()).into(),
823+
rhs: vec![Symbol::NonTerminal("__ANONYMOUS_LITERAL_D_2".to_string())].into(),
824+
},
825+
Production {
826+
lhs: Symbol::NonTerminal("__ANONYMOUS_LITERAL_C_1".to_string()).into(),
827+
rhs: vec![Symbol::Terminal(67)].into(),
828+
},
829+
Production {
830+
lhs: Symbol::NonTerminal("__ANONYMOUS_LITERAL_D_2".to_string()).into(),
831+
rhs: vec![Symbol::Terminal(68)].into(),
832+
},
833+
],
834+
};
835+
836+
assert_eq!(grammar, expected_grammar);
837+
}
820838

821839
#[test]
822840
fn parse_tokipona_grammar() {

0 commit comments

Comments
 (0)