맞아요. 컴파일러의 Front-End는 주로 소스 코드의 **문법적 정확성(Syntax)**을 검증하는 단계인데, 그 중에서도 **Lexer(어휘 분석기)**와 **Parser(구문 분석기)**는 서로 다른 수준에서 문법을 검증합니다.

🧠 요약 정리

🧱 Lexer vs Parser의 Syntax 검증 차이

항목 Lexer (Lexical Analyzer) Parser (Syntax Analyzer)
역할 소스 코드를 토큰(token) 단위로 나눔 토큰의 배열이 문법(Grammar)에 맞는지 검증
검증하는 문법 수준 어휘 수준(Lexical Syntax) 구문 수준(Context-Free Syntax)
주로 처리하는 것 키워드, 식별자, 숫자, 연산자 등 단위 식별 문장 구조(예: if문, 함수 정의 등) 분석
사용하는 규칙 정규 표현식(Regular Expressions) 기반 문맥 자유 문법(Context-Free Grammar) 기반
에러 예시 @ 같은 허용되지 않은 문자가 있을 때123abc 같은 잘못된 식별자 괄호 짝이 안 맞거나if 다음에 조건이 빠졌을 때
예시 입력 int x = 10;int, x, =, 10, ; 로 분해 위 토큰들이 변수 선언 문법에 맞는지 확인

🔍 예시로 보는 차이

코드 예시 설명 누가 잡아냄
int @value = 5; @는 유효한 식별자 문자가 아님 Lexer
float 1num = 3.14; 식별자는 숫자로 시작할 수 없음 Lexer
string name = "Hello; 문자열 리터럴이 닫히지 않음 Lexer
char c = 'ab'; 문자 리터럴은 한 글자여야 함 Lexer
int x = 0xZZZZ; 16진수에 유효하지 않은 문자 포함 Lexer
코드 예시 설명 누가 잡아냄
if (x > 0 괄호 닫힘 없음 Parser
while x < 10) {} 여는 괄호 ( 없음 Parser
int x = ; 초기화 값 없이 세미콜론 Parser
for (int i = 0; i < 10 i++) 세미콜론 빠짐 Parser
int x y = 5; 타입 선언과 변수 사이에 구문 오류 Parser
return 세미콜론 빠짐 or 반환 값 필요 Parser
if (x > 0) else {} if의 본문이 없음 Parser
func(a, , b) 인자 목록 중 쉼표 위치 오류 Parser