Exemplo n.º 1
0
        /// <summary>
        /// Adds a push state transition.
        /// </summary>
        /// <param name="eventIdentifier">Token</param>
        /// <param name="eventIdentifierTokens">Tokens</param>
        /// <param name="stateIdentifiers">Token list</param>
        /// <returns>Boolean</returns>
        internal bool AddPushStateTransition(Token eventIdentifier, List<Token> eventIdentifierTokens,
            List<Token> stateIdentifiers)
        {
            if (this.Machine.IsMonitor)
            {
                return false;
            }

            if (this.GotoStateTransitions.ContainsKey(eventIdentifier) ||
                this.PushStateTransitions.ContainsKey(eventIdentifier) ||
                this.ActionBindings.ContainsKey(eventIdentifier))
            {
                return false;
            }

            this.PushStateTransitions.Add(eventIdentifier, stateIdentifiers);
            this.ResolvedEventIdentifierTokens[eventIdentifier] = Tuple.Create(
                eventIdentifierTokens, this.ResolvedEventIdentifierTokens.Count);

            return true;
        }
Exemplo n.º 2
0
        /// <summary>
        /// Returns the resolved event handler name that corresponds to the
        /// specified event identifier.
        /// </summary>
        /// <param name="eventIdentifier">Token</param>
        /// <returns>Name</returns>
        internal string GetResolvedEventHandlerName(Token eventIdentifier)
        {
            var resolvedEvent = this.ResolvedEventIdentifierTokens[eventIdentifier];
            var eventIdentifierTokens = resolvedEvent.Item1.TakeWhile(
                tok => tok.Type != TokenType.LeftAngleBracket);
            string qualifiedEventIdentifier = "";
            foreach (var tok in eventIdentifierTokens.Where(tok => tok.Type != TokenType.Dot))
            {
                qualifiedEventIdentifier += $"_{tok.TextUnit.Text}";
            }

            string typeId = "";
            if (eventIdentifierTokens.Count() != resolvedEvent.Item1.Count)
            {
                typeId += "_type_" + this.ResolvedEventIdentifierTokens[eventIdentifier].Item2;
            }

            return qualifiedEventIdentifier + typeId;
        }
Exemplo n.º 3
0
        /// <summary>
        /// Adds a goto state transition.
        /// </summary>
        /// <param name="eventIdentifier">Token</param>
        /// <param name="eventIdentifierTokens">Tokens</param>
        /// <param name="stateIdentifiers">Token list</param>
        /// <param name="stmtBlock">Statement block</param>
        /// <returns>Boolean</returns>
        internal bool AddGotoStateTransition(Token eventIdentifier, List<Token> eventIdentifierTokens,
            List<Token> stateIdentifiers, BlockSyntax stmtBlock = null)
        {
            if (this.GotoStateTransitions.ContainsKey(eventIdentifier) ||
                this.PushStateTransitions.ContainsKey(eventIdentifier) ||
                this.ActionBindings.ContainsKey(eventIdentifier))
            {
                return false;
            }

            this.GotoStateTransitions.Add(eventIdentifier, stateIdentifiers);
            if (stmtBlock != null)
            {
                this.TransitionsOnExitActions.Add(eventIdentifier, stmtBlock);
            }

            this.ResolvedEventIdentifierTokens[eventIdentifier] = Tuple.Create(
                eventIdentifierTokens, this.ResolvedEventIdentifierTokens.Count);

            return true;
        }
Exemplo n.º 4
0
        /// <summary>
        /// Adds an ignored event.
        /// </summary>
        /// <param name="eventIdentifier">Token</param>
        /// <param name="eventIdentifierTokens">Tokens</param>
        /// <returns>Boolean</returns>
        internal bool AddIgnoredEvent(Token eventIdentifier, List<Token> eventIdentifierTokens)
        {
            if (this.DeferredEvents.Contains(eventIdentifier) ||
                this.IgnoredEvents.Contains(eventIdentifier))
            {
                return false;
            }

            this.IgnoredEvents.Add(eventIdentifier);
            this.ResolvedEventIdentifierTokens[eventIdentifier] = Tuple.Create(
                eventIdentifierTokens, this.ResolvedEventIdentifierTokens.Count);

            return true;
        }
Exemplo n.º 5
0
        /// <summary>
        /// Adds an action binding.
        /// </summary>
        /// <param name="eventIdentifier">Token</param>
        /// <param name="eventIdentifierTokens">Tokens</param>
        /// <param name="stmtBlock">BlockSyntax</param>
        /// <returns>Boolean</returns>
        internal bool AddActionBinding(Token eventIdentifier, List<Token> eventIdentifierTokens,
            BlockSyntax stmtBlock)
        {
            if (this.GotoStateTransitions.ContainsKey(eventIdentifier) ||
                this.PushStateTransitions.ContainsKey(eventIdentifier) ||
                this.ActionBindings.ContainsKey(eventIdentifier))
            {
                return false;
            }

            this.ActionBindings.Add(eventIdentifier, null);
            this.ActionHandlers.Add(eventIdentifier, stmtBlock);
            this.ResolvedEventIdentifierTokens[eventIdentifier] = Tuple.Create(
                eventIdentifierTokens, this.ResolvedEventIdentifierTokens.Count);

            return true;
        }
Exemplo n.º 6
0
        /// <summary>
        /// Adds an action binding.
        /// </summary>
        /// <param name="eventIdentifier">Token</param>
        /// <param name="eventIdentifierTokens">Tokens</param>
        /// <param name="actionIdentifier">Token</param>
        /// <returns>Boolean</returns>
        internal bool AddActionBinding(Token eventIdentifier, List<Token> eventIdentifierTokens,
            Token actionIdentifier)
        {
            if (this.GotoStateTransitions.ContainsKey(eventIdentifier) ||
                this.PushStateTransitions.ContainsKey(eventIdentifier) ||
                this.ActionBindings.ContainsKey(eventIdentifier))
            {
                return false;
            }

            this.ActionBindings.Add(eventIdentifier, actionIdentifier);
            this.ResolvedEventIdentifierTokens[eventIdentifier] = Tuple.Create(
                eventIdentifierTokens, this.ResolvedEventIdentifierTokens.Count);

            return true;
        }
Exemplo n.º 7
0
        /// <summary>
        /// Adds an ignored event.
        /// </summary>
        /// <param name="eventIdentifier">Token</param>
        /// <returns>Boolean value</returns>
        internal bool AddIgnoredEvent(Token eventIdentifier)
        {
            if (this.DeferredEvents.Contains(eventIdentifier) ||
                this.IgnoredEvents.Contains(eventIdentifier))
            {
                return false;
            }

            this.IgnoredEvents.Add(eventIdentifier);

            return true;
        }
Exemplo n.º 8
0
        /// <summary>
        /// Adds a push state transition.
        /// </summary>
        /// <param name="eventIdentifier">Token</param>
        /// <param name="stateIdentifier">Token</param>
        /// <returns>Boolean value</returns>
        internal bool AddPushStateTransition(Token eventIdentifier, Token stateIdentifier)
        {
            if (this.Machine.IsMonitor)
            {
                return false;
            }

            if (this.GotoStateTransitions.ContainsKey(eventIdentifier) ||
                this.PushStateTransitions.ContainsKey(eventIdentifier) ||
                this.ActionBindings.ContainsKey(eventIdentifier))
            {
                return false;
            }

            this.PushStateTransitions.Add(eventIdentifier, stateIdentifier);

            return true;
        }
Exemplo n.º 9
0
        /// <summary>
        /// Adds a goto state transition.
        /// </summary>
        /// <param name="eventIdentifier">Token</param>
        /// <param name="stateIdentifier">Token</param>
        /// <param name="stmtBlock">Statement block</param>
        /// <returns>Boolean value</returns>
        internal bool AddGotoStateTransition(Token eventIdentifier, Token stateIdentifier,
            BlockSyntax stmtBlock = null)
        {
            if (this.GotoStateTransitions.ContainsKey(eventIdentifier) ||
                this.PushStateTransitions.ContainsKey(eventIdentifier) ||
                this.ActionBindings.ContainsKey(eventIdentifier))
            {
                return false;
            }

            this.GotoStateTransitions.Add(eventIdentifier, stateIdentifier);
            if (stmtBlock != null)
            {
                this.TransitionsOnExitActions.Add(eventIdentifier, stmtBlock);
            }

            return true;
        }
Exemplo n.º 10
0
        /// <summary>
        /// Adds an action binding.
        /// </summary>
        /// <param name="eventIdentifier">Token</param>
        /// <param name="actionIdentifier">Token</param>
        /// <returns>Boolean value</returns>
        internal bool AddActionBinding(Token eventIdentifier, Token actionIdentifier)
        {
            if (this.GotoStateTransitions.ContainsKey(eventIdentifier) ||
                this.PushStateTransitions.ContainsKey(eventIdentifier) ||
                this.ActionBindings.ContainsKey(eventIdentifier))
            {
                return false;
            }

            this.ActionBindings.Add(eventIdentifier, actionIdentifier);

            return true;
        }
Exemplo n.º 11
0
        /// <summary>
        /// Adds an action binding.
        /// </summary>
        /// <param name="eventIdentifier">Token</param>
        /// <param name="stateIdentifier">Token</param>
        /// <returns>Boolean value</returns>
        internal bool AddActionBinding(Token eventIdentifier, BlockSyntax stmtBlock)
        {
            if (this.GotoStateTransitions.ContainsKey(eventIdentifier) ||
                this.PushStateTransitions.ContainsKey(eventIdentifier) ||
                this.ActionBindings.ContainsKey(eventIdentifier))
            {
                return false;
            }

            this.ActionBindings.Add(eventIdentifier, null);
            this.ActionHandlers.Add(eventIdentifier, stmtBlock);

            return true;
        }
Exemplo n.º 12
0
        /// <summary>
        /// Returns true if the given token is of the expected token type
        /// </summary>
        /// <returns></returns>
        private bool IsExpectedTokenType(Token token, List<TokenType> expectedTokenTypes)
        {
            if (token.Type == TokenType.WhiteSpace ||
                token.Type == TokenType.NewLine ||
                token.Type == TokenType.Comment ||
                token.Type == TokenType.CommentLine ||
                token.Type == TokenType.CommentStart ||
                token.Type == TokenType.CommentEnd ||
                expectedTokenTypes.Contains(token.Type))
            {
                return true;
            }

            return false;
        }
Exemplo n.º 13
0
        /// <summary>
        /// Swaps the current token with the new token. Does nothing if the stream is
        /// empty.
        /// </summary>
        public void Swap(Token token)
        {
            if (this.Index == this.Tokens.Count)
            {
                return;
            }

            this.Tokens[this.Index] = token;
        }