2012-05-01 2 views
4

순수한 파이썬 환경 (Google AppEngine)에서 간단한 자바 스크립트 코드를 실행하려고합니다.자바 스크립트를 파이썬 바이트 코드로 변환

PYJON을 사용해 보았지만 실제로 사용하기에 충분하지 않은 것으로 보입니다 (예 : 앞으로 참조되는 함수 또는 do-while을 처리하지 못해 배열 사용에 중단됨).

하나의 아이디어는 pynarcissus를 사용하여 JavaScript를 구문 트리로 변환하고이 트리를 Python 바이트 코드로 컴파일 될 수있는 Python AST로 변환하는 것입니다.

아무도 이것을 전에 했습니까? 이 아이디어에 문제가 있습니까?

+0

왜 파이썬 바이트 코드가 아닌 파이썬 소스 코드입니까? 프로그래밍 방식으로 JS를 번역해야합니까? –

+1

GAE에서 Javascript를 실행하려는 경우 Java로 변환하는 것이 더 나은 방법 일 것입니다. Rhino에서 JS JVM을 실행할 수 있습니다. –

+0

AST가 구문 분석 된 JavaScript에 가장 가깝다고 생각했습니다. 그리고 결국에는 실행을위한 바이트 코드가 필요할 것입니다. 그러나 Python 소스는 프로그래밍 방식으로 바이트 코드로 변환 될 수도 있습니다. –

답변

2

ply을 사용하여 VBScript와 새로운 언어에 대해 비슷한 작업을 수행했지만 AST를 작성한 다음 Python AST로 변환하는 대신 Python AST를 곧바로 빌드합니다. on을 사용하여 노드 클래스를 사용하고 때로는 잘 맞지 않는 일부를 서브 클래 싱하고 재정의합니다.

자바 스크립트 용 AST를 빌드 할 때 pynarcissus를 사용할 수 있기 때문에 AST를 변환하는 것이 더 쉽습니다.하지만 파서를 사용하여 파이썬 AST를 빌드하는 것이 더 나은 방법이 아닌지 확인하는 것이 좋습니다.

언어가 구문법으로 일반적인 방언으로 축소 될 수있는 한,이 접근 방식에는 고유 한 문제점이 없습니다. 힘든 일이지만, 끝낼 수 있습니다. 나는 파서를 사용할 수 없기 때문에이 작업을 수행했고 AST를 작성하기 위해 작성하는 것은 의미가 없다. VBScript의 경우 기록 된 매크로 만 처리 했으므로 코드는 매우 안정적이었고 대부분 한 줄짜리였습니다.

+0

꽤 복잡한 파서를 수정하고 싶지 않습니다. (그래서 원본과 동기화하여 유지할 수 있습니다). –

+1

고유 한 문제가 있습니다. Python과 Javascript는 단순히 구문이 다른 동일한 언어가 아닙니다. –

+1

이것은 고유 한 문제가 아닙니다. 문제가 있습니다. 두 가지 AST에서 공통 부분 집합을 찾는 해결책이 있습니다. 우리는 대서양 표준시에 대해 이야기하고 있습니다. 따라서 코드와 구문은 동일한 하위 집합으로 축소 할 수있는 한 중요하지 않습니다. 파이썬과 VBScript가 같은 언어가 아니기 때문에 서로 다른 언어라는 주장은이 접근 방식에 내재 된 문제를 지적하지 않습니다. 사실, VBScript에서 모호한 '='을 구문 분석하는 데 더 많은 문제가 발생했습니다. 올바른 Python AST를 만드는 것보다. –

0

필자가 아는 한, 파이썬에서 자바 인터프리터를 완전하고 강력하게 구현 한 것은 없습니다. 가장 좋은 방법은 Rhino 인터프리터를 사용하여 Java의 응용 프로그램 대체 버전을 배포하고이를 응용 프로그램의 기본 버전과 함께 웹 서비스로 호출하는 것입니다.

관련 문제