public virtual IList<Grammar> GetGrammarAncestors()
{
Grammar root = GetOutermostGrammar();
if (this == root)
return null;
IList<Grammar> grammars = new List<Grammar>();
// walk backwards to root, collecting grammars
Grammar p = this.parent;
while (p != null)
{
grammars.Insert(0, p); // add to head so in order later
p = p.parent;
}
return grammars;
}