2012-04-27 3 views
1

이 질문은 정의, 의미론에 관한 것입니다. 통역사 의미론 : 통역사가하는 단계 명확화

나는 실시간으로 기계 코드에 소스를 번역, 해석의 일반적인 개념을 이해하거나 등 이상 실시간 또는 직전 실행 시간에 "컴파일"되는 중간 캐시로

이 있습니까 의미 소스> 바이트 코드 변환 단계와 바이트 코드> 머신 코드 번역 단계 사이에 구별이 있습니까? 사람들은 일반적으로 첫 번째 부분을 "해석"이라고하고 두 번째 단계는 "편집"이라고 부릅니다. 제발 오해하지 마시고, 나는 동적 언어의 범위를 벗어나는 편집의 정의를 요구하지 않습니다. 그것은 또 다른 주제입니다.

또한 여러 가지 기술을 구현하는 많은 수의 통역사로 인해이 두 단계를 의미 적으로 구분할 수 있습니까?

답변

2

일반적으로 해석은 통역사가 임의의 형식 (일반 소스 코드, 추상 구문 트리 (AST), 바이트 코드 ...)으로 프로그램을 실행하는 것을 의미합니다.

일부 가상 컴퓨터는 프로그램의 중간 표현을 원시 컴퓨터 코드로 변환 (컴파일)하는 JIT (많은 시간이 걸리는 컴파일러)를 많이 사용합니다. 이것은 확실히 편집의 한 형태입니다.

또한 일부 VM은 여러 단계의 컴파일 작업을 수행합니다. 처음에는 AST가 바이트 코드로 컴파일되고 나중에 머신 코드로 컴파일 될 수 있습니다.

나는 컴파일이란 기본적으로 하나의 중간 표현을 다음 표현으로 변환하는 것을 의미한다. 언어의

get next instruction 
parse and interpret its components 
dispatch its translation 

정의와 의미는 통역에 구현되어 있지만, 다른 곳에서 정의됩니다 통역이 있습니다

+0

충분합니다.그러나 바이트 코드 명령어가 코딩되어 있기 때문에 가상 시스템을 필요로한다는 것을 이해하고 가상 시스템을 구현했습니다. 하지만 VM은 일반적으로 소스> 바이트 코드 단계도 처리합니까? 나는 그것이 구현에 크게 달려 있다고 생각합니까? –

+1

글쎄, [SOURCE> INTERMEDIATE] 단계를 수행하는 파서가 VM의 일부인지 아닌지에 따라 달라집니다. –

+0

파서, 그게 내가 바라는 단어 야, 고마워! 인터프리터에서 파서가 아닌 부분 (또는 파서가 실행 된 후에 제공되는 부분)과 유사한 용어가 있습니까? –

1

단계는 일반적으로 유사한 루프에서 프로그램된다.

귀하의 질문에 대한 대답은 해석되거나 컴파일되는 언어의 공식적, 운영상 및 공리적인 의미 론적 정의에 있습니다. 두 경우 모두 공식 언어 정의의 의미는 사용 된 구현 기술에 관계없이 모든 해석 또는 편집을 위해 보존되고 일관되어야합니다.

인터프리터 및 컴파일러와 같은 언어의 구현은 형식적 의미 정의에 대해 언어의 각 언어 구문 구현을 테스트하는 테스트 제품군에 대해 테스트됩니다.

언어 디자이너는 의미 적 의미론과 같은 기호 형식으로 언어의 공식 정의를 생성합니다. 이 정의는 수학적 관점에서 매우 추상적입니다.

컴파일러 또는 인터프리터를 구현하는 사람은 대상 컴퓨터에서 실행될 컴파일러 또는 인터프리터를 작성하는 것과 직접 관련이있는 언어의 운영 의미 론적 정의에 더 관심이 있습니다.

언어 사용자는 프로그래머에게 언어 구문을 사용하여 프로그램을 만드는 방법을 알려주는 언어의 공리적인 정의에 더 많은 관심을 갖고 있습니다.