CIL로 컴파일하려고하는 사용자 정의 스택 기반 언어가 있으므로 JITed 될 수 있습니다. 언어 자체는 매우 간단합니다. 정수와 부울 만 있기 때문입니다. 그러나 각 데이터 유형에는 전용 스택이 있습니다. 언어 그 자체는 일련의 명령어들로, 각 명령어는 어느 한 스택으로부터 값을 엿보고, 푸시하고, 팝 할 수 있습니다. 명령에 의해 푸시/팝 된 정수 또는 부울 수는 절대로 변경되지 않습니다 (명령에 고정 된 값). 또한 언어가 값을 읽고 쓰며 외부 메모리를 나타내는 평면 정수 배열이 있습니다. 스택 자체는 임의적으로 깊을 수 있습니다.스택 기반 언어를 CIL로 컴파일
"add", "subtract"등과 같은 간단한 명령의 경우 정수 스택 명령을 CIL로 변환하는 것이 거의 쉽습니다. CIL 스택은 정수 스택을 대체 할 수 있습니다 (단, CIL 스택의 깊이에 대한 한도는 스펙이나 실제에서 어느 정도가 될 수 있습니까?) 그러나 StoreIfTrue와 같은 명령도 있습니다.이 명령은 정수 스택의 값을 일부 인덱스의 플랫 정수 배열에만 저장합니다 (인덱스도 포함). 부울 스택의 맨 위 값이 참이면 정수 스택에서). 그래서 일부 명령에 대해 부울 스택과 정수 스택에 대한 액세스가 필요합니다.
지금은 부울 스택을 나타내는 System.Collections.Generic.Stack을 유지 관리해야합니다. 그러나 CIL과보다 직접적으로 호환되는 단일 스택 모델에 내 사용자 지정 언어의 두 스택 모델을 "평평하게"하는 알려진 알고리즘이나 메서드가 있는지 궁금합니다.
CIL 스택은 유형이 적어 int와 bool을 처리하고 혼합 할 수 있습니다. 다중 스택 실행 모델을 유형없는 단일 스택으로 변환 할 수있는 방법이 있어야하지만 어떻게해야하는지에 대한 질문에는 분명하지 않습니다. –