public Rule Table() {
Var<TableNode> node = new Var<TableNode>();
return NodeSequence(
push(node.setAndGet(new TableNode())),
Optional(
NodeSequence(
TableRow(), push(1, new TableHeaderNode()) && addAsChild(),
ZeroOrMore(TableRow(), addAsChild())
),
addAsChild()
),
TableDivider(node),
Optional(
NodeSequence(
TableRow(), push(1, new TableBodyNode()) && addAsChild(),
ZeroOrMore(TableRow(), addAsChild())
),
addAsChild()
),
Optional(TableCaption(), addAsChild()),
!node.get().getChildren().isEmpty()
);
}