구문과 문법의 차이점은 무엇입니까?


14

구문과 의미의 차이점을 이해합니다.

구문 : 기호를 결합하여 유효한 표현식이나 문장을 만드는 방법
의미론 : 표현이나 진술을 형성하는 상징의 의미.

그러나 문법은 무엇입니까? 예를 들어 : 때때로 사람들은 일부 구문이 "문법적으로 부정확하지만 구문 상으로는 정확하다"고 말합니다. 무슨 뜻인가요?


FWIW, 이것은 나에게 넌센스처럼 들립니다. 언어의 문법이 코드를 받아들이면 구문을 따릅니다. 아마도 누군가는 "구문"에 대한 매우 광범위하고 비표준적인 정의를 가지고있을 것입니다. 컨텍스트 / 소스?

@delnan. 사실이 아니다. 예를 들어 int;문법적으로는 유효하지만 C ++에서는 문법적으로 잘못 구성되어 있습니다. 문법은이 코드에 문제가 없지만 구문 제약 조건에서는 선언의 첫 부분에 클래스 지정자 또는 열거 자 지정자가 없거나 C ++ 11에서 friend-specifier 가 없으면 이름을 제공해야 합니다 .
Johannes Schaub-litb

@ JohannesSchaub-litb : 문법의 일부를 인용하여주의를 기울이시겠습니까?

@Johanes 그것은 문제의 상황과 반대입니다.
Nicole

2
@ Johannes Schaub : "int;"를 만드는 규칙 유효한? 문법은 구문을 정의합니다.
케이시 패튼

답변:


6

문법은 특정 언어의 구문을 정의하는 규칙 집합입니다.

사람들이 파서 (특히 yacc, Byacc, ANTLR 등과 같은 파서 생성기에서 생성 된 파서)에 대해 구체적으로 이야기 할 때, 좀 더 머리를 쪼개고 생성기의 코드를 사용하여 인코딩 된 구문 규칙에 대해 이야기 할 수 있습니다 규칙에 첨부 된 코드에 의해 별도로 시행되는 부분과 규칙. 예를 들어, 배열을 정의 할 때 C에서 배열에 지정한 크기는 0이 아닌 양의 값이어야합니다. 문법 규칙은 기본적으로 다음과 같이 말할 수 있습니다.

typename var_name '[' unsigned_int ']'

... 그리고 별도로, unsigned_int가 0이 아닌지 확인하는 약간의 코드가 있습니다. 이 경우, 두 약간 다른 요구 사항을 갖는 (함께 시행하는 것이, 우리는 언어 자체의 요구 사항에 맞게 가정), 구문과 서로 따로 문법의 요구 사항에 대한 이야기에 어떤 의미합니다.


3

그 차이는 희미하고 너무 걱정할 가치가 없습니다.

사람들은 때때로 구문 정확성이라는 우산 아래 상황에 맞는 제약을 포함 할 것 입니다. 가장 일반적인 예는 유형 시스템입니다. 또 하나는 Java의 "반환 후 문 없음"규칙입니다. 이것은 형식적인 토론을 단순화합니다. 구문은 의미의 영역 인 언어 (일련의 문장 / 표현 / 프로그램)를 생성합니다. 다른 어떤 것도 "프로그램이 아니다", 그리고 시맨틱은 그것을 방해 할 필요가 없다.

대조적으로, "문법"은 일반적으로 문맥이없는 언어 를 설명하는 방법을 의미합니다 (속성 문법에도 불구하고).

그것에 대해 많이 걱정 가치가 없어 그 이유는 타입 시스템은 자주 "정적으로 간주되는 것입니다 의미 그들이"이기 때문에 언어의 "를 구문 정확성에 대한 징계". 때로는 언어에 적절한 문맥없는 문법이없는 경우도 있습니다. 예를 들어 C는 파서에서 정보를 렉서로 다시 공급해야합니다.

실용적으로 "구문"과 "문법"의 구별에 의존하는 사람은 그렇게 말하고 그들이 의미하는 바를 더 잘 설명했습니다.


차이가 왜 퍼지인지 이해할 수 없습니다. 문법은 구문을 설명합니다.
케이시 패튼

1
@Casey, no, "syntax"라는 단어의 한 사용법에 따르면 문법 은 구문 의 수퍼 셋 을 지정 합니다.
Ryan Culpepper

0

문법은 언어를 정의하는 일련의 규칙입니다. 그보다 는 문법은 구문과 의미를 설명합니다 . 언어에는 두 가지 문법이있을 수 있습니다.

  • 구문 문법 (언어의 기호 순서를 설명하는 규칙 집합)
  • 시맨틱 문법 (유효한 시맨틱 배치 및 해당 기호 사용을 설명하는 규칙 세트)

예를 들어 C에서 문법의 일부는 다음과 같습니다.

if statement -> if_keyword "(" expression ")" if_block
if_keyword -> "if"
logical_statement -> some other stuff here...

의미:

an if statement is made of an if keyword followed by a parenthesis followed by an expression followed by a parenthesis followed by an if block
an if keyword is ....

문법을 정의하는이 방법을 살펴보십시오 . 문법에 대해 정말로 궁금하다면 GNU Bison을 살펴보십시오. GNU Bison 은 기본적으로 언어의 문법을 설명하는 도구입니다.

"문법적으로 부정확하지만 구문 상 올바른"은 너무 의미가 없습니다. 어쩌면 그들은 언어의 의미를 설명하는 문법을 언급하고있을 것입니다. 그래도 "의미 적으로 정확하지 않다"고 말하는 것이 더 의미가있을 것입니다.


7
아닙니다. 문법은 의미론을 정의하지 않으며 contextfreeart.org
SK-logic
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.