2012-04-05 2 views
2

JS가 실제로 구문 분석되는 방식을 이해하려고합니다. 그러나 내 검색은 "파서/생성기"(매우 의미있는 것을 모르겠다) 또는 "JS"엔진을 사용하여 JS 구문을 파싱하는 방법을 모호하게 문서화 한 프로젝트를 반환합니다. 나는 많은 코드를 조사하고 모든 일생을 이해하려고 노력하고 싶지 않다. (나는 그렇게 할 수는 있지만, 너무 오래 걸린다.)JavaScript 파서는 어떻게 작동합니까?

JS 코드의 임의의 문자열이 실제로 객체, 함수, 변수 등으로 변환되는 방법을 알고 싶습니다. 프로 시저와 그 문자열을 물건으로 바꾸고 저장하고 참조하고 실행하는 기술을 알고 싶습니다.

이에 대한 문서/참고 자료가 있습니까?

+2

JavaScript는 다른 언어와 마찬가지로 구문 분석됩니다. http://en.wikipedia.org/wiki/Parsing. 이 파일은 정의 된 문법과 일치하고 토큰으로 분리됩니다. 그런 다음 해석되어 실행될 수 있습니다. http://en.wikipedia.org/wiki/Interpreter_(computing) – Matt

답변

2

파서는 아마 모든 종류의 방식으로 작동하지만 근본적으로 토큰 화의 단계를 거쳐 컴파일러에 결과를 주면 컴파일러가 결과를 프로그램으로 바꿀 수 있습니다. 예를 들어, 주어진 :

function foo(a) { 
    alert(a); 
} 

구문 분석기는 공백 문자를 첫 문자 "f"로 제거합니다. 속하지 않는 것을 얻을 때까지 문자를 수집합니다. 공백은 토큰의 끝을 나타냅니다. 그것은 "foo"의 "f"로 시작하여 "(", 그래서 이제는 토큰 "function"과 "foo"를가집니다.) "("은 독자적으로 토큰이므로 3 그런 다음 "a"다음에 ")"을 추가하여 두 번째 토큰을 만들어 5 등을 만든다.

공백은 공백이 필요한 토큰 사이에만 필요하다. 예를 들어 공백 또는 "function"과 "foo"사이의 다른 토큰)

토큰 화 작업이 완료되면 컴파일러가 "function"을 식별자로 간주하고이를 "function"키워드로 해석합니다. 언어 문법이 알 수있는 식별자 인 "foo"는 함수 이름이고, "("는 그룹화 연산자를 열고 따라서 형식 매개 변수 목록의 시작 등을 나타냅니다.

컴파일러는 한 번에 하나씩 토큰을 처리 할 수도 있고, 덩어리로 잡아서도되고, 이상한 것들을 실행하여 빠르게 실행할 수도 있습니다.

How do C/C++ parsers work?을 읽을 수도 있습니다. 단서가 더 있습니다. 또는 Google을 사용하십시오.

1

실제 JS 엔진이 작동하는 방식과 거의 일치하지 않지만 더글러스 크록 포드 (Douglas Crockford)의 기사 Top Down Operator Precedence을 읽는 것이 좋습니다. 여기에는 파싱하는 Javascript 하위 집합으로 작성된 작은 작업 렉서 및 파서에 대한 코드가 포함되어 있습니다. 적어도 실제 구현이 어떻게 작동하는지에 대한 개요를 제공하는 매우 읽기 쉽고 간결한 코드입니다 (좋은 설명과 함께).

Crockford의 "Top Down Operator Precedence"보다 일반적인 기술은 recursive descent 구문 분석으로, JS에서 JS를 완전히 구현 한 Narcissus에서 사용됩니다.

관련 문제