code: function Rule(rules) {
              this.rules = rules;
              // Identifies individual rule
              this.name = "";
              // Identifies the grammar that this rule belongs to 
              this.grammarName = "";
              // Identifies types of rules. Rules can have "types" that are different than the class name
              this.type = "";
              // Used to provide access to the name of the class 
              this.className = "Rule";
              // Indicates whether generated nodes should be added to the abstract syntax tree
              this._createAstNode = false;
              // A parser function, computed in a rule's constructor. If successful returns either the original or a new 
              // ParseState object. If it fails it returns null.
              this.parser = null;
              // A lexer function, computed in a rule's constructor. The lexer may update the ParseState if successful.
              // If it fails it is required that the lexer restore the ParseState index to the previous state. 
              // Lexers should only update the index. 
              this.lexer = null;
          }
docs: Constructor Note: child-rules are exposed as a public field