return self._add_rule(
name,
to_rule(transform()) if self._raw_pattern \
- else "\"\\\"\" " + to_rule(transform()) + " \"\\\"\" space")
+ else "\"\\\"\" (" + to_rule(transform()) + ") \"\\\"\" space")
def _resolve_ref(self, ref):
"pattern": "^abc?d*efg+(hij)?kl$"
})""",
R"""(
- root ::= "\"" "ab" "c"? "d"* "ef" "g"+ ("hij")? "kl" "\"" space
+ root ::= "\"" ("ab" "c"? "d"* "ef" "g"+ ("hij")? "kl") "\"" space
space ::= | " " | "\n" [ \t]{0,20}
)"""
});
"pattern": "^\\[\\]\\{\\}\\(\\)\\|\\+\\*\\?$"
})""",
R"""(
- root ::= "\"" "[]{}()|+*?" "\"" space
+ root ::= "\"" ("[]{}()|+*?") "\"" space
space ::= | " " | "\n" [ \t]{0,20}
)"""
});
"pattern": "^\"$"
})""",
R"""(
- root ::= "\"" "\"" "\"" space
+ root ::= "\"" ("\"") "\"" space
+ space ::= | " " | "\n" [ \t]{0,20}
+ )"""
+ });
+
+ test({
+ SUCCESS,
+ "regexp with top-level alternation",
+ R"""({
+ "type": "string",
+ "pattern": "^A|B|C|D$"
+ })""",
+ R"""(
+ root ::= "\"" ("A" | "B" | "C" | "D") "\"" space
space ::= | " " | "\n" [ \t]{0,20}
)"""
});
})""",
R"""(
dot ::= [^\x0A\x0D]
- root ::= "\"" ("(" root-1{1,3} ")")? root-1{3,3} "-" root-1{4,4} " " "a"{3,5} "nd" dot dot dot "\"" space
+ root ::= "\"" (("(" root-1{1,3} ")")? root-1{3,3} "-" root-1{4,4} " " "a"{3,5} "nd" dot dot dot) "\"" space
root-1 ::= [0-9]
space ::= | " " | "\n" [ \t]{0,20}
)"""