summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJSDurand <mmemmew@gmail.com>2023-07-21 16:21:00 +0800
committerJSDurand <mmemmew@gmail.com>2023-07-21 16:21:00 +0800
commit201830e33ab5c45044e960217e0ac8803e3e134d (patch)
treeb5e2f6275cf3245cc155cfabaac91beab56df75a
parent659c2195d2c224122cc8da813bec3af46084b61b (diff)
Add variations to the test
Add an intentionally ambiguous grammar for testing purposes. It seems to work fine.
-rw-r--r--grammar/abnf grammars/test.abnf2
-rw-r--r--src/lib.rs7
-rw-r--r--src/test.c6
3 files changed, 11 insertions, 4 deletions
diff --git a/grammar/abnf grammars/test.abnf b/grammar/abnf grammars/test.abnf
index c960577..1c3a884 100644
--- a/grammar/abnf grammars/test.abnf
+++ b/grammar/abnf grammars/test.abnf
@@ -2,6 +2,8 @@ document = 1*( item )
item = header [ price ] *1( note )
+item =/ header [ price ] *1( note )
+
header = *1star "SP" title %xA *( "SP" / %xA )
title = 1*"TEXT"
diff --git a/src/lib.rs b/src/lib.rs
index b7252a3..7cc5223 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -32,6 +32,9 @@ impl Parser {
/// format.
pub fn new(s: &str) -> Result<Self, String> {
let grammar: Grammar = s.parse().map_err(|err| format!("{err}"))?;
+
+ println!("grammar: {grammar}");
+
let atom: DefaultAtom =
DefaultAtom::from_grammar(grammar).map_err(|err| format!("{err}"))?;
@@ -480,8 +483,8 @@ extern "C" fn parser_parse(
match forest {
Ok(forest) => {
- // use graph::Graph;
- // forest.print_viz("test forest.gv").unwrap();
+ use graph::Graph;
+ forest.print_viz("test forest.gv").unwrap();
Box::leak(parser_box);
diff --git a/src/test.c b/src/test.c
index 5a5118d..249eb87 100644
--- a/src/test.c
+++ b/src/test.c
@@ -23,6 +23,8 @@ main(int argc, char **argv)
"\n"
"item = header [ price ] *1( note )\n"
"\n"
+"item =/ header [ note ] *1( price )\n"
+"\n"
"header = *1star \"SP\" title %xA *( \"SP\" / %xA )\n"
"\n"
"title = 1*\"TEXT\"\n"
@@ -66,13 +68,13 @@ main(int argc, char **argv)
return EXIT_FAILURE;
}
- int input_unenc[10] = { 3, 0, 2, 2, 2, 1, 1, 1, 0, 1 };
+ int input_unenc[10] = { 3, 0, 2, 2, 2, 1, 5, 0, 6, 1 };
for (int i = 0; i < 10; i++)
to_big_endian(input_unenc[i], input + (8 * i));
unsigned char input_len[8] = { 0 };
- input_len[7] = 8*6;
+ input_len[7] = 8*10;
struct UnsignedVec input_vec =
(struct UnsignedVec) { input_len, NULL, input };