Exemplo n.º 1
0
		//=========================================================================================
		public ParserSpecification()
		{
			this.States = new List<StateParserState>();
			this.StartState = new StateParserState("<start>");
			this.EndState = new StateParserState("<end>");
			this.FailState = new StateParserState("<fail>");
			this.States.Add(this.StartState);
			this.States.Add(this.EndState);
			this.States.Add(this.FailState);

			this.StartState.SetDefaultLink(this.FailState);
			this.FailState.SetDefaultLink(this.EndState);
		}
        //=========================================================================================
        public ParserSpecification()
        {
            this.States     = new List <StateParserState>();
            this.StartState = new StateParserState("<start>");
            this.EndState   = new StateParserState("<end>");
            this.FailState  = new StateParserState("<fail>");
            this.States.Add(this.StartState);
            this.States.Add(this.EndState);
            this.States.Add(this.FailState);

            this.StartState.SetDefaultLink(this.FailState);
            this.FailState.SetDefaultLink(this.EndState);
        }
Exemplo n.º 3
0
        //=========================================================================================
        void GetNextSentence()
        {
            ///Становимся на начальное состояние
            this.CurrentState = this.Spec.StartState;
            if (!this.ReadNextToken())
            {
                return;
            }

            while (true)
            {
                ///Ищем следующее состояние на основании текущего символа
                var oNewState = this.CurrentState.GetNextState(this.CurrentToken);
                ///Если мы перешли в состоянии ошибки, генерим ошибку
                if (oNewState == this.Spec.FailState)
                {
                    this.Errors.Add(this.CurrentState.GetExpectationToString());
                }
                ///Если пора выходить
                if (oNewState == this.Spec.EndState)
                {
                    this.Scanner.BackToToken();
                    return;
                }
                if (oNewState == null)
                {
                    throw new NullReferenceException(this.CurrentState.Name);
                }
                this.CurrentState = oNewState;

                if (this.Scanner.StartLimiterLength > 0)
                {
                    this.EnqueueBoundedToken();
                }
                else
                {
                    this.CurrentToken.Style = this.Settings.GetStyleFor(this.CurrentToken, this.CurrentState.StyleName);
                    this.EnqueueMultilineToken(this.CurrentToken.Text, this.CurrentToken.Start, this.CurrentToken.End);
                    //this.TokenPool.Enqueue(this.CurrentToken);
                }

                ///Читаем новый токен
                if (!this.ReadNextToken())
                {
                    return;
                }
            }
        }
Exemplo n.º 4
0
		//=========================================================================================
		void GetNextSentence()
		{
			///Становимся на начальное состояние
			this.CurrentState = this.Spec.StartState;
			if (!this.ReadNextToken())
				return;

			while (true)
			{
				///Ищем следующее состояние на основании текущего символа
				var oNewState = this.CurrentState.GetNextState(this.CurrentToken);
				///Если мы перешли в состоянии ошибки, генерим ошибку
				if (oNewState == this.Spec.FailState)
				{
					this.Errors.Add(this.CurrentState.GetExpectationToString());
				}
				///Если пора выходить
				if (oNewState == this.Spec.EndState)
				{
					this.Scanner.BackToToken();
					return;
				}
				if (oNewState == null)
					throw new NullReferenceException(this.CurrentState.Name);
				this.CurrentState = oNewState;

				if (this.Scanner.StartLimiterLength > 0)
					this.EnqueueBoundedToken();
				else
				{
					this.CurrentToken.Style = this.Settings.GetStyleFor(this.CurrentToken, this.CurrentState.StyleName);
					this.EnqueueMultilineToken(this.CurrentToken.Text, this.CurrentToken.Start, this.CurrentToken.End);
					//this.TokenPool.Enqueue(this.CurrentToken);
				}

				///Читаем новый токен
				if (!this.ReadNextToken())
					return;
			}
		}
Exemplo n.º 5
0
		//=========================================================================================
		/// <summary>Переход по умолчанию, который выполняется, если не срабатывают условия других переходов.</summary>
		internal void SetDefaultLink(StateParserState state)
		{
			this.ElseState = state;
		}
Exemplo n.º 6
0
		//=========================================================================================
		internal void AddLink(string tokenType, StateParserState state)
		{
			this.Entries.Add(tokenType, state);
		}
Exemplo n.º 7
0
 //=========================================================================================
 /// <summary>Переход по умолчанию, который выполняется, если не срабатывают условия других переходов.</summary>
 internal void SetDefaultLink(StateParserState state)
 {
     this.ElseState = state;
 }
Exemplo n.º 8
0
 //=========================================================================================
 internal void AddLink(string tokenType, StateParserState state)
 {
     this.Entries.Add(tokenType, state);
 }