internal virtual void CheckForTypeMismatch(LabelElementPair prevLabelPair, LabelElementPair labelPair)
{
// label already defined; if same type, no problem
if (prevLabelPair.type != labelPair.type)
{
string typeMismatchExpr = labelPair.type + "!=" + prevLabelPair.type;
errMgr.GrammarError(
ErrorType.LABEL_TYPE_CONFLICT,
g.fileName,
labelPair.label.Token,
labelPair.label.Text,
typeMismatchExpr);
}
if (!prevLabelPair.element.Text.Equals(labelPair.element.Text) &&
(prevLabelPair.type.Equals(LabelType.RULE_LABEL) || prevLabelPair.type.Equals(LabelType.RULE_LIST_LABEL)) &&
(labelPair.type.Equals(LabelType.RULE_LABEL) || labelPair.type.Equals(LabelType.RULE_LIST_LABEL)))
{
string prevLabelOp = prevLabelPair.type.Equals(LabelType.RULE_LIST_LABEL) ? "+=" : "=";
string labelOp = labelPair.type.Equals(LabelType.RULE_LIST_LABEL) ? "+=" : "=";
errMgr.GrammarError(
ErrorType.LABEL_TYPE_CONFLICT,
g.fileName,
labelPair.label.Token,
labelPair.label.Text + labelOp + labelPair.element.Text,
prevLabelPair.label.Text + prevLabelOp + prevLabelPair.element.Text);
}
}