2011-02-08 3 views
0

Java 컴파일러 프로그램 용 인터프리터를 작성하고 있습니다. 따라서 소스 코드, 구문 및 의미를 확인한 후 소스 코드를 실행할 수 있어야합니다. 소스 코드는 제 컴파일러의 입력입니다. 나는 단지 토큰을 번역 할 수 있을지 궁금해한다. 예를 들어, 화면에 내용을 인쇄한다. 그냥 System.out.print로 바꿀 수 있을까? 그런 다음 java에서 실행하기 위해 소스 코드를 다시 피드합니까?컴파일러 용 인터프리터 프로그래밍

Java 컴파일러 API를 사용하는 것에 대해 들어 봤지만 좋은 계획입니까?

미리 감사드립니다.

+4

개인적으로 "컴파일러 프로그램에 대한 통역사"가 무슨 뜻인지 잘 모르겠다 - 통역사는 이론적으로 프로그램을 실행할 수 있습니다. 단, 해당 지식을 토큰의 특정 하위 집합으로 제한한다는 의미가 아니라면 이 프로그램에서 발생합니다. 어쨌든 당신이 어떻게 동작하는지 그리고/또는 자바 스크립트로 달성하기를 바란다면 (특히'javac'에 이어'java'가 그다지 좋지 않은 이유에 대해) 더 설명했다면 잘하면 당신이 뭘하고 있는지 정확히 이해하기 쉽습니다. –

+0

인터프리터와 컴파일러가 일반적으로 서로를 배제하기 때문에 원하는 세부적인 예제가 좋다. 구조화되고 상세한 예제가 항상 좋습니다. – josefx

답변

3

당신이 요구하는 가상 머신의 구현 기술이다, 일반적으로 Java 코드를 실행하는 것은 당신이 다음 구현해야합니다 :

  1. 처음 몇 단계를 당신이 아직 생각 (디자인/언어의 의미를 설명, 구성 AST 및 코드의 필수 유효성 검사 수행
  2. 원본 Java는 정확히 동일한 방식으로 작동하는 바이트 코드를 생성해야하며, 사람이 읽을 수있는 컴퓨터에서 기계로 읽을 수있는 다른 소스 코드를 생성합니다. 여기에 자바 바이트 코드의 모습을 볼 수 있습니다. http://www.ibm.com/developerworks/ibm/library/it-haggar_bytecode/
  3. 바이트 코드를 읽고 실행하기 위해 가상 머신을 구현해야합니다.

그래서 당신은 당신이 당신의 작업에 대한 3 개 분리 구성 요소 (프로젝트)이 있어야 볼 수 있습니다 : 1. 언어 문법 2. 컴파일러 (바이트 코드 생성기) 3. 가상 머신 (바이트 코드 인터프리터)

PS 나는 작은 자바 비슷한 컴파일러를 처음부터 만들었습니다. (ANTlr 문법, 컴파일러 구현, 가상 머신 구현), 특별한 것을 필요로한다면 더 많은 정보를 당신과 공유 할 수 있습니다.

2

실제로 책을 읽거나 컴파일러에서 수업을 듣는 것이 필요합니다. SO에 대한 2 단락으로 해결할 수 없습니다.

+1

.. 또는 .. * 컴파일러에 관한 강의를 듣는다. * OP가하는 것은 무엇입니까? – bestsss

+0

@bestsss - 그는 강의를 건너 뛰었어야합니다 :-) –

1

언어를 읽고 동일한 코드를 출력하는 크로스 컴파일러를 만들 수 있습니다. 이것은 가장 간단한 옵션 일 수 있습니다.

Java 컴파일러 API를 사용하여 Java 코드를 컴파일 할 수 있습니다. 기존 코드를 Java로 먼저 변환하여 사용해야합니다.

이것은 인터프리터를 쓰는 것과 같은 것이 아닙니다. 이 숙제가 있니? 작업은 당신이 통역관을 써야한다고 말합니까? 아니면 어떤 방식 으로든 코드를 실행할 수 있습니까?

1

불행히도 어떤 스크립팅 언어를 지원할 것인지 언급하지 않았습니다. 잘 알려진 언어 중 하나 인 경우 순수한 자바로 작성된 준비된 인터프리터를 사용하십시오. 자신의 언어

그것은 그것이 BSF와 자바 5 스크립트 (http://www.ibm.com/developerworks/java/library/j-javascripting1/)를 참조하십시오

  1. 은 두 번 생각 : 당신이 정말로 필요해?당신이 확실한 경우
  2. 당신은 당신의 자신의 언어가 JavaCC에
0

먼저 생각해야합니다 빠른 답변 주셔서 대단히 감사합니다.

컴파일러 프로젝트의 일부로, 우리는 우리 자신의 지정된 언어로 작성된 프로그램을 컴파일하고 실행할 수 있어야합니다. 언어는 C와 매우 유사합니다. 나는 통역사가 어떻게 작동하는지 혼란 스럽습니다. 이것을 구현하는 간단한 방법이 있습니까? 바이트 코드를 생성하지 않고? 내 생각은 각 문장을 Java와 동등한 구문으로 변환하고 Java에서 바이트 코드 생성을 처리하도록하는 것이 었습니다.

제가 언급 한 주제를 살펴 봅니다. 다시 한 번 제안에 대해 감사드립니다.