나에게 asked a question earlier,하지만 난 내가 바라던 대답의 종류에 대해 충분히 명확하다고 생각, 그래서 내가 좀 더 구체적인 예를 제공하지 않습니다코드 행으로 돌아가서 호출 스택을 복원하는 방법은 무엇입니까?
을 : 이class Program
{
private static bool State;
static void Main(string[] args)
{
State = false;
Console.WriteLine(And());
Console.ReadLine();
}
static bool And()
{
return Or() && C();
}
static bool Or()
{
return A() || AB();
}
static bool C()
{
return State;
}
static bool A()
{
return true;
}
static bool AB()
{
State = true;
return true;
}
}
이 프로그램의 흐름 모습을
- 그리고()는
- 라고 그리고 (이) 전화를 걸거나()
- 또는()가()
- 을 (호출)가 true 를 반환됩니다
- 흐름) (true를 반환 또는(), (게으른 평가)
- 흐름 (로 복귀(), 그리고) C()를 호출 이
- C()가 false
- 흐름에 반환하고 반환에 반환 , 이는
것은 지금이 아니면()가 게으른 평가 (나는 ||
|
로 변경) 수행하지 않은 프로그램이 true를 돌려줍니다 경우 false를 반환합니다. 그러나 전체 구문 분석의 결과가 실패하지 않는 한 AB()가 실행되는 것을 원하지 않습니다. And()는 false를 반환합니다.
그래서 내가 뭘하고 싶은지, Or() 함수에, And()가 false를 반환하면 스택에서 항목을 팝 할 수 있도록 스택 (정적 변수)에 현재 상태를 저장합니다. 대안을 시도하십시오.
어떻게하면 C#에서이 작업을 수행 할 수 있습니까?
개인적으로 GPPG와 같은 것을 사용하고 있습니다. – leppie
이것은 C#에서는 불가능합니다. cpu 호출 스택을 캡처하여 나중에 복원 할 수는 없습니다. –
@leppie : Gardens Point Parser Generator? 나는 그것을 들여다 볼 것이다. 그러나 나는 여전히 이것을 학습 운동으로하고 싶다. – mpen