/// <summary> /// 分析当前的符号。 /// </summary> /// <param name="token">要分析的符号。</param> public override void Parse(Token <T> token) { if (token.IsEndOfFile) { if (stateStack.Count == 1) { return; } } while (true) { int state = stateStack.Peek(); ParseAction action = GetAction(state, token.Id); switch (action.ActionType) { case ParseActionType.Shift: Shift(token, action.Index); goto ReduceByUnique; case ParseActionType.Reduce: Reduce(action.Index); break; case ParseActionType.Accept: stateStack.Pop(); result = tokenStack.Pop(); return; case ParseActionType.Error: ReportError(state, token); // ErrorRecovery(state, token.Id); return; } } ReduceByUnique: // 尝试根据唯一归约进行归约。 while (true) { int state = stateStack.Peek(); ParseAction action = rule.States[state].Actions[Constants.UniqueIdx]; switch (action.ActionType) { case ParseActionType.Reduce: Reduce(action.Index); break; case ParseActionType.Error: return; } } }
public void PeekTest() { list.Push(1); list.Push(2); list.Push(3); Assert.AreEqual(list.Peek(), 3); Assert.IsTrue(list.IsContaining(3)); }
private static void SafePopFromStack(ListStack<string> stack, Activity activity) { if (stack.Count == 0) throw new InvalidOperationException("Стек пуст"); var top = stack.Peek(); if (string.CompareOrdinal(top, activity.Name) != 0) throw new InvalidOperationException("На вершине стека другое действие: " + top); stack.Pop(); }
private bool IsStackCorrectForExecuteActivity(Activity nextExecutingActivity) { lock (s_activitiesStackSync) { return _executingActivitiesStack.Count == 0 || (nextExecutingActivity.Parent != null && _executingActivitiesStack.Peek() == nextExecutingActivity.Parent.Name); } }
private void ExecutingActivitiesStackPop() { lock (s_activitiesStackSync) { var popName = _executingActivitiesStack.Pop(); if (_trackingActivitiesStack.Count > 0 && string.CompareOrdinal(_trackingActivitiesStack.Peek(), popName) == 0) _trackingActivitiesStack.Pop(); } }
public override int Mark() { _realTokens.Push(_realTokens.Peek()); return(base.Mark()); }