어떤 것들은 다른 것보다 파싱하기가 더 쉬운가?


8

WebAssembly에 대한 Wikipedia 페이지를 방금 읽었으며 " WebAssembly는 JavaScript보다 구문 분석이 더 빠르도록 설계되었습니다 "라고 생각했습니다. 익숙한?

답변:


18

이 주제는 매우 복잡합니다. 파서 알고리즘을 위해 Google을 사용할 수 있으며 자세한 자료를 많이 얻을 수 있습니다.

일반적으로 :

  • 모호성이 적을수록 구문 분석 프로세스가 빨라집니다.
  • 결정을 내리기 전에 더 많은 토큰을 고려해야할수록 더 복잡해집니다.

예를 들어 :
JS 파서 function가이 코드 에서 키워드를 볼 때 : function xyz(a, b) {}키워드 키워드는 모호합니다. 먼저 다음 토큰을 처리하고 xyz그것이 함수 선언인지를 결정하기 전에 식별자인지 확인해야합니다.

그러나 다음 토큰 인 경우 (함수 리터럴을 처리 function(a, b) {}합니다. 파서는 매우 다르게 작동해야하므로 파서의 코드가 많을수록 실행 속도가 느려집니다.

이 두 가지 목적으로 키워드가 다른 경우 모호성이 없습니다.

function_decl xyz(a, b, c) {}function_lit(a, b, c) {}

그러나 아무도 그런 언어로 글을 쓰고 싶지 않을 것입니다. 그러나 WebAssembly는 직접 작성해서는 안됩니다. 이를 통해 언어는 인간이 아닌 기계에 맞춰질 수 있습니다.


1
이것이 Lisp이 매우 쉽게 파싱되었음을 의미합니까?
Moses

9
@Moses : 네, 순진한 lisp 파서를 작성하는 것은 쉬운 일이 아닙니다. 구문은 추상 구문 트리의 구조와 동 질적이며 모호성이 없기 때문입니다.
Phoshi

4
또 다른 좋은 예는 바이트 코드이며 종종 루핑 switch 문으로 구문 분석 할 수 있습니다.
whatsisname

@whatsisname 사실, 같은 정기 총회 및 웹 총회에 적용
marstato
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.