Test with multiple alternatives

This commit is contained in:
Niko Matsakis 2015-06-13 22:26:03 -04:00
parent 2186eed80b
commit 20bb505929
2 changed files with 12 additions and 5 deletions

View File

@ -26,7 +26,7 @@ rusty_peg! {
(<from:LITERAL>, "=>", <to:LITERAL>, ";") => (from, to);
NONTERMINAL: GrammarItem =
(<n:ID>, <t:[NONTERMINAL_TYPE]>, "=", <a:ALTERNATIVES>, ";") => {
(<n:ID>, <t:[NONTERMINAL_TYPE]>, "=", <a:ALTERNATIVES>) => {
GrammarItem::Nonterminal(NonterminalData { name: n,
type_decl: t,
alternatives: a })
@ -47,10 +47,10 @@ rusty_peg! {
(<a:ALTERNATIVE>) => vec![a];
ALTERNATIVESN: Vec<Alternative> =
("{", <a:{ALTERNATIVE}>, "}") => a;
("{", <a:{ALTERNATIVE}>, "}", ";") => a;
ALTERNATIVE: Alternative =
(<s:{SYMBOL_ARG}>, <a:[ACTION]>) => Alternative {
(<s:{SYMBOL_ARG}>, <a:[ACTION]>, ";") => Alternative {
expr: SymbolExpr { args: s },
action: a
};

View File

@ -47,7 +47,14 @@ fn token_expr() {
}
#[test]
fn map() {
assert!(parse_grammar(r#"grammar Foo { Expr = <n:Alt+> => { { foo } }; }"#).is_ok());
fn map1() {
assert!(parse_grammar(
r#"grammar Foo { Expr = <n:Alt+> => { { foo } }; }"#).is_ok());
}
#[test]
fn mapN() {
assert!(parse_grammar(
r#"grammar Foo { Expr = { Bar => { Baz }; X <n:Bar> => { Y }; }; }"#).is_ok());
}