else if ("/".equals(head)) return ((PreSequence)walk(tree, 0)).sparse((Element)walk(tree, 1));
else if ("~".equals(head)) return new Hack(new Atom.Invert(new Atom.Infer((Element)walk(tree, 0))));
else if ("ps".equals(head)) return new PreSequence((Element[])walk(tree,0));
- else if ("qprod".equals(head)) {
+ else if ("ps2".equals(head)) {
+ return (new PreSequence((Element[])walk(tree,0))).sparse((Element)walk(tree, 1));
+ } else if ("qprod".equals(head)) {
String s = string(tree.child(0));
return new PreSequence(new Element[] { string(s) }, s, new boolean[] { true }).buildSequence();
} else if ("[".equals(head)) {
| Sequence ^"&~" Elements /ws
Elements ::= e*/ws
-ps ::= Elements => "ps"
-psy ::= ps
- | ps !wp ^"/" !ws e
+psy ::= Elements => "ps"
+ | Elements !wp "/" !ws e => "ps2"
psx ::= psy => "psy"
| psy ^"->" e /ws
Sequence ::= Quoted => "qprod"