"use strict";
/** @fileOverview Implements `class page.BNFP.Rule extends page.BNF.Rule`.
* @author Axel T. Schreiner <ats@cs.rit.edu>
* @version 1.5.1
*/
/** Creates a new BNFP rule.
* @class Represents a BNFP rule.
* @extends page.BNF.Rule
* @private
*
* @param {page.BNF.NT} _nt left-hand side, non-terminal.
* @param {Node[]} _symbols right-hand side.
* @param {{level:number, assoc:string, t:page.BNF.T}|boolean} [_prec] precedence or `false`.
*
* @property {Object|boolean} prec precedence or `false`.
* @property {number} prec.level precedence level, from 0.
* @property {string} prec.assoc associativity, `'left'`, `'right'` or `'nonassoc'`.
* @property {page.BNF.T} prec.t terminal providing the precedence.
* @property {boolean} prec.explicit `true` if the precedence was explicitly assigned.
*/
page.BNFP.Rule = function (_nt, _symbols, _prec) {
page.BNF.Rule.call(this, _nt, _symbols);
this.prec = _prec;
};
page.subclass(page.BNFP.Rule, 'page.BNFP.Rule', page.BNF.Rule);
/** Displays a rule in BNF notation.
* @override
* @variation BNFP
*
* @param {number} [_mark] precedes a symbol on the right-hand side if it is in range.
*
* @returns {string}
*/
page.BNFP.Rule.prototype.toString = function (_mark) {
var result = page.BNF.Rule.prototype.toString.call(this, _mark);
return this.prec && this.prec.explicit && typeof _mark != 'number' ? result.replace(/.$/, ' %prec ' + this.prec.t + ';') : result;
};