2009-09-29 6 views
0

컴파일러 디자인에서 줄 바꿈과 공백은 동일합니까? 공백 문자로 개행 문자를 대체하는 매크로를 작성했다면, 이것이 맞습니까 아니면 문제가 발생합니까?컴파일러 디자인

답변

4

언어에 따라 다릅니다. 모든 종류의 공백이 다루어지고 있으며, 계속되었습니다. (나는 인용 된 문자열이나 그와 같은 문장에서의 공백에 대해서 말하지 않고 문장을 만드는 것만을 말하고있다.)

C와 C++에서 전 처리기 지시문은 줄 바꿈으로 끝나지만 그 공백 이외의 공백이있다.

구식 FORTRAN의 경우 명령문은 특정 열 (7-72)에 있어야하며 다음 카드의 6 열에 연속 문자가 없으면 카드 끝은 명령문을 종료하지만 열 7-72의 공백은 완전히 선택 사항입니다. DO 10 I = 1, 10은 루프 문 이었으므로 DO 10 I = 1. 10은 변수 DO10I에 값 1.1을 할당했기 때문에 구문 분석이 어려웠습니다.

마찬가지로, 처음 가정용 컴퓨터에서 사용했던 BASIC에서는 줄 바꿈 문자가 유일한 중요한 공간이었으며 새 줄 번호와 문장이 필요했습니다.

파이썬에서는 공백을 사용하여 명령문을 종료하고 명령문 그룹을 정의합니다.

많은 언어에서 공백의 본질은 중요하지 않지만 언어 토큰 사이에는 공백이 있어야하며 그 사이에는 공백이 있어야합니다.

그래서 대답은 "의존적"이며 컴파일러 이론의 기본 원칙이 없습니다 (공백을 사용하면 어휘 분석이 크게 단순해진다는 것을 제외하고는).

1

중요한 공백 (예 : 안쪽 따옴표)과 명령 또는 명령문 사이의 관련없는 공백을 구별해야합니다.

+1

그가 쓸모없는 공백을 의미한다고 생각할 수 있습니다. –

9

언어에 따라 다릅니다. 예를 들어 파이썬에서는 작동하지 않습니다.

+0

* 정답입니다! –

0

정말 언어의 구문에 따라 다릅니다. 언어 자체가 이런 종류의 문자 (Python을 생각해보십시오)에 민감한 경우 교체하면 문제가 발생합니다. 그렇지 않다면 나는 어떤 문제도 예견하지 않는다. 대부분의 경우 공백을 제거 할 수 있습니다 (문자열 외부).

4

언어의 문법에 따라 다릅니다. 일부 언어 (예 : Python)는 명령 줄 종결 자로 줄 바꿈을 사용합니다. 코드 레이아웃에 매우 민감한 언어는 거의 없습니다 (예 : Haskell, 레이아웃이 적용되지 않은 구문도 허용됨).

2

공백의 중요성은 전적으로 구문에 따라 다릅니다. 다음 프로그래밍 언어를 참조하십시오. Whitespace

매우 어리석은 언어이지만 큰 의미가 있습니다.

+0

+1 공백에 대한 언급 : –

1

아니요 일부 언어 (VB)는 줄 바꿈을 명령문 종료 문자로 간주합니다. 그리고 모든 언어는 컴파일러가 아닌 스캐너 (렉서)를위한 별도의 작업이라고 생각할 수 있지만 줄 번호를 오류 및 경고로보고하기 위해 줄 바꿈을 추적합니다.

+0

동의. 이것은 렉서가 처리해야 할 것이며 언어에 따라 다릅니다. –

0

일부 언어는 줄 바꿈을 신경 쓰지 않고 일반적으로 ';'을 읽지 만 나머지 다른 줄 문자는 줄 바꿈에서 실제로 예리하게 끝나며 일반적으로 연속 문자가 보통 '\'입니다.

그 중 일부는 특히 Ruby가 있습니다.루비에서 개행은 일반적으로 문장을 끝내지 만 파서는 더 많은 문장을 읽어야 하는지를 알아낼 수 있습니다. 이진 연산자로 끝나는 라인, 열린 괄호 및 그 밖의 것들은 문장을 종료하지 않습니다.

우리는 블록 구분 기호를 들여 쓰기 수준으로 표현하는 매우 멋진 특성을 가진 Python을 언급해야합니다.

0

컴파일러의 어휘 분석기과는 확실히 공백과 줄 바꿈이 다릅니다.

언어를 무시하거나 토큰으로 변환하는지 여부는 물론 언어 구문에 따라 다릅니다.

0

나는 지금까지 꽤 잘 대답했다고 생각하지만, 사람들이 일반적으로 오류 출력에서 ​​기대하는 줄 번호를 추적 할 수 있도록 줄 바꿈을 별도로 처리하는 것이 가치 있다는 것을 추가하고 싶습니다. 일부 렉서 제너레이터는이 작업을 수행 할 수 있지만 일부 작업은 수행하지 않을 수 있습니다. 그 외에도 특정 언어가 구별 될 필요가 있는지 여부는 문제가되는 언어에 따라 달라집니다.

0

프로그래밍 언어를 디자인하는 경우 공백을 사용하여 토큰을 구분할 수있을뿐만 아니라 토큰을 구분할 수있을뿐만 아니라 작성된 프로그램의 가독성을 높일 수 있습니다.