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; } } } }
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; } } } }