UNPKG

1.64 kBJavaScriptView Raw
1import RRDiagram from '../ui/rrdiagram';
2import GrammarToBNF from './grammartobnf';
3import Expression from './expression';
4import GrammarToRRDiagram from './grammartorrdiagram';
5
6export default class Rule {
7
8 /**
9 * @param {string} name
10 * @param {Expression} expression
11 * @param {?string} originalExpressionText
12 */
13 constructor(name, expression, originalExpressionText) {
14 this.name = name;
15 this.expression = expression;
16 this.originalExpressionText = originalExpressionText;
17 }
18
19 /**
20 * @return {string}
21 */
22 getName() {
23 return this.name;
24 }
25
26 /**
27 * @return {?string}
28 */
29 getOriginalExpressionText() {
30 return this.originalExpressionText;
31 }
32
33 /**
34 * @param {GrammarToRRDiagram} grammarToRRDiagram
35 * @return {RRDiagram}
36 */
37 toRRDiagram(grammarToRRDiagram) {
38 return new RRDiagram(this.expression.toRRElement(grammarToRRDiagram));
39 }
40
41 /**
42 * @param {GrammarToBNF} grammarToBNF
43 * @return {string}
44 */
45 toBNF(grammarToBNF) {
46 const sb = [];
47 sb.push(this.name, " ");
48 switch (grammarToBNF.ruleDefinitionSign) {
49 case GrammarToBNF.RuleDefinitionSign.EQUAL: sb.push("="); break;
50 case GrammarToBNF.RuleDefinitionSign.COLON_EQUAL: sb.push(":="); break;
51 case GrammarToBNF.RuleDefinitionSign.COLON_COLON_EQUAL: sb.push("::="); break;
52 }
53 sb.push(" ");
54 this.expression.toBNF(grammarToBNF, sb, false);
55 sb.push(";");
56 return sb.join("");
57 }
58
59}