1

나는 내부의 SpiderMonkey을 공부하고 있습니다. 그 documentation는 말한다 :임의 논리 논리 어휘 스캐너 란 무엇이며 트리 워킹 코드 생성기는 무엇입니까?

컴파일러 구성하는 임의 논리보다는 테이블 중심 어휘 스캐너, 대서양 표준시를 생성하는 재귀 하강 파서 및 트리 도보 코드 생성기를.

랜덤 로직 렉시 컬 스캐너가 무엇이고 트리 워킹 코드 생성기가 무엇인지 알 수 없습니다. 나는 "random-logic lexical scanner"와 "tree-walking code generator"를 검색했지만 유망한 것으로 보이지는 않았다. 이 개념에 대한 포인터를 얻을 수 있습니까?

답변

2

"임의 논리 논리 어휘 스캐너"가 의미하는 바는 정규 표현식 기반 테이블 기반 어휘 스캐너 생성기를 사용하는 것보다는 어휘 스캐너가 손으로 (또는 많은 손으로) 만들어 졌다고 가정합니다. (f)lex. 아마도이 단어는 hacker lexicon, 아마도 수락 4 (일관성이없고, 세련되지 못하고 무질서한) [ "이 프로그램에는 임의의 일련의 잘못된 기능이 있습니다." "그건 그 기능에 대한 임의의 이름입니다."] 나는 더 이상의 편집 논평을 삼가겠다.

트리 워킹은 자동 생성 된 트리 워커에서 빌드되는 의미에서 "순수한"컴파일러가 거의없고 대부분의 심각한 컴파일러가 트리를 두 번 이상 수행하지만 코드 생성에서 꽤 표준적인 도구입니다. Lua와 같은 간단한 언어는 구문 분석 중에 직접 컴파일 할 수 있지만 대부분의 언어에서는 먼저 AST (Abstract Syntax Tree)를 작성한 다음 트리를 한 번 이상 둘러 볼 필요가 있습니다. (주 : 그 문구의 "abstract"는 "tree"라는 단어가 아닌 "syntax"라는 단어를 의미합니다 AST는 매우 구체적입니다.

많은 예제는 LLVM 문서를보십시오. 예를 들어 나무 산책. 또한 ANTLR은 자동 트리 생성을 수행하며 ANTLR을 사용하여 코드 생성을 자동화하거나 체계화하려는 여러 시도가있었습니다. 내가 읽지 않은 한 가지 예는 AJ Admiraal의 석사 논문 "Automated ANTLR Tree walker Generation"입니다. 왜냐하면 "나무 걷기 코드 생성"에 대한 Google 검색에서 많은 수의 히트 곡 중 첫 번째 였기 때문입니다. .

+0

예. JavaScript는 일반적인 어휘 문법을 가지고 있지 않으므로, 대부분의 파서는 스캐너가없고, 파서가 렉서에게 힌트를 주거나,'/'(나눗셈 연산자와 정규 표현식 리터럴) 및 중첩 된 템플릿 문자열 주위에 잘못 작성되도록 직접 작성됩니다. –

+0

@MikeSamuel : 자동 세미콜론 삽입 규칙은 말할 것도 없습니다. 확실히 JS는 어휘 스캔과 구문 분석 사이에 불행한 커플 링이 필요하지만 링 - 펜스 (ring-fenced)가 가능하고 플렉스/바이손 (flex/bison) 솔루션의 일부로 구현할 수 있습니다. 템플릿 파싱에는 재귀 스캔/구문 분석이 필요하지만 flex/bison을 사용하면 필요하지 않은 경우가없는 경우가 있습니다. 당연히, 무언가가 가능하다는 사실은 그것을 의무적으로 (또는 심지어 쉽사리) 만들지 못한다. 그리고 내가 이전에 말했듯이, 나는 여기서 편집 논평을 자제하려고 노력하고있다. – rici

+0

파서가 라인 터미네이터 토큰과 동등한 토큰 (내장 된 라인 터미네이터 문자가있는'/**...*/')에 접근 할 수있는 한 파서 레벨에서 세미콜론 삽입을 완전히 처리 할 수 ​​있습니다. space-comment 토큰 미리보기. –