"토큰 화기", "파서"및 "렉서스"가 무엇인지, 그리고 서로 관련되어 사용되는 방법에 대한 명확한 정의를 찾고 있습니까?

StackOverflow https://stackoverflow.com/questions/380455

  •  22-08-2019
  •  | 
  •  

문제

나는 "토 케이저", "파서"및 "렉서"가 무엇인지, 그리고 서로 관련이 있는지에 대한 명확한 정의를 찾고 있습니다 (예 : 파서는 토큰 화기를 사용합니까? 프로그램을 작성 해야하는 C/H 소스 파일을 통해 데이터 선언 및 정의를 추출합니다.

나는 예제를 찾고 있었고 몇 가지 정보를 찾을 수 있지만 문법 규칙, 나무 및 추상 구문 트리와 같은 기본 개념을 파악하고 서로 상호 관계를 맺는 방법. 결국 이러한 개념은 실제 프로그램에 저장되어야하지만 1) 어떻게 보이는지 2) 공통 구현이 있습니다.

나는 Lex와 YACC와 같은 이러한 주제와 프로그램에 대해 Wikipedia를보고 있었지만 컴파일러 클래스 (EE Major)를 겪은 적이 없어서 무슨 일이 일어나고 있는지 완전히 이해하기가 어렵다는 것을 알게되었습니다.

도움이 되었습니까?

해결책

토큰 화기는 일반적으로 공백 (탭, 공백, 새 선)을 찾아서 토큰으로 텍스트 스트림을 나눕니다.

Lexer는 기본적으로 토큰 화기이지만 일반적으로 토큰에 추가 컨텍스트를 첨부합니다.이 토큰은 숫자이며, 토큰은 문자열 문자물이며, 다른 토큰은 평등 조작자입니다.

파서는 Lexer에서 토큰 스트림을 가져 와서 원본 텍스트로 표시되는 (일반적으로) 프로그램을 나타내는 추상 구문 트리로 바꿉니다.

마지막으로 확인한 주제에 관한 최고의 책은 "컴파일러 : 원리, 기술 및 도구" 일반적으로 "The Dragon Book"으로 알려져 있습니다.

다른 팁

예시:

int x = 1;

Lexer 또는 Tokeniser는이를 Tokens 'Int', 'x', '=', '1', ';'로 나눕니다.

파서는 토큰을 가져 와서 어떤 식 으로든 이해하기 위해 사용합니다.

  • 우리는 진술이 있습니다
  • 정수의 정의입니다
  • 정수는 'X'라고합니다.
  • 'X'는 값 1으로 초기화해야합니다.

나는 Lexer와 Tokenizer가 기본적으로 같은 것이며, 텍스트를 구성 요소 부분 ( '토큰')으로 부수고 있다고 말합니다. 그런 다음 파서는 문법을 사용하여 토큰을 해석합니다.

나는 정확한 용어 사용에 너무 매달리지 않을 것입니다. 사람들은 종종 텍스트 덩어리를 해석하는 행동을 설명하기 위해 종종 '구문 분석'을 사용합니다.

(주어진 답변에 추가)

  • 토큰 화기는 또한 의견을 제거하고 반환 만 반환하십시오 토큰 렉서에게.
  • Lexer Will 또한 토큰의 범위 정의 (변수/기능)
  • 그런 다음 Parser는 코드/프로그램 구조를 구축합니다
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top