프로그래밍 언어에서 구문과 의미의 차이점은 무엇입니까?
프로그래밍 언어 (예 : 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, (,)"]가 있습니다. 같은 방식으로 함수, 함수 구문, 함수 선언, 정의, 초기화 및 호출을 사용하는 방법에 대해 매우주의해야합니다.
의미 론적이지만 문장이나 문장의 논리 또는 개념과 관련이 있습니다. 개념이나 논리에서 벗어난 것을 말하거나 쓰는 경우. 그렇다면 의미 상 잘못되었습니다.
'programing' 카테고리의 다른 글
Vi에서 줄 번호를 제거하는 방법은 무엇입니까? (0) | 2020.08.23 |
---|---|
Linux는 주어진 문자열로 파일 이름을 찾습니다. (0) | 2020.08.23 |
특정 상태 코드를 반환하고 Controller에서 내용이없는 방법은 무엇입니까? (0) | 2020.08.23 |
Scala의 케이스 클래스에 대한 오버로드 생성자? (0) | 2020.08.23 |
PostgreSQL 쿼리의 일부로 정수를 문자열로 어떻게 변환합니까? (0) | 2020.08.23 |