자바 스크립트를 통해 구문 분석하고 특정 라이브러리의 함수에 대한 모든 변수 선언, 속성 및 호출을 찾고 싶습니다.자바 스크립트 파일을 통해 구문 분석에 접근하는 방법은 무엇입니까?
정규 표현식, 렉서 (lexer)는 이미 수행 한 작업을 사용합니다 (존재합니까?) ....?
사실 내가 원하는 것은 객체 네임 스페이스와 메소드가 정적 분석을 통해 수정되지 않는다는 것입니다.
자바 스크립트를 통해 구문 분석하고 특정 라이브러리의 함수에 대한 모든 변수 선언, 속성 및 호출을 찾고 싶습니다.자바 스크립트 파일을 통해 구문 분석에 접근하는 방법은 무엇입니까?
정규 표현식, 렉서 (lexer)는 이미 수행 한 작업을 사용합니다 (존재합니까?) ....?
사실 내가 원하는 것은 객체 네임 스페이스와 메소드가 정적 분석을 통해 수정되지 않는다는 것입니다.
당신은 정규 표현식으로 그것을 할 수없고 아마도 당신 자신의 구현을 ecma-standard 262 (총 과잉이다)으로 쓰고 싶지 않을 것입니다.
나는 Google의 V8 자바 스크립트 엔진을 더 정확하게 파고, PyV8. 당신이 그것을 사용할 수 있습니다 것이 좋습니다.
당신은 내가 (PIP 설치가 내 x64 시스템에 오류가 발생했습니다, 그래서 소스를 사용)를 설치하는 데 사용되는 코드는 문제가 있었다 경우
apt-get install subversion scons libboost-python-dev
svn checkout http://v8.googlecode.com/svn/trunk/ v8
svn checkout http://pyv8.googlecode.com/svn/trunk/ pyv8
cd v8
export PyV8=`pwd`
cd ../pyv8
sudo python setup.py build
sudo python setup.py install
나는 이러한 명령에 대한 오류를하지 않았다 기억으로 나를. (브라우저에서 당신을 호출해야
import PyV8
class Global(PyV8.JSClass): # define a compatible javascript class
def hello(self): # define a method
print "Hello World"
def alert(self, message): # my own alert function
print type(message), ' ', message
@property
def GObject(self): return self
def __setattr__(self, key, value):
super(Global, self).__setattr__(key, value)
print key, '=', value
G = Global()
ctxt = PyV8.JSContext(G)
ctxt.enter()
ctxt.eval("var a=hello; GObject.b=1.0; a();")
list_all_cmd = '''for (myKey in GObject){
alert(GObject[myKey]);
}'''
ctxt.eval(list_all_cmd)
ctxt.leave()
:
더 복잡한 헬로 WOLRD 예는 전역 객체의 일부 varibales 목록 : 질문 자체에
답변 (나는 그것을 copypasted하지만 일) 전역 객체 - 창)
이 코드가 출력 :
b = 1
Hello World
<class '__main__.Global'> <__main__.Global object at 0x7f202c9159d0>
<class '_PyV8.JSFunction'> function() { [native code] }
<type 'int'> 1
<class '_PyV8.JSFunction'> function() { [native code] }
<class '_PyV8.JSFunction'> function() { [native code] }
<class '_PyV8.JSFunction'> function() { [native code] }
<class '_PyV8.JSFunction'> function() { [native code] }
<class '_PyV8.JSFunction'> function() { [native code] }
<class '_PyV8.JSFunction'> function() { [native code] }
<class '_PyV8.JSFunction'> function() { [native code] }
<class '_PyV8.JSFunction'> function() { [native code] }
Windows 또는 Linux 용 pyV8을 사용하셨습니까? –
@EduardFlorinescu, 물론 리눅스! =) – Sergey
boost.python을 설치할 때 몇 가지 문제가 발생했습니다 –
Mozilla의 Rhino을 사용할 수 있습니다. Java로 작성된 Javascript 구현입니다. 1.7R3 릴리스에는 새로운 AST API가 있습니다. 당신이 자바 스크립트에서이 작업을 수행하려면 수업은 org.mozilla.javascript.ast
에서 사용할 수있는, JavaScript parser in JavaScript
는 희망이 도움이 토론을 참조하시기 바랍니다.
나는 pynocos (python rhino 포트), pynarcissus, pyV8을 이미 내 aproach를 확인해 주셔서 고맙습니다. :) 또한 jslint 파서를 사용하여 sugestion을 주셔서 감사합니다. 파이썬 용 jslint 포트를 찾을 수도 있고 정규 표현식을 볼 수도 있습니다. . 나는 그것이'
브라우저는 이미 꽤 잘한다. inspector/profiler를 사용하여 파싱 결과를 볼 수 있습니다. –