문제

C/C ++ 컴파일러는 소스 코드에서 탈출 문자 [ ""]를 어떻게 조작합니까? 컴파일러 문법은 해당 문자를 처리하기 위해 어떻게 작성됩니까? 컴파일러는 그 캐릭터를 만나고 나서 무엇을합니까?

도움이 되었습니까?

해결책

대부분의 컴파일러는 부품으로 나뉩니다. 컴파일러 프론트 엔드를 어휘 분석기 또는 스캐너. 컴파일러 의이 부분은 실제 문자를 읽고 토큰을 만듭니다. 그것은 탈출 캐릭터를 볼 때 진짜 (예 : 문자열 내부에 나타날 때) 또는 다음 문자를 수정하는 상태 머신이 있습니다. 토큰은 그에 따라 탈출 문자 또는 다른 토큰 (예 : 탭 또는 신형)으로 출력됩니다.파서). 상태 기계는 여러 문자를 토큰으로 그룹화 할 수 있습니다.

다른 팁

이 주제에 대한 흥미로운 메모는입니다 신뢰 신뢰 [PDF 링크.

이 논문은 컴파일러 가이 문제를 정확하게 처리 할 수있는 한 가지 방법에 대해 설명하고 C-Written-In-C 컴파일러가 코드를 ASCII 값으로 명시 적으로 변환하지 않는 방법을 보여줍니다. 새 이스케이프 코드를 컴파일러로 부트 스트랩하여 새 코드에 대한 ASCII 값에 대한 이해도 암시 적입니다.

일반적으로 다음 캐릭터를 피합니다.

  • 문자열이 문자 그대로 또는 문자 문자 그대로, 그것은 다음 캐릭터를 탈출한다는 것을 의미합니다. \a '경고'(터미널을 깜박이거나 경고음 또는 무엇이든)를 의미합니다. \n '라인 피드'를 의미하고 \xNUM 예를 들어 16 진수를 의미합니다.
  • 문자열 내에서 (그리고 라인 전체의 주석 내에서도!)에 관계없이 새로운 라인 앞에서 마지막으로 보이는 캐릭터로 보이면, 라인 컨퍼런스 역할을합니다. 다음 Newline 캐릭터는 무시되고 다음 줄은 다음과 같습니다. 현재 라인과 병합되었습니다.

다음 캐릭터 (예 : \n)은 C 컴파일러의 단일 문자입니다 - 스캐너는 문자 토큰으로 파서에 선물을 제공하므로 이스케이프 캐릭터를위한 Parser의 특수 구문 규칙이 필요하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top