16 #region Using directives
35 internal Symbol m_nonTerminal;
36 internal Symbol[] m_symbols;
37 internal bool m_hasOneNonTerminal;
45 public Rule(
int index, Symbol nonTerminal, Symbol[] symbols)
48 m_nonTerminal = nonTerminal;
50 m_hasOneNonTerminal = (symbols.Length == 1)
51 && (symbols[0].SymbolType == SymbolType.NonTerminal);
59 get {
return m_index; }
67 get {
return m_nonTerminal; }
75 get {
return '<' + m_nonTerminal.Name +
'>'; }
83 get {
return m_symbols.Length; }
89 public Symbol
this[
int index]
91 get {
return m_symbols[index]; }
98 public bool ContainsOneNonTerminal
100 get {
return m_hasOneNonTerminal; }
106 public string Definition
110 StringBuilder result =
new StringBuilder();
111 for (
int i = 0; i < m_symbols.Length; i++)
113 result.Append(m_symbols[i].ToString());
114 if (i < m_symbols.Length - 1)
117 return result.ToString();
125 public override string ToString()
127 return Name +
" ::= " + Definition;