Ejemplo n.º 1
0
            public void Assign(string name, int prec, AssocType assoc, bool user)
            {
                AssocGroup fixType = GetFixType(assoc);

                od           = triplet[(int)fixType];
                od.Name      = (name == "','") ? "," : name;
                od.Prec      = prec;
                od.Assoc     = assoc;
                od.User      = user;
                od.IsInfix   = (fixType == AssocGroup.Infix);
                od.IsPrefix  = (fixType == AssocGroup.Prefix);
                od.IsPostfix = (fixType == AssocGroup.Postfix);
                od.LeftRelOp = (assoc == AssocType.yfx || assoc == AssocType.fy || assoc == AssocType.yf)
                             ? RelOp.LE
                             : RelOp.LT;
                od.RightRelOp = (assoc == AssocType.xfy || assoc == AssocType.fy || assoc == AssocType.yf)
                             ? RelOp.LE
                             : RelOp.LT;

                // An operator can be either prefix or postfix, but not both. In addition, it can be infix.
                if (fixType == AssocGroup.Prefix)
                {
                    triplet[(int)AssocGroup.Postfix].Undefine();
                }
                else if (fixType == AssocGroup.Postfix)
                {
                    triplet[(int)AssocGroup.Prefix].Undefine();
                }
            }
Ejemplo n.º 2
0
            public void Unassign(string name, AssocType assoc)
            {
                AssocGroup fixType = GetFixType(assoc);

                od = triplet[(int)fixType];

                if (od == null || od.Assoc == AssocType.None)
                {
                    IO.Error("Operator '{0}' does not have an association type '{1}'", name, assoc);
                }

                triplet[(int)fixType].Undefine();
            }