public Node Optional <T>(T category, SingleNodeCallback onSuccess, bool expect = false) { if (Has(category)) { if (expect) { Expect(category); } return(onSuccess()); } return(null); }
// Rename to the actual name of this concept when I remember what was it public Node LeftJoin<T>(Node leftmostNode, T category, SingleNodeCallback nextNodeCallback) { var lastNode = leftmostNode; while (Has(category)) { var node = Node.fromToken(Expect(category)); node.Add(lastNode); node.Add(nextNodeCallback()); lastNode = node; } return lastNode; }
public List<Node> ZeroOrMore<T>(T category, SingleNodeCallback onSuccess, bool expect = false) { var result_nodes = new List<Node>(); while (Has(category)) { if (expect) { Expect(category); } result_nodes.Add(onSuccess()); } return result_nodes; }