public static string VisitExpGroup(BfsExpGroup group, IBfsDataBlock owner)
{
StringBuilder b = new StringBuilder();
b.Append("(");
for (int i = 0; i < group.Members.Count; i++)
{
IBfsExpNode node = group.Members[i];
if (node is BfsExpGroup)
b.Append(VisitExpGroup(node as BfsExpGroup, owner));
else if (node is BfsExpressionVariable)
{
BfsExpressionVariable expVar = node as BfsExpressionVariable;
b.Append(owner.Name.ToLower());
foreach (IBfsNamedField namedField in expVar.NameHierarchy)
b.Append("." + namedField.Name);
//Only append this last reading into the enum type if the value is being compared against an EnumAliasExp
if ((group.Members.Count > i + 2 && group.Members[i + 2] is BfsEnumAliasExp)
|| (i >= 2 && group.Members[i - 2] is BfsEnumAliasExp))
b.Append("." + expVar.NameHierarchy[expVar.NameHierarchy.Count - 1]);
}
else if (node is BfsEnumAliasExp)
{
//TODO
BfsEnumAliasExp enumAliasExp = node as BfsEnumAliasExp;
b.Append(enumAliasExp.EnumBlock.Name + "." + enumAliasExp.EnumBlock.Name + "Enum." + enumAliasExp.Alias.Name);
}
else if (node is BfsLocalField)
{
BfsLocalField localField = node as BfsLocalField;
b.Append(localField.Name);
}
else
b.Append(" " + node + " ");
}
b.Append(")");
return b.ToString();
}