Flee
This commit is contained in:
70
Parsing/Production.cs
Normal file
70
Parsing/Production.cs
Normal file
@@ -0,0 +1,70 @@
|
||||
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 + ')';
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user