var sq = syntax (e1=token ["a"] e2=token ["b"] {Seq (e1, e2)}), al = syntax (e=(token ["a"] | token ["b"]) {Alt (e)}), rp = syntax (e=token ["a"]* {Rep (e)}); printf ("%s\n", parseString (syntax (p=sq eof {p}), "ab").string); printf ("%s\n", parseString (syntax (p=al eof {p}), "a").string); printf ("%s\n", parseString (syntax (p=al eof {p}), "b").string); printf ("%s\n", parseString (syntax (p=rp eof {p}), "aaa").string)