71 lines
1.7 KiB
C#
71 lines
1.7 KiB
C#
using System.Collections;
|
|
|
|
namespace Flee.Parsing
|
|
{
|
|
|
|
/**
|
|
* A production node. This class represents a grammar production
|
|
* (i.e. a list of child nodes) in a parse tree. The productions
|
|
* are created by a parser, that adds children a according to a
|
|
* set of production patterns (i.e. grammar rules).
|
|
*/
|
|
internal class Production : Node
|
|
{
|
|
private readonly ProductionPattern _pattern;
|
|
private readonly ArrayList _children;
|
|
|
|
public Production(ProductionPattern pattern)
|
|
{
|
|
this._pattern = pattern;
|
|
this._children = new ArrayList();
|
|
}
|
|
|
|
public override int Id => _pattern.Id;
|
|
|
|
public override string Name => _pattern.Name;
|
|
|
|
public override int Count => _children.Count;
|
|
|
|
public override Node this[int index]
|
|
{
|
|
get
|
|
{
|
|
if (index < 0 || index >= _children.Count)
|
|
{
|
|
return null;
|
|
}
|
|
else
|
|
{
|
|
return (Node)_children[index];
|
|
}
|
|
}
|
|
}
|
|
|
|
public void AddChild(Node child)
|
|
{
|
|
if (child != null)
|
|
{
|
|
child.SetParent(this);
|
|
_children.Add(child);
|
|
}
|
|
}
|
|
|
|
public ProductionPattern Pattern => _pattern;
|
|
|
|
public ProductionPattern GetPattern()
|
|
{
|
|
return Pattern;
|
|
}
|
|
|
|
internal override bool IsHidden()
|
|
{
|
|
return _pattern.Synthetic;
|
|
}
|
|
|
|
public override string ToString()
|
|
{
|
|
return _pattern.Name + '(' + _pattern.Id + ')';
|
|
}
|
|
}
|
|
}
|