lib/rules.js
function Sym(name) {
  let symbol = {};
  symbol.__proto__ = Sym.prototype;
  symbol.name = name;
  return symbol;
}
function Sym(name) {
  let symbol = {};
  symbol.__proto__ = Sym.prototype;
  symbol.name = name;
  return symbol;
}
function Sym ( name ) { let symbol = { } ; symbol . __proto__ = Sym . prototype ; symbol . name = name ; return symbol ; }
Constructor for the Sym class, which simply represents a non-terminal symbol
in a grammar. While parsing, Syms are compared by reference, not by name. So,
the name argument is optional as it serves no purpose for parsing. For
debugging and evaluation of a parse tree, however, the name could be quite
useful

@class Sym
@constructor
@memberof module:lib/rules
@param {string=} name - Name to give to the newly created symbol. Names do not
need to be unique among Syms in a grammar, as they are not used to compare
equality
Constructor for the Sym class which simply represents a non - terminal symbol in a grammar . While parsing Syms are compared by reference not by name . So the name argument is optional as it serves no purpose for parsing . For debugging and evaluation of a parse tree however the name could be quite useful