示例#1
0
 public override void Step(char InputSymbol)
 {
     // Идентификаторы могут содержать буквы и цифры, но первый символ не может быть цифрой (иначе это не идентификатор, а целочисленное значение)
     if (CurrentState != State.Error)
     {
         if (CurrentState == State.Beginning)
         {
             if (isLetter(InputSymbol))
             {
                 RecognizedChain.Add(InputSymbol);
                 CurrentState = State.Current;
             }
             else
             {
                 CurrentState = State.Error;
             }
         }
         else
         {
             if ((isDigit(InputSymbol)) ||
                 (isLetter(InputSymbol)) ||
                 (isUnderLine(InputSymbol)))
             {
                 RecognizedChain.Add(InputSymbol);
             }
             else
             {
                 CurrentState = State.Finishing;
             }
         }
     }
 }
示例#2
0
 public override void Step(char InputSymbol)
 {
     // 1. Распознаваемая цепочка не должна превышать длину шаблона (RecognizingChain)
     // 2. Последовательность символов во входной строке должна быть строго такой же как в шаблоне
     if (CurrentState != State.Error)
     {
         if (ChainPointer < RecognizingChain.Length)
         {
             if (RecognizingChain[ChainPointer] == InputSymbol)
             {
                 ChainPointer++;
                 CurrentState = State.Current;
                 RecognizedChain.Add(InputSymbol);
             }
             else
             {
                 CurrentState = State.Error;
             }
         }
         else
         {
             if (ChainPointer == RecognizingChain.Length)
             {
                 CurrentState = State.Finishing;
             }
         }
     }
 }
 public override void Step(char InputSymbol)
 {
     // В целочисленном литерале могут быть только цифры, а если мы встречаем не цифру, то это означает, что либо целочисленный литерал закончился
     if (CurrentState != State.Error)
     {
         if (isDigit(InputSymbol))
         {
             CurrentState = State.Current;
             RecognizedChain.Add(InputSymbol);
         }
         else
         {
             if (RecognizedChain.Count == 0)
             {
                 CurrentState = State.Error;
             }
             else
             {
                 CurrentState = State.Finishing;
             }
         }
     }
 }