2016-09-01 8 views
0

이제 가상 컴퓨터를 개발합니다. 바이트 코드 해석기는 flex와 bison을 사용합니다.들소 기반 인터프리터에서 분기를 구현하는 방법은 무엇입니까?

some: 
add r0 4 4 
jmp some 

내 질문은 : 여기에 예를 들어 일부 코드가 얼마나 JMP 명령을 처리하는? 들소에게 라벨로 돌아가서 분석을 계속하도록 요청할 수 있습니까?

내가 바이트 코드 인터프리터를 개발,

+0

중복 된 http://stackoverflow.com/questions/37186142/goto-label-in-the-same-loop-in-bison/ –

답변

0

아니, 당신은 들소 돌아 갈 수 없습니다 ... 컴파일러 없습니다. 일반적으로 Bison은 코드를 파싱하고 일종의 중간 표현을 생성합니다. AST 또는 바이트 코드와 같습니다. 그런 다음 별도의 단계로 실행합니다.

따라서, 바이트 코드 형식의 어셈블리 언어를 구문 분석 중이므로이를 실제 바이트 코드로 변환하는 것이 좋습니다. 파서가 "add r0 4 4"를 보았을 때 바이트 코드를 포함하는 배열에 해당하는 바이트 시퀀스를 추가하면됩니다. 그런 다음 파서가이 배열을 만든 후에 실제로 바이트 코드를 실행하는 함수에 전달할 수 있습니다.

소스 파일을 바이너리 바이트 코드 파일로 변환하는 어셈블러와 바이트 코드 파일을 읽고 실행하는 바이트 코드 인터프리터라는 두 개의 별도의 프로그램으로 나눌 수도 있습니다. 후자는 Bison을 전혀 사용할 필요가 없으며 그냥 바이트를 읽고 switch을 읽습니다.

+0

오, 이해했습니다! 먼저 바이트 코드의 텍스트 버전을 실제 바이너리 바이트 코드 (어셈블러)로 번역 한 다음 별도의 프로그램/알고리즘으로 실행합니다. 영어가 모국어가 아닙니다 ... "중간 바이트 코드", "실제 바이트 코드"라는 다른 이름이 있습니까? – Saitei

+0

@Saitei 텍스트 버전은 일반적으로 "어셈블리 코드/언어"또는 "어셈블리"(실제 기계 언어의 텍스트 버전과 동일) 및 바이너리 버전을 "바이트 코드"라고합니다. – sepp2k

+0

감사합니다! 너 나 많이 도와 줬어! – Saitei