[syntax] 프로그래밍 언어에서 구문과 의미의 차이점은 무엇입니까?

프로그래밍 언어 (예 : C, C ++)에서 구문의미론 의 차이점은 무엇입니까 ?



답변

구문은 언어 의 구조 또는 문법에 관한 것입니다. 질문에 대한 답입니다. 유효한 문장을 어떻게 구성합니까? 모든 언어, 심지어 영어 및 기타 인간 (일명 “자연”) 언어에는 문법, 즉 문장이 제대로 구성되었는지 여부를 정의하는 규칙이 있습니다.

다음은 C 언어 구문 규칙입니다.

  • 세미콜론으로 구분 된 문
  • IF 문의 조건식을 괄호로 묶습니다.
  • 중괄호로 묶어 여러 문을 하나의 문으로 그룹화
  • 데이터 유형 및 변수는 첫 번째 실행 가능 명령문 이전에 선언되어야합니다 (이 기능은 C99에서 삭제되었습니다. C99 및 후자는 혼합 유형 선언을 허용합니다.)

의미론은 문장 의 의미 에 관한 것 입니다. 질문에 답합니다.이 문장이 유효한가요? 그렇다면 그 문장은 무엇을 의미합니까? 예를 들면 :

x++;                  // increment
foo(xyz, --b, &qrs);  // call foo

구문 상 유효한 C 문입니다. 그러나 그들은 무엇을 의미합니까? 이러한 명령문을 실행 가능한 명령 시퀀스로 변환하는 것이 유효합니까? 이러한 질문은 의미론의 핵심입니다.

첫 번째 명령문에서 ++ 연산자를 고려하십시오. 우선, 이것을 시도하는 것이 유효합니까?

  • x가 float 데이터 유형 인 경우이 명령문은 의미가 없으므로 (C 언어 규칙에 따라) 명령문이 구문 상 정확하더라도 오류 입니다.
  • x가 일부 데이터 유형에 대한 포인터 인 경우 명령문의 의미는 ” 주소 x의 값에 sizeof ( some data type )을 추가 하고 결과를 주소 x의 위치에 저장”하는 것입니다.
  • x가 스칼라이면 명령문의 의미는 “주소 x의 값에 1을 더하고 결과를 주소 x의 위치에 저장”입니다.

마지막으로, 일부 의미 체계는 컴파일 타임에 결정할 수 없으므로 런타임에 평가해야합니다. ++ 연산자 예제에서 x가 이미 데이터 유형의 최대 값에있는 경우 여기에 1을 더하려고하면 어떻게됩니까? 또 다른 예 : 프로그램이 값이 NULL 인 포인터를 역 참조하려고하면 어떻게됩니까?

요약하면, 구문은 문장이 언어의 문법에 유효한지 여부에만 관련된 개념입니다. 의미론은 문장이 유효한 의미를 가지고 있는지 여부에 관한 것입니다.


답변

구문은 언어의 구조를 나타내며 사물이 어떻게 결합되는지에 대한 어원 을 추적 합니다.

예를 들어 구문이 정확하도록 유형, 이름, 세미콜론을 차례로 선언하여 코드를 조합해야 할 수 있습니다.

Type token;

반면에 의미는 의미에 관한 것입니다. 컴파일러 나 인터프리터가 구문 오류에 대해 불평 할 수 있습니다. 동료들은 의미론에 대해 불평 할 것입니다.


답변

Wikipedia에 답이 있습니다. 구문 (프로그래밍 언어)의미론 (컴퓨터 과학) 위키 페이지를 읽습니다 .

또는 컴파일러인터프리터 의 작업에 대해 생각해보십시오 . 첫 번째 단계는 문자열을 lexemes로 나누고 구문 분석을 수행 하여 토큰을 생성하는 어휘 분석으로 , 일부 추상 구문 트리 (구문 표현)를 구축합니다. 다음 단계는 이러한 AST (의미론)를 변환하거나 평가하는 것입니다.

또한, 모든 키워드는 프랑스어 동등한로 변환 된 C의 변형을 정의하는 경우 (그래서 관찰 if되고 si, do되고 faire, else되고 sinon당신은 분명히 언어의 구문을 바꿀 것 … 등 등),하지만 당신은 많이 변경되지 않습니다 의미론 : French-C로 프로그래밍하는 것은 쉽지 않을 것입니다!


답변

의미론은 코드가 의미하는 바, 의사 코드로 설명 할 수있는 것입니다. 구문은 변수 이름에서 세미콜론에 이르기까지 모든 것이 실제 구조입니다.


답변

구문 은 표현식, 명령문 및 프로그램 단위의 구조 또는 형식이지만 시맨틱 은 해당 표현식, 명령문 및 프로그램 단위의 의미입니다. 의미구문 에서 직접 따릅니다 .
구문 은 특정 프로그래밍 언어가 지정하는 코드의 구조 / 형식을 의미 하지만 의미론 은 기호, 문자 및 단어에 할당 된 의미를 처리합니다.


답변

  • 컴파일 하려면 올바른 구문 이 필요합니다 .
  • 작동 하려면 올바른 의미 체계 가 필요합니다 .

답변

프로그래밍 언어 의 구문 은 표현식, 명령문 및 프로그램 단위의 형식입니다. 그 의미 는 해당 표현식, 명령문 및 프로그램 단위의 의미입니다. 예를 들어 Java while 문의 구문은 다음과 같습니다.

while (boolean_expr) statement

이 명령문 형식의 의미는 Boolean 표현식의 현재 값이 참이면 포함 된 명령문이 실행된다는 것입니다. 그런 다음 제어는 암시 적으로 부울 표현식으로 돌아가 프로세스를 반복합니다. 부울 표현식이 거짓이면 제어가 while 구문 다음에 나오는 문으로 전송됩니다.