제목은 "lexer"및 "parser"단어가 동의어인지 또는 다른 단어인지 질문하는 것입니다. Wikipedia가이 단어를 서로 바꾸어 사용하는 것 같지만 영어가 모국어가 아니므로 확신 할 수 없습니다."lexer"라는 단어가 "parser"라는 단어와 동의어입니까?
답변
아니요. Lexer는 입력 스트림을 "단어"로 분해합니다. 파서는 그러한 "단어"사이의 구문 구조를 발견합니다. 예를 들어, 주어진 입력 :
velocity (identifier)
= (assignment operator)
path (identifier)
/(binary operator)
time (identifier)
; (statement separator)
다음, 파서는 다음 구조를 확립 할 수 :
velocity = path/time;
렉서 출력은 렉서의 입력을 분리하는 데 사용되는
= (assign)
lvalue: velocity
rvalue: result of
/(division)
dividend: contents of variable "path"
divisor: contents of variable "time"
아니요. lexer는 소스 텍스트를 토큰으로 분해하지만 파서는 토큰 시퀀스를 적절하게 해석합니다.
을 파서는 토큰 시퀀스에서 추상 구문 트리를 구성하는 데 사용됩니다.
이제 토큰은 단순한 문자이고 파서를 직접 사용한다고 말할 수 있습니다.하지만 다음에 수행 할 작업을 결정하기 위해 토큰 하나만 살펴 봐야하는 파서를 사용하는 것이 편리합니다. 따라서 구문 분석기는 구문 분석기가 입력하기 전에 입력을 토큰으로 나눌 때 보통 렉서 (lexer)를 사용합니다.
보통 렉서는 순서대로 테스트되는 간단한 정규식 규칙을 사용하여 설명됩니다. 이러한 설명에서 자동으로 렉서를 생성 할 수있는 도구가 있습니다 (예 : lex
).
[0-9]+ Number
[A-Z]+ Identifier
+ Plus
파서 한편, 일반적 문법을 지정하여 설명한다. 다시 말하면, 그러한 설명으로부터 파서를 생성 할 수있는 yacc
과 같은 도구가 존재합니다.
expr ::= expr Plus expr
| Number
| Identifier
그들은 다릅니다.
렉서는 입력 문자 스트림을 입력으로 사용하여 출력으로 토큰 (일명 "어휘")을 생성합니다.
구문 분석기는 토큰 (어휘)을 입력으로 사용하여 구문을 나타내는 추상 구문 트리를 생성합니다.
두 사람은 모두 비슷하지만 상당수의 사람들 (특히 컴파일러 나 통역사 같은 것을 작성한 적이없는 사람들)은 같은 것으로 취급하거나 (더 자주) "파서"를 사용합니다 정말로 "렉서"를 의미합니다.
내가 아는 한, 렉서와 파서는 의미가 있지만 동음 이의어는 정확한 동의어는 아닙니다. 많은 출처가 비슷한 언어를 사용하지만, 렉서 (lexical analyzer의 약어)는 입력과 관련하여 토큰을 식별합니다. 파서는 토큰 스트림이 고려중인 언어의 문법을 충족시키는 지 여부를 결정합니다.
- 1. 특정 단어와 일치하는 정규식 - C#
- 2. 단어가
- 3. C# 현지화 왼쪽에서 오른쪽으로 쓴 단어와 같은 문장에서 오른쪽에서 왼쪽으로 쓰는 단어가 섞여있는 문제
- 4. 파일에서 단어와 줄 수
- 5. 가능한 단어와 일치하는 정규식
- 6. PHP 정규식 일치하는 단어와 keyphrases
- 7. 사전의 단어와 일치하는 JavaScript 알고리즘
- 8. 하스켈 - 병합 단어와 숫자 정렬하기
- 9. 텍스트의 단어와 표현을 어떻게 계산합니까?
- 10. 단어가 사전에 있거나없는 경우
- 11. NSString에 단어가 있는지 확인
- 12. 정규 표현식에 단어가 없습니다.
- 13. 단어가 숫자로 시작하지 않습니다
- 14. "I"로 시작하지만 "Integer"단어가 아닌 단어는 어떻게 일치합니까?
- 15. sed + 행의 첫 번째 단어와 일치하는 경우에만 바꿉니다.
- 16. 'Windows'라는 단어가 'Windows Communication Foundation'이라는 용어와 어떤 관련이 있습니까?
- 17. SQL (MySQL) : 문자열의 첫 단어와 일치하는 단어?
- 18. C#에서 간단한 단어와 일치하는 정규식?
- 19. PHP : 단어와 태그로 정확한 문자열을 배열로 배열
- 20. Div가 줄 바꿈시 단어와 테두리를 자르고 있습니다.
- 21. 정규 표현식 - 다음 단어와 인용 문구
- 22. Java를 사용하여 파일에 단어와 개행을 집계 하시겠습니까?
- 23. C# 문자열에 단어가 있는지 확인하십시오.
- 24. 특정 단어가 들어있는 메모와 일치합니다.
- 25. 정규식이 아닌 단어가 라인을 얻을
- 26. HTML - (! 어떤 스크롤하지 않고) 단어가
- 27. Visual Studio 추가 기능; 선택한 단어와 일치하는 모든 단어를 강조 표시 하시겠습니까?
- 28. window.location.href에 단어가 있는지 테스트 할 조건
- 29. 단어가 Java의 데이터베이스 테이블에 존재하는지 확인하십시오.
- 30. 문자열에 단어가 존재하는지 어떻게 알 수 있습니까?
"렉서"는 때로 "토큰 화기"또는 "스캐너"라고도합니다. –
@Bart 감사합니다. 실수로 질문을 잘못 작성했습니다. 나는 "lexer가 tokenizer와 동의어인가"라는 의미이므로 주석이 실제로 답변입니다. 감사. –
:) 안녕하세요. –