void Execute_RelativeExpr(out NBase res) {
  res = null;
  if (StartOf(6)) {
   RelativeExpr(out res);
  } else if (la.kind == 68) {
   Get();
   res = new NRelative(t.val, null, NRelative.NKind.Parameter);
  } else SynErr(90);
 }
 void Back_RelativeValueExpr(out NBase res) {
  res = null;
  if (la.kind == 66) {
   Get();
  } else if (la.kind == 67) {
   Get();
  } else SynErr(88);
  res = new NRelative(t.val, null, NRelative.NKind.Value);
 }
 void Event_RelativeExpr(out NBase res) {
  res = null;
  if (StartOf(6)) {
   RelativeExpr(out res);
  } else if (la.kind == 69) {
   Get();
   res = new NRelative(t.val, null, NRelative.NKind.Sender);
  } else if (la.kind == 70) {
   Get();
   res = new NRelative(t.val, null, NRelative.NKind.Args);
  } else SynErr(92);
 }
示例#4
0
        void RelativeExpr(out NBase res)
        {
            res = null;
            switch (la.kind)
            {
            case 42:
            case 43: {
                if (la.kind == 42)
                {
                    Get();
                }
                else
                {
                    Get();
                }
                res = new NRelative(t.val, null, NRelative.NKind.Context);
                break;
            }

            case 44:
            case 45: {
                if (la.kind == 44)
                {
                    Get();
                }
                else
                {
                    Get();
                }
                res = new NRelative(t.val, null, NRelative.NKind.Self);
                break;
            }

            case 46:
            case 47: {
                if (la.kind == 46)
                {
                    Get();
                }
                else
                {
                    Get();
                }
                res = new NRelative(t.val, null, NRelative.NKind.Parent);
                break;
            }

            case 48:
            case 49: {
                if (la.kind == 48)
                {
                    Get();
                }
                else
                {
                    Get();
                }
                res = new NRelative(t.val, null, NRelative.NKind.Element);
                Expect(40);
                Expect(1);
                ((NRelative)res).ElementName = t.val;
                Expect(41);
                break;
            }

            case 50:
            case 51: {
                if (la.kind == 50)
                {
                    Get();
                }
                else
                {
                    Get();
                }
                res = new NRelative(t.val, null, NRelative.NKind.Resource);
                Expect(40);
                Expect(1);
                ((NRelative)res).ResourceName = t.val;
                Expect(41);
                break;
            }

            case 52: {
                Get();
                res = new NRelative(t.val, null, NRelative.NKind.Reference);
                Expect(40);
                Expect(1);
                ((NRelative)res).ReferenceName = t.val;
                Expect(41);
                break;
            }

            case 53:
            case 54: {
                if (la.kind == 53)
                {
                    Get();
                }
                else
                {
                    Get();
                }
                res = new NRelative(t.val, null, NRelative.NKind.Ancestor); NBase type;
                Expect(40);
                TypeExpr(out type);
                ((NRelative)res).AncestorType = (NType)type;
                if (la.kind == 55)
                {
                    Get();
                    Expect(2);
                    ((NRelative)res).AncestorLevel = (int)ParserHelper.ParseInt(t.val);
                }
                Expect(41);
                break;
            }

            default: SynErr(84); break;
            }
        }