Exemple #1
0
        public SimpleRule(NvdlRule rule, bool matchAttributes,
                          NvdlCompileContext ctx)
        {
            FillLocation(rule);

            this.matchAttributes = matchAttributes;
            NvdlNamespace nss = rule as NvdlNamespace;

            if (nss == null)
            {
                this.isAny = true;
            }
            else
            {
                this.ns = nss.NS;
                if (nss.Wildcard == null)
                {
                    wildcard = "*";
                }
                else if (nss.Wildcard.Length > 1)
                {
                    throw new NvdlCompileException("'wildCard' attribute can specify at most one character string.", rule);
                }
                else
                {
                    wildcard = nss.Wildcard;
                }
            }

            SimplifyPhase1(rule, ctx);
        }
Exemple #2
0
        public SimpleMode(NvdlIncludedMode mode, NvdlCompileContext ctx)
        {
            FillLocation(mode);

            // name doesn't matter here.
            SimplifyPhase1(mode, ctx);
        }
Exemple #3
0
 public SimpleRules(NvdlCompileContext context)
 {
     FillLocation(context.Rules);
     SimplifyPhase1(context);            // 6.4.1 - 10.
     SimplifyPhase2(context);            // 6.4.11 - 14.
     ResolveModes(context);              // 6.4.15.
 }
Exemple #4
0
 private void SimplifyPhase2(NvdlCompileContext ctx)
 {
     foreach (SimpleMode mode in modes)
     {
         mode.SimplifyPhase2(ctx);
     }
 }
Exemple #5
0
 internal void ResolveModes(NvdlCompileContext ctx, SimpleMode current)
 {
     foreach (SimpleAction a in actions)
     {
         a.ResolveModes(ctx, current);
     }
 }
Exemple #6
0
        internal void ResolveModes(NvdlCompileContext ctx, SimpleMode current)
        {
            if (source.UseMode != null)
            {
                mode = ctx.GetCompiledMode(source.UseMode);
            }
            else if (source.NestedMode != null)
            {
                mode = ctx.GetCompiledMode(source);
            }
            else
            {
                mode = current;
            }

            for (int i = 0; i < contexts.Length; i++)
            {
                contexts [i].ResolveModes(ctx, mode);
            }

            // FIXME: get location by some way
            if (mode == null)
            {
                throw new NvdlCompileException(
                          "mode does not contain either referenced modeUsage or nested mode.", null);
            }
        }
Exemple #7
0
		public SimpleRules (NvdlCompileContext context)
		{
			FillLocation (context.Rules);
			SimplifyPhase1 (context); // 6.4.1 - 10.
			SimplifyPhase2 (context); // 6.4.11 - 14.
			ResolveModes (context); // 6.4.15.
		}
Exemple #8
0
 private void ResolveModes(NvdlCompileContext ctx)
 {
     foreach (SimpleMode mode in modes)
     {
         mode.ResolveModes(ctx);
     }
 }
Exemple #9
0
        public SimpleMode(string name, NvdlNestedMode mode,
                          NvdlCompileContext ctx)
        {
            FillLocation(mode);

            this.name = name;
            SimplifyPhase1(mode, ctx);
        }
Exemple #10
0
 public SimpleValidate(
     NvdlValidate validate,
     NvdlCompileContext ctx)
     : base(validate)
 {
     // 6.4.7
     generator = ctx.Config.GetGenerator(validate,
                                         ctx.Rules.SchemaType);
 }
Exemple #11
0
        private void ConsumeIncludes(ArrayList al,
                                     NvdlCompileContext ctx)
        {
            // The reason why we limit the check to current count
            // is to add invalid siblings (according to 6.4.12).
            int checkMax = al.Count;
            NvdlModeCompileContext mctx = ctx.GetModeContext(this);

            foreach (SimpleRule rule in rules)
            {
                // Don't skip cancelled rules here. They are
                // needed to filter overriden rules out
                // (according to 6.4.10)
                //if (ctx.CancelledRules [rule] != null)
                //	continue;

                bool exclude = false;
                for (int i = 0; i < checkMax; i++)
                {
                    SimpleRule r = (SimpleRule)al [i];
                    if (rule.IsAny == r.IsAny &&
                        rule.MatchAttributes == r.MatchAttributes &&
                        rule.NS == r.NS &&
                        rule.Wildcard == r.Wildcard)
                    {
                        exclude = true;
                        break;
                    }
                }
                if (exclude)
                {
                    break;
                }
                al.Add(rule);
            }
            foreach (SimpleMode mode in mctx.Included)
            {
                mode.ConsumeIncludes(al, ctx);
            }

            // remove cancelled rules at this stage.
            for (int i = 0; i < al.Count;)
            {
                if (ctx.CancelledRules [(SimpleRule)al [i]] != null)
                {
                    al.RemoveAt(i);
                }
                else
                {
                    i++;
                }
            }
        }
Exemple #12
0
        public SimpleMode(NvdlMode mode, NvdlCompileContext ctx)
        {
            FillLocation(mode);

            if (mode.Name == null)
            {
                throw new NvdlCompileException(
                          "'mode' element must have a name.", mode);
            }
            this.name = mode.Name;
            SimplifyPhase1(mode, ctx);
        }
Exemple #13
0
 internal void ResolveModes(NvdlCompileContext ctx, SimpleMode current)
 {
     if (modeUsage != null)
     {
         modeUsage.ResolveModes(ctx, current);
         mode = modeUsage.UseMode;
     }
     if (mode == null)
     {
         mode = current;
     }
 }
Exemple #14
0
        internal void SimplifyPhase2(NvdlCompileContext ctx)
        {
            ArrayList al = new ArrayList();

            ConsumeIncludes(al, ctx);
            SimpleRule anyElement   = null;
            SimpleRule anyAttribute = null;

            // 6.4.12 + part of 6.4.13
            CheckCollision(al, ref anyElement, ref anyAttribute);
            // 6.4.13
            if (anyElement == null)
            {
                NvdlAnyNamespace ann = new NvdlAnyNamespace();
                ann.SourceUri    = this.SourceUri;
                ann.LineNumber   = this.LineNumber;
                ann.LinePosition = this.LinePosition;

                NvdlReject reject = new NvdlReject();
                reject.SourceUri    = this.SourceUri;
                reject.LineNumber   = this.LineNumber;
                reject.LinePosition = this.LinePosition;
                ann.Actions.Add(reject);
                ann.Match = NvdlRuleTarget.Elements;

                al.Add(new SimpleRule(ann, false, ctx));
            }
            if (anyAttribute == null)
            {
                NvdlAnyNamespace ann = new NvdlAnyNamespace();
                ann.SourceUri    = this.SourceUri;
                ann.LineNumber   = this.LineNumber;
                ann.LinePosition = this.LinePosition;

                NvdlAttach attach = new NvdlAttach();
                attach.SourceUri    = this.SourceUri;
                attach.LineNumber   = this.LineNumber;
                attach.LinePosition = this.LinePosition;
                ann.Match           = NvdlRuleTarget.Attributes;
                ann.Actions.Add(attach);

                al.Add(new SimpleRule(ann, true, ctx));
            }
            rules = (SimpleRule [])al.ToArray(typeof(SimpleRule));
        }
Exemple #15
0
        private void SimplifyPhase1(NvdlRule r, NvdlCompileContext ctx)
        {
            ctx.AddRuleContext(this, r);
            // 6.4.9
            ArrayList al = new ArrayList();

            foreach (NvdlAction a in r.Actions)
            {
                NvdlNoCancelAction nca =
                    a as NvdlNoCancelAction;
                if (nca != null)
                {
                    if (nca.ModeUsage != null)
                    {
                        SimplifyModeUsage(nca, ctx);
                    }
                    NvdlResultAction ra = nca as NvdlResultAction;
                    if (ra != null)
                    {
                        al.Add(new SimpleResultAction(ra, ctx));
                    }
                    else if (nca is NvdlValidate)
                    {
                        al.Add(new SimpleValidate(
                                   (NvdlValidate)nca, ctx));
                    }
                    else if (nca is NvdlAllow)
                    {
                        al.Add(new SimpleValidate(
                                   (NvdlAllow)nca, ctx));
                    }
                    else
                    {
                        al.Add(new SimpleValidate(
                                   (NvdlReject)nca, ctx));
                    }
                }
                else if (nca == null)
                {
                    ctx.CancelledRules.Add(this, this);
                }
            }
            actions = (SimpleAction [])al.ToArray(
                typeof(SimpleAction));
        }
Exemple #16
0
        internal void ResolveModes(NvdlCompileContext ctx, SimpleMode current)
        {
            if (useModeName != null)
            {
                useMode = ctx.GetCompiledMode(useModeName);
            }
            else if (source.NestedMode != null)
            {
                useMode = ctx.GetCompiledMode(source);
            }
            else
            {
                useMode = current;
            }

            if (useMode == null)
            {
                throw new NvdlCompileException(String.Format("Specified mode '{0}' was not found.",
                                                             useModeName), this);
            }
        }
Exemple #17
0
        private void SimplifyModeUsage(
            NvdlNoCancelAction nca, NvdlCompileContext ctx)
        {
            NvdlModeUsage usage = nca.ModeUsage;

            if (usage.NestedMode != null && ctx.GetCompiledMode(usage) == null)
            {
                SimpleMode sm = new SimpleMode(String.Empty,
                                               usage.NestedMode, ctx);
                ctx.AddCompiledMode(usage, sm);
            }
            foreach (NvdlContext c in usage.Contexts)
            {
                if (c.NestedMode != null)
                {
                    SimpleMode sm = new SimpleMode(
                        String.Empty, c.NestedMode, ctx);
                    ctx.AddCompiledMode(c, sm);
                }
            }
        }
Exemple #18
0
        internal void ResolveModes(NvdlCompileContext ctx)
        {
            // Resolve moces and fill element/attributeRules.
            var e = new List <SimpleRule> ();
            var a = new List <SimpleRule> ();

            foreach (SimpleRule rule in rules)
            {
                rule.ResolveModes(ctx, this);
                if (rule.MatchAttributes)
                {
                    a.Add(rule);
                }
                else
                {
                    e.Add(rule);
                }
            }

            elementRules   = e.ToArray();
            attributeRules = a.ToArray();
        }
Exemple #19
0
        internal void ResolveModes(NvdlCompileContext ctx)
        {
            // Resolve moces and fill element/attributeRules.
            ArrayList e = new ArrayList();
            ArrayList a = new ArrayList();

            foreach (SimpleRule rule in rules)
            {
                rule.ResolveModes(ctx, this);
                if (rule.MatchAttributes)
                {
                    a.Add(rule);
                }
                else
                {
                    e.Add(rule);
                }
            }

            elementRules   = (SimpleRule [])e.ToArray(typeof(SimpleRule));
            attributeRules = (SimpleRule [])a.ToArray(typeof(SimpleRule));
        }
Exemple #20
0
        private void SimplifyPhase1(NvdlModeBase mode,
                                    NvdlCompileContext ctx)
        {
            NvdlModeCompileContext mctx =
                new NvdlModeCompileContext(mode);

            ctx.AddModeContext(this, mctx);
            ArrayList al = new ArrayList();

            foreach (NvdlRule r in mode.Rules)
            {
                switch (r.Match)
                {
                case NvdlRuleTarget.Both:
                    al.Add(new SimpleRule(r, true, ctx));
                    al.Add(new SimpleRule(r, false, ctx));
                    break;

                case NvdlRuleTarget.None:
                case NvdlRuleTarget.Elements:
                    al.Add(new SimpleRule(r, false, ctx));
                    break;

                case NvdlRuleTarget.Attributes:
                    al.Add(new SimpleRule(r, true, ctx));
                    break;
                }
            }
            foreach (NvdlIncludedMode inc in mode.IncludedModes)
            {
                mctx.Included.Add(new SimpleMode(inc, ctx));
            }
            // The rule table is just a dummy store that might
            // erase because of removal of inclusion.
            rules = (SimpleRule [])al.ToArray(typeof(SimpleRule));
        }
Exemple #21
0
		internal void ResolveModes (NvdlCompileContext ctx)
		{
			// Resolve moces and fill element/attributeRules.
			ArrayList e = new ArrayList ();
			ArrayList a = new ArrayList ();
			foreach (SimpleRule rule in rules) {
				rule.ResolveModes (ctx, this);
				if (rule.MatchAttributes)
					a.Add (rule);
				else
					e.Add (rule);
			}

			elementRules = (SimpleRule []) e.ToArray (typeof (SimpleRule));
			attributeRules = (SimpleRule []) a.ToArray (typeof (SimpleRule));
		}
Exemple #22
0
		private void ConsumeIncludes (ArrayList al,
			NvdlCompileContext ctx)
		{
			// The reason why we limit the check to current count
			// is to add invalid siblings (according to 6.4.12).
			int checkMax = al.Count;
			NvdlModeCompileContext mctx = ctx.GetModeContext (this);
			foreach (SimpleRule rule in rules) {
				// Don't skip cancelled rules here. They are
				// needed to filter overriden rules out
				// (according to 6.4.10)
				//if (ctx.CancelledRules [rule] != null)
				//	continue;

				bool exclude = false;
				for (int i = 0; i < checkMax; i++) {
					SimpleRule r = (SimpleRule) al [i];
					if (rule.IsAny == r.IsAny &&
						rule.MatchAttributes == r.MatchAttributes &&
						rule.NS == r.NS &&
						rule.Wildcard == r.Wildcard) {
						exclude = true;
						break;
					}
				}
				if (exclude)
					break;
				al.Add (rule);
			}
			foreach (SimpleMode mode in mctx.Included)
				mode.ConsumeIncludes (al, ctx);

			// remove cancelled rules at this stage.
			for (int i = 0; i < al.Count; ) {
				if (ctx.CancelledRules [(SimpleRule) al [i]] != null)
					al.RemoveAt (i);
				else
					i++;
			}
		}
Exemple #23
0
		internal void ResolveModes (NvdlCompileContext ctx, SimpleMode current)
		{
			if (source.UseMode != null) {
				mode = ctx.GetCompiledMode (source.UseMode);
			}
			else if (source.NestedMode != null)
				mode = ctx.GetCompiledMode (source);
			else
				mode = current;

			for (int i = 0; i < contexts.Length; i++)
				contexts [i].ResolveModes (ctx, mode);

			// FIXME: get location by some way
			if (mode == null)
				throw new NvdlCompileException (
					"mode does not contain either referenced modeUsage or nested mode.", null);
		}
Exemple #24
0
		public SimpleRule (NvdlRule rule, bool matchAttributes,
			NvdlCompileContext ctx)
		{
			FillLocation (rule);

			this.matchAttributes = matchAttributes;
			NvdlNamespace nss = rule as NvdlNamespace;
			if (nss == null)
				this.isAny = true;
			else {
				this.ns = nss.NS;
				if (nss.Wildcard == null)
					wildcard = "*";
				else if (nss.Wildcard.Length > 1)
					throw new NvdlCompileException ("'wildCard' attribute can specify at most one character string.", rule);
				else
					wildcard = nss.Wildcard;
			}

			SimplifyPhase1 (rule, ctx);
		}
Exemple #25
0
		internal void ResolveModes (NvdlCompileContext ctx, SimpleMode current)
		{
			if (useModeName != null)
				useMode = ctx.GetCompiledMode (useModeName);
			else if (source.NestedMode != null)
				useMode = ctx.GetCompiledMode (source);
			else
				useMode = current;

			if (useMode == null)
				throw new NvdlCompileException (String.Format ("Specified mode '{0}' was not found.",
					useModeName), this);
		}
Exemple #26
0
		public SimpleMode (NvdlMode mode, NvdlCompileContext ctx)
		{
			FillLocation (mode);

			if (mode.Name == null)
				throw new NvdlCompileException (
					"'mode' element must have a name.", mode);
			this.name = mode.Name;
			SimplifyPhase1 (mode, ctx);
		}
Exemple #27
0
		internal void ResolveModes (NvdlCompileContext ctx, SimpleMode current)
		{
			foreach (SimpleAction a in actions)
				a.ResolveModes (ctx, current);
		}
Exemple #28
0
		public SimpleMode (NvdlIncludedMode mode, NvdlCompileContext ctx)
		{
			FillLocation (mode);

			// name doesn't matter here.
			SimplifyPhase1 (mode, ctx);
		}
Exemple #29
0
		// 6.4.14
		public SimpleValidate (NvdlAllow allow, NvdlCompileContext ctx)
			: this (CreateBuiltInValidate (allow), ctx)
		{
		}
Exemple #30
0
		internal void ResolveModes (NvdlCompileContext ctx, SimpleMode current)
		{
			if (modeUsage != null) {
				modeUsage.ResolveModes (ctx, current);
				mode = modeUsage.UseMode;
			}
			if (mode == null)
				mode = current;
		}
Exemple #31
0
		// 6.4.14
		public SimpleValidate (NvdlReject reject, NvdlCompileContext ctx)
			: this (CreateBuiltInValidate (reject), ctx)
		{
		}
Exemple #32
0
		public SimpleValidate (
			NvdlValidate validate,
			NvdlCompileContext ctx)
			: base (validate)
		{
			// 6.4.7
			generator = ctx.Config.GetGenerator (validate,
				ctx.Rules.SchemaType);
		}
Exemple #33
0
		private void ResolveModes (NvdlCompileContext ctx)
		{
			foreach (SimpleMode mode in modes)
				mode.ResolveModes (ctx);
		}
Exemple #34
0
		internal void SimplifyPhase2 (NvdlCompileContext ctx)
		{
			ArrayList al = new ArrayList ();
			ConsumeIncludes (al, ctx);
			SimpleRule anyElement = null;
			SimpleRule anyAttribute = null;
			// 6.4.12 + part of 6.4.13
			CheckCollision (al, ref anyElement, ref anyAttribute);
			// 6.4.13
			if (anyElement == null) {
				NvdlAnyNamespace ann = new NvdlAnyNamespace ();
				ann.SourceUri = this.SourceUri;
				ann.LineNumber = this.LineNumber;
				ann.LinePosition = this.LinePosition;

				NvdlReject reject = new NvdlReject ();
				reject.SourceUri = this.SourceUri;
				reject.LineNumber = this.LineNumber;
				reject.LinePosition = this.LinePosition;
				ann.Actions.Add (reject);
				ann.Match = NvdlRuleTarget.Elements;

				al.Add (new SimpleRule (ann, false, ctx));
			}
			if (anyAttribute == null) {
				NvdlAnyNamespace ann = new NvdlAnyNamespace ();
				ann.SourceUri = this.SourceUri;
				ann.LineNumber = this.LineNumber;
				ann.LinePosition = this.LinePosition;

				NvdlAttach attach = new NvdlAttach ();
				attach.SourceUri = this.SourceUri;
				attach.LineNumber = this.LineNumber;
				attach.LinePosition = this.LinePosition;
				ann.Match = NvdlRuleTarget.Attributes;
				ann.Actions.Add (attach);

				al.Add (new SimpleRule (ann, true, ctx));
			}
			rules = (SimpleRule []) al.ToArray (typeof (SimpleRule));
		}
Exemple #35
0
 // 6.4.14
 public SimpleValidate(NvdlReject reject, NvdlCompileContext ctx)
     : this(CreateBuiltInValidate(reject), ctx)
 {
 }
Exemple #36
0
		private void SimplifyPhase1 (NvdlModeBase mode,
			NvdlCompileContext ctx)
		{
			NvdlModeCompileContext mctx =
				new NvdlModeCompileContext (mode);
			ctx.AddModeContext (this, mctx);
			ArrayList al = new ArrayList ();
			foreach (NvdlRule r in mode.Rules) {
				switch (r.Match) {
				case NvdlRuleTarget.Both:
					al.Add (new SimpleRule (r, true, ctx));
					al.Add (new SimpleRule (r, false, ctx));
					break;
				case NvdlRuleTarget.None:
				case NvdlRuleTarget.Elements:
					al.Add (new SimpleRule (r, false, ctx));
					break;
				case NvdlRuleTarget.Attributes:
					al.Add (new SimpleRule (r, true, ctx));
					break;
				}
			}
			foreach (NvdlIncludedMode inc in mode.IncludedModes)
				mctx.Included.Add (new SimpleMode (inc, ctx));
			// The rule table is just a dummy store that might
			// erase because of removal of inclusion.
			rules = (SimpleRule []) al.ToArray (typeof (SimpleRule));
		}
Exemple #37
0
        private void SimplifyPhase1(NvdlCompileContext ctx)
        {
            NvdlRules rules = ctx.Rules;
            // 6.4.1 : just ignore "Foreign" property.
            // 6.4.2 : already ignored on reading nvdl.
            // 6.4.3 : done in SOM
            // 6.4.4 : FIXME: must be done.
            // 6.4.5 : FIXME: considered in compiler.
            // 6.4.6 : FIXME: considered in compiler.
            // 6.4.7 : FIXME: considered in compiler.

            // 6.4.8 : here
            NvdlModeList list      = rules.Modes;
            NvdlMode     startMode = null;

            if (rules.Modes.Count > 0)
            {
                if (rules.Rules.Count > 0)
                {
                    throw new NvdlCompileException("Modes and rules cannot coexist in 'rules' element.", rules);
                }
                else if (rules.StartMode == null)
                {
                    throw new NvdlCompileException("startMode is missing in 'rules' element when modes are specified.", rules);
                }
                foreach (NvdlMode m in rules.Modes)
                {
                    if (m.Name == rules.StartMode)
                    {
                        startMode = m;
                        break;
                    }
                }
                if (startMode == null)
                {
                    throw new NvdlCompileException("Matching 'mode' element specified by 'startMode' does not exist.", rules);
                }
            }
            else
            {
                if (rules.Rules.Count == 0)
                {
                    throw new NvdlCompileException("Neither modes nor rules exists in 'rules' element.", rules);
                }
                list                   = new NvdlModeList();
                startMode              = new NvdlMode();
                startMode.SourceUri    = rules.SourceUri;
                startMode.LineNumber   = rules.LineNumber;
                startMode.LinePosition = rules.LinePosition;
                startMode.Name         = "(startMode)";
                list.Add(startMode);
                foreach (NvdlRule rule in rules.Rules)
                {
                    startMode.Rules.Add(rule);
                }
            }

            // 6.4.9 : done in SimpleMode.ctor() and
            // SimpleRule.ctor(), using ctx.CompiledModes.
            foreach (NvdlMode m in list)
            {
                SimpleMode sm = new SimpleMode(m, ctx);
                ctx.AddCompiledMode(sm.Name, sm);
                if (m == startMode)
                {
                    this.startMode = sm;
                }
            }

            // 6.4.10 : done in SimpleRule.Simplify

            ArrayList tl = new ArrayList();

            for (int i = 0; i < rules.Triggers.Count; i++)
            {
                tl.Add(new SimpleTrigger(rules.Triggers [i]));
            }
            triggers = (SimpleTrigger [])tl.ToArray(
                typeof(SimpleTrigger));

            modes = (SimpleMode [])
                    new ArrayList(ctx.GetCompiledModes())
                    .ToArray(typeof(SimpleMode));
        }
Exemple #38
0
 // 6.4.14
 public SimpleValidate(NvdlAllow allow, NvdlCompileContext ctx)
     : this(CreateBuiltInValidate(allow), ctx)
 {
 }
Exemple #39
0
		private void SimplifyPhase1 (NvdlCompileContext ctx)
		{
			NvdlRules rules = ctx.Rules;
			// 6.4.1 : just ignore "Foreign" property.
			// 6.4.2 : already ignored on reading nvdl.
			// 6.4.3 : done in SOM
			// 6.4.4 : FIXME: must be done.
			// 6.4.5 : FIXME: considered in compiler.
			// 6.4.6 : FIXME: considered in compiler.
			// 6.4.7 : FIXME: considered in compiler.

			// 6.4.8 : here
			NvdlModeList list = rules.Modes;
			NvdlMode startMode = null;

			if (rules.Modes.Count > 0) {
				if (rules.Rules.Count > 0)
					throw new NvdlCompileException ("Modes and rules cannot coexist in 'rules' element.", rules);
				else if (rules.StartMode == null)
					throw new NvdlCompileException ("startMode is missing in 'rules' element when modes are specified.", rules);
				foreach (NvdlMode m in rules.Modes) {
					if (m.Name == rules.StartMode) {
						startMode = m;
						break;
					}
				}
				if (startMode == null)
					throw new NvdlCompileException ("Matching 'mode' element specified by 'startMode' does not exist.", rules);
			} else {
				if (rules.Rules.Count == 0)
					throw new NvdlCompileException ("Neither modes nor rules exists in 'rules' element.", rules);
				list = new NvdlModeList ();
				startMode = new NvdlMode ();
				startMode.SourceUri = rules.SourceUri;
				startMode.LineNumber = rules.LineNumber;
				startMode.LinePosition = rules.LinePosition;
				startMode.Name = "(startMode)";
				list.Add (startMode);
				foreach (NvdlRule rule in rules.Rules)
					startMode.Rules.Add (rule);
			}

			// 6.4.9 : done in SimpleMode.ctor() and
			// SimpleRule.ctor(), using ctx.CompiledModes.
			foreach (NvdlMode m in list) {
				SimpleMode sm = new SimpleMode (m, ctx);
				ctx.AddCompiledMode (sm.Name, sm);
				if (m == startMode)
					this.startMode = sm;
			}

			// 6.4.10 : done in SimpleRule.Simplify

			ArrayList tl = new ArrayList ();
			for (int i = 0; i < rules.Triggers.Count; i++)
				tl.Add (new SimpleTrigger (rules.Triggers [i]));
			triggers = (SimpleTrigger []) tl.ToArray (
				typeof (SimpleTrigger));

			modes = (SimpleMode [])
				new ArrayList (ctx.GetCompiledModes ())
				.ToArray (typeof (SimpleMode));
		}
Exemple #40
0
		public SimpleMode (string name, NvdlNestedMode mode,
			NvdlCompileContext ctx)
		{
			FillLocation (mode);

			this.name = name;
			SimplifyPhase1 (mode, ctx);
		}
Exemple #41
0
		private void SimplifyModeUsage (
			NvdlNoCancelAction nca, NvdlCompileContext ctx)
		{
			NvdlModeUsage usage = nca.ModeUsage;
			if (usage.NestedMode != null && ctx.GetCompiledMode (usage) == null) {
				SimpleMode sm = new SimpleMode (String.Empty,
					usage.NestedMode, ctx);
				ctx.AddCompiledMode (usage, sm);
			}
			foreach (NvdlContext c in usage.Contexts) {
				if (c.NestedMode != null) {
					SimpleMode sm = new SimpleMode (
						String.Empty, c.NestedMode, ctx);
					ctx.AddCompiledMode (c, sm);
				}
			}
		}
Exemple #42
0
 public SimpleResultAction(NvdlResultAction ra,
                           NvdlCompileContext ctx)
     : base(ra)
 {
     this.resultType = ra.ResultType;
 }
Exemple #43
0
		private void SimplifyPhase1 (NvdlRule r, NvdlCompileContext ctx)
		{
			ctx.AddRuleContext (this, r);
			// 6.4.9
			ArrayList al = new ArrayList ();
			foreach (NvdlAction a in r.Actions) {
				NvdlNoCancelAction nca =
					a as NvdlNoCancelAction;
				if (nca != null) {
					if (nca.ModeUsage != null)
						SimplifyModeUsage (nca, ctx);
					NvdlResultAction ra = nca as NvdlResultAction;
					if (ra != null)
						al.Add (new SimpleResultAction (ra, ctx));
					else if (nca is NvdlValidate)
						al.Add (new SimpleValidate (
							(NvdlValidate) nca, ctx));
					else if (nca is NvdlAllow)
						al.Add (new SimpleValidate (
							(NvdlAllow) nca, ctx));
					else
						al.Add (new SimpleValidate (
							(NvdlReject) nca, ctx));
				}
				else if (nca == null)
					ctx.CancelledRules.Add (this, this);
			}
			actions = (SimpleAction []) al.ToArray (
				typeof (SimpleAction));
		}
Exemple #44
0
		private void SimplifyPhase2 (NvdlCompileContext ctx)
		{
			foreach (SimpleMode mode in modes)
				mode.SimplifyPhase2 (ctx);
		}
Exemple #45
0
		public SimpleResultAction (NvdlResultAction ra,
			NvdlCompileContext ctx)
			: base (ra)
		{
			this.resultType = ra.ResultType;
		}