code: 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() // add the TableHeaderNode to the TableNode
                  ),
                  TableDivider(node),
                  Optional(
                          NodeSequence(
                                  TableRow(), push(1, new TableBodyNode()) && addAsChild(),
                                  ZeroOrMore(TableRow(), addAsChild())
                          ),
                          addAsChild() // add the TableHeaderNode to the TableNode
                  ),
                  // only accept as table if we have at least one header or at least one body
                  Optional(TableCaption(), addAsChild()),
                  !node.get().getChildren().isEmpty()
  
          );
      }
docs: ************* TABLES ****************