programing

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

nasanasas 2020. 8. 23. 09:19
반응형

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


프로그래밍 언어 (예 : 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로 프로그래밍하는 것은 쉽지 않을 것입니다!


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


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


구문 : 언어의 문법적 구조를 나타냅니다 .. c 언어를 작성하는 경우. 데이터 유형, 토큰 사용에 매우주의해야합니다 [ "printf ()"와 같은 리터럴 또는 기호 일 수 있습니다. 3 개의 토크, "printf, (,)"]가 있습니다. 같은 방식으로 함수, 함수 구문, 함수 선언, 정의, 초기화 및 호출을 사용하는 방법에 대해 매우주의해야합니다.

의미 론적이지만 문장이나 문장의 논리 또는 개념과 관련이 있습니다. 개념이나 논리에서 벗어난 것을 말하거나 쓰는 경우. 그렇다면 의미 상 잘못되었습니다.

참고 URL : https://stackoverflow.com/questions/17930267/what-is-the-difference-between-syntax-and-semantics-in-programming-languages

반응형