"토큰 라이저", "파서"및 "렉서"가 무엇인지 그리고 이들이 서로 어떻게 관련되고 사용되는지에 대한 명확한 정의를 찾고 있습니까?
"토큰 라이저", "파서"및 "렉서"가 무엇이며 서로 어떻게 관련되어 있는지에 대한 명확한 정의를 찾고 있습니다 (예 : 파서에서 토크 나이저를 사용하거나 그 반대)? 데이터 선언 및 정의를 추출하기 위해 c / h 소스 파일을 통과하는 프로그램을 만들어야합니다.
나는 예제를 찾고 정보를 찾을 수 있지만 문법 규칙, 구문 분석 트리 및 추상 구문 트리와 같은 기본 개념을 이해하고 서로 상호 관계를 맺는 방법을 실제로 고심하고 있습니다. 결국 이러한 개념은 실제 프로그램에 저장해야하지만 1) 모양은 2) 일반적인 구현이 있습니다.
Lex 및 Yacc와 같은 이러한 주제와 프로그램에서 Wikipedia를 살펴 봤지만 컴파일러 클래스 (EE 전공)를 겪어 본 적이 없어서 무슨 일이 일어나고 있는지 완전히 이해하기가 어렵습니다.
토크 나이 저는 일반적으로 공백 (탭, 공백, 줄 바꾸기)을 찾아 텍스트 스트림을 토큰으로 나눕니다.
어휘 분석기는 기본적으로 토크 나이저이지만 일반적으로 토큰에 추가 컨텍스트를 연결합니다.이 토큰은 숫자이고 토큰은 문자열 리터럴이며 다른 토큰은 항등 연산자입니다.
파서는 렉서에서 토큰 스트림을 가져 와서 원래 텍스트로 표시되는 (일반적으로) 프로그램을 나타내는 추상 구문 트리로 바꿉니다.
마지막으로 확인한 주제에 대한 가장 좋은 책은 "컴파일러 : 원칙, 기술 및 도구"로 보통 "드래곤 북"으로 알려져 있습니다.
예:
int x = 1;
어휘 분석기 나 토큰 화기는 토큰을 'int', 'x', '=', '1', ';'로 나눕니다.
파서는 그 토큰을 가져 와서 어떤 식 으로든 이해하는 데 사용합니다.
- 우리는 진술이있다
- 정수의 정의입니다
- 정수는 'x'입니다
- 'x'는 값 1로 초기화해야합니다.
나는 어휘 분석기와 토크 나이저가 기본적으로 같은 것이고, 그것들을 텍스트를 그 구성 요소 부분 ( '토큰들')으로 부수 었다고 말할 것이다. 그런 다음 구문 분석기는 문법을 사용하여 토큰을 해석합니다.
나는 정확한 용어 사용법에 너무 매달리지 않을 것입니다. 사람들은 종종 대량의 텍스트를 해석하는 행동을 설명하기 위해 '구문 분석'을 사용합니다.
( 주어진 답변에 추가 )
- 토크 나이는 것 또한 의견을 제거하고 만 돌아 토큰을 렉서에.
- Lexer는 또한 해당 토큰의 범위를 정의합니다 (변수 / 함수)
- 그런 다음 파서는 코드 / 프로그램 구조를 구축합니다
'development' 카테고리의 다른 글
파이썬 문자열은 [u'String ']으로 인쇄 (0) | 2020.07.03 |
---|---|
node.js 앱의 코딩 스타일 가이드? (0) | 2020.07.03 |
네임 스페이스 std에서 템플릿 클래스를 전달하는 방법은 무엇입니까? (0) | 2020.07.03 |
파이썬 커맨드 라인에서 나가기 (0) | 2020.07.03 |
단축키를 사용하여 Google 검색 결과 탐색 (0) | 2020.07.03 |