2011-07-26 6 views
0

학교 프로젝트로 자바 스크립트 인터프리터를 만들어야합니다. (백엔드를 포함한 모든 것이 나에 의해 만들어 져야한다.)자바 스크립트 기반 자바 인터프리터

모든 것을 Java로 작성해야합니다. 구문 분석 및 AST 생성에 ANTLR을 사용합니다.

현재 AST로 일부 .js 코드를 구문 분석 할 수 있습니다. 따라서이 AST를 바이트 코드 시스템에서 실행할 수있는 중간 표현의 som으로 변환해야합니다.

정적으로 입력 된 언어에 대한 컴파일러 작성 경험이 있지만 JS가 동적 유형 언어이므로 여기부터 진행하는 방법에 대해서는 의문의 여지가 있습니다.

진행 방법에 대한 좋은 조언을 나에게 줄 수 있다면 감사드립니다.

개인적으로 나는 바이트 코드 머신을 먼저 만든 다음 IR을이 머신에 맞춰야한다고 생각합니다. Unfortunatly 내가 바이트 코드 - 기계를 작성하는 방법에 대한 좋은 자습서를 찾을 수 없습니다.

추신.

"자바 (아펠)에 현대적인 컴파일러 구현", "자바 (와트 & 브라운)의 프로그래밍 언어 프로세서", "언어 구현 패턴 (파)"

: 주제에 대한 다음과 같은 책 내용을 잘 알고 메신저

감사합니다 Sune

+1

호기심에서 벗어나서 전체 자바 스크립트 인터프리터를 작성하도록 요청하는 클래스는 무엇입니까? –

+1

학교 프로젝트에 대해 야심 찬 Crikey! –

답변

0

자바 스크립트를 실행하려면 IR로 변환 한 다음 바이트 코드 실행 프로그램을 수행해야하는 (일부?) 바이트 코드로 변환 할 필요가 없습니다.

자바 "엔진"에서 자바 스크립트 AST를 실행하지 않는 이유는 무엇입니까? 모든 값을 Map<String, Object>으로 저장하고 AST를 걸 때 해석 할 수 있습니다. 새로운 함수가 환경/문맥을 얻습니다 (새로운 Map<...>).

현재 컨텍스트에서 값을 찾을 수없는 경우 전역 컨텍스트 (= Map)로 되돌아 가야합니다. 은 "동적"행동에 대한

: 당신은 또한에 대한 double이 필요한 경우에만 표준 방법 사용 doubleObject.toString() 값 분석 (보다 더 역동적는 :) 얻기 어렵다) :

String value = contextMap.get(key); 
Double dvalue = Double.parseDouble(value.toString()); 
.... 
+0

다른 모든 것이 실패하면 내 백업 계획입니다. 구현하기가 쉽습니다. 하지만 더 나은 (실행 속도 및 최적화 최적화면에서) 바이트 코드 실행 – Sune1987

+0

나는 백업 값에 대한 문자열을 사용하지 않을 것이다 - 자바 스크립트 숫자는 두 배입니다. –

+0

* 원하는 경로에 비해 * 구현하기가 쉽습니다! :) (@Sean :'Object'에 업데이트 됨) – dacwe

관련 문제