2009-11-15 2 views
14

이미 스캐너를 만들었으니 이제 파서를 만들어야합니다. 차이점이 뭐야?파서와 스캐너의 차이점은 무엇입니까?

+2

StackOverflow의 'Flex' 태그가 Adobe Flex Framework를 참조하기 때문에'Flex' 태그를 꺼내보다 일반적인'lexical-analyser' 태그로 바꿨습니다. –

답변

17

스캐너는 단순히 입력 문자열 (파일)을 토큰 목록으로 변환합니다. 이 토큰은 식별자, 괄호, 연산자 등을 나타냅니다.

구문 분석기는이 토큰 목록을 토큰이 어떻게 서로 잘 어울리 며 (문장이라고도 함) 토큰이 서로 잘 어울리는 지 표현하기 위해이 토큰 목록을 트리 형식 개체로 변환합니다.

프로그래밍 언어 파서의 경우, 출력은 일반적으로 AST (Abstract Syntax Tree)라고합니다. AST의 각 노드는 언어의 다른 구성을 나타냅니다 (예 : IF 문은 2 또는 3 개의 하위 노드, CONDITION 노드, THEN 노드 및 잠재적으로 ELSE 노드가있는 노드입니다.

구문 분석기는 노드에 구조적 응집력 이상의 의미를 부여하지 않습니다. 다음으로 할 일은이 구조 (때로 문맥 분석이라고 함)에서 의미를 추출하는 것입니다.

2

(일반적으로) 구문 분석은 기호 (문자, 숫자, 왼쪽 괄호 등)를 문법의 문장으로 바꾸는 것에 관한 것입니다.

어휘 분석기 ("렉서")는 소스 코드 파일의 개별 기호를 토큰으로 구문 분석합니다. 거기에서, "파서"는 그 토큰 전체를 당신의 문법 문장으로 바꾼다.

다른 말로하면, 렉서는 심볼을 토큰으로 결합하고 파서는 토큰을 결합하여 문장을 형성합니다.

관련 문제