///|
fn main raise {
let grammar = b"message = message / \r\n"
let bindings : Array[@abnf.ProseBinding] = [
{ name: "greeting", predicate: @abnf.Words([[0x4F60, 0x597D]]), },
{ name: "emoji", predicate: @abnf.SymbolRange(0x1F600, 0x1F64F), },
]
let program = @abnf.compile_scalar(grammar, bindings~).unwrap()
let input = [0x4F60, 0x597D, 0x1F600]
let result = program.parse_input("message", input).unwrap()
assert_eq(result.status, @abnf.Matched)
let tree = result.tree.unwrap()
assert_eq(tree.extract(input, tree.root), Some(input))
println("Matched 3 Unicode scalars; grammar source offsets remain bytes.")
println(
"This local candidate uses explicit prose bindings, not natural-language inference.",
)
}