스테이트먼트(컴퓨터 사이언스)

Statement (computer science)

컴퓨터 프로그래밍에서 문장은 수행되어야 할 [1]몇 가지 동작을 표현하는 명령형 프로그래밍 언어의 구문 단위입니다.이러한 언어로 작성된 프로그램은 하나 이상의 문장으로 이루어진 시퀀스에 의해 형성된다.스테이트먼트는 내부 컴포넌트(를 들어 식)를 가질 수 있습니다.

많은 프로그래밍 언어(: Ada, Algol 60, C, Java, Pascal)는 문장과 정의/선언을 구분합니다.정의 또는 선언은 프로그램이 작동할 데이터를 지정하고 문은 해당 데이터에 대해 수행할 작업을 지정합니다.

다른 문장을 포함할 수 없는 문장은 단순하며, 다른 문장을 포함할 수 있는 문장은 [2]복합적입니다.

문장(및 실제로 프로그램)의 모양은 구문 또는 문법에 따라 결정됩니다.문장의 의미는 의미론에 의해 결정됩니다.

심플한 내용

간단한 문장은 그 자체로 완전합니다.이것들에는 할당, 서브루틴 콜 및 제어의 프로그램흐름에 큰 영향을 줄 수 있는 몇 가지 문(예: goto, return, stop/halt)이 포함됩니다.일부 언어에서는 입력 및 출력, 아사션 및 종료가 특수문으로 처리되며 다른 언어에서는 사전 정의된 서브루틴에 대한 호출이 사용됩니다.

  • 과제
    • 포트란:variable = expression
    • Pascal, Algol 60, Ada:variable := expression;
    • C, C#, C++, PHP, Java:variable = expression;
  • 불러
    • 포트란:CALL subroutine name(parameters)
    • C, C++, Java, PHP, Pascal, Ada:subroutine name(parameters);
  • 주장.
    • C, C++, PHP:assert(relational expression);
    • 자바:assert relational expression;
  • 에 가다
    • 포트란:GOTO numbered-label
    • 알골 60:goto label;
    • C, C++, PHP, Pascal:goto label;
  • 돌아가다
    • 포트란:RETURN value
    • C, C++, Java, PHP:return value;

복합문

복합문장은 합리적인 깊이까지 내포할 수 있는 문구를 포함할 수 있으며, 일반적으로 이러한 문구를 준수할지 또는 반복할지를 결정하기 위한 테스트를 수반한다.

다음 예시의 표기법:
  • <statement>는 단일 스테이트먼트입니다(단순하거나 복합적일 수 있습니다).
  • <sequence>는 0 이상의 <문장> 시퀀스입니다.
일부 프로그래밍 언어는 하나의 <문>을 그룹으로 대체할 수 있도록 문장을 그룹화하는 일반적인 방법을 제공합니다.
  • 알골 60:begin <sequence> end
  • 파스칼:begin <sequence> end
  • C, PHP, Java:{ <sequence> }
다른 프로그래밍 언어에는 복합문마다 다른 특수 터미네이터가 있기 때문에 1개 이상의 문장이 자동으로 그룹으로 취급됩니다.
  • 아다:if test then <sequence> end if;

많은 복합문은 루프 명령어 또는 선택 명령어입니다.이론적으로는 이러한 각 유형의 명령어만 필요합니다.실제로 자주 발생하는 다양한 특수한 경우가 있습니다.이러한 경우는 프로그램을 이해하기 쉽게 하거나 프로그래밍을 쉽게 하거나 보다 효율적으로 구현할 수 있습니다.여기에 언급되지 않은 많은 세부 사항이 있습니다. 자세한 내용은 링크된 문서를 참조하십시오.

  • 카운트 제어 루프:
    • 알골 60:for index := 1 step 1 until limit do <statement> ;
    • 파스칼:for index := 1 to limit do <statement> ;
    • C, Java: for ( index = 1; index <= limit; index += 1) <statement> ;
    • 아다:for index in 1..limit loop <sequence> end loop
    • 포트란 90:
      하다색인 = 1,제한.     < >순서> 종료 작업 
  • 루프 시작 시 테스트를 사용하는 상태 제어 루프:
    • 알골 60:for index := expression while test do <statement> ;
    • 파스칼:while test do <statement> ;
    • C, Java:while (test) <statement> ;
    • 아다:while test loop <sequence> end loop
    • 포트란 90:
      작업하는 동안 (시험)     < >순서> 종료 작업 
  • 루프 종료 시 테스트를 사용한 상태 제어 루프:
    • 파스칼:repeat <sequence> until test; { note reversed test}
    • C, Java:do { <sequence> } while (test) ;
    • 아다:loop <sequence> exit when test; end loop;
  • 루프 중간에 테스트가 있는 상태 제어 루프:
    • C:do { <sequence> if (test) break; <sequence> } while (true) ;
    • 아다:loop <sequence> exit when test; <sequence> end loop;
  • if-statement의 간단한 상황:
    • 알골 60:if test then <unconditional statement> ;
    • 파스칼:if test then <statement> ;
    • C, Java:if (test) <statement> ;
    • 아다:if test then <sequence> end if;
    • Fortran 77+:
      한다면 (시험) 그리고나서     < >순서> 만약의 종료 
  • if-statement 쌍방향 선택:
    • 알골 60:if test then <unconditional statement> else <statement> ;
    • 파스칼:if test then <statement> else <statement> ;
    • C, Java:it (test) <statement> else <statement> ;
    • 아다:if test then <sequence> else <sequence> end if;
    • Fortran 77+:
      한다면 (시험) 그리고나서     < >순서> 또 다른     < >순서>  만약의 종료 
  • 케이스/스위치 스테이트먼트 멀티웨이 선택:
    • 파스칼:case c of 'a': alert(); 'q': quit(); end;
    • 아다:case c is when 'a' => alert(); when 'q' => quit(); end case;
    • C, Java:switch (c) { case 'a': alert(); break; case 'q': quit(); break; }
  • 예외 처리:
    • 아다: begin protected code except when exception specification => exception handler
    • 자바:try { protected code } catch (exception specification) { exception handler } finally { cleanup }
    • Python: try: protected code except exception specification: exception handler else: no exceptions finally: cleanup

구문

할당 및 서브루틴 호출을 제외하고, 대부분의 언어는 위의 예시와 같이 각 문을 특별한 단어(예: goto, if, while 등)로 시작합니다.다양한 언어로 스테이트먼트의 형식을 기술하기 위해 다양한 방법이 사용되었습니다.정식적인 방법이 더 정확해지는 경향이 있습니다.

  • Algol 60은 언어 문법 [3]사양의 새로운 수준을 설정한 Backus-Naur 형식(BNF)을 사용했습니다.
  • Fortran 77까지, 언어는 영어 산문으로 설명되었으며,[4] Fortran 90부터는 BNF의 [5]변형을 사용하여 설명되었습니다.
  • 코볼은 2차원 메타 [6]언어를 사용했다.
  • 파스칼은 구문 다이어그램과 동등한 BNF를 [7]모두 사용했습니다.

BNF는 반복을 표현하기 위해 재귀를 사용하기 때문에 반복을 직접 나타낼 수 있도록 다양한 확장이 제안되고 있습니다.

문장과 키워드

일부 프로그래밍 언어 문법에서는 키워드를 예약하거나 특별히 표시하여 식별자로 사용할 수 없습니다.이로 인해 구문 분석이 쉬워지고 사전 검색이 덜 필요하게 되는 경우가 많습니다.

고유 키워드 없음

Fortran 및 PL/1에는 예약된 키워드가 없으므로 다음과 같은 문장이 가능합니다.

  • PL/1의 경우:
    • IF IF = THEN THEN ...(두 번째)IF그리고 첫 번째THEN변수).
  • 포트란:
    • IF (A) X = 10... 조건문(다른 변형과 함께)
    • IF (A) = 2 명명된 첨자형 변수에 대한 할당IF
Fortran 95까지 공백은 옵션이었기 때문에 오타가 문장의 의미를 완전히 바꿀 수 있습니다.
  • DO 10 I = 1,5 I가 1~5로 실행되는 루프의 시작
  • DO 10 I = 1.5 변수에 값 1.5 할당DO10I

플래그가 붙은 말

Algol 60과 Algol 68에서는 특별한 토큰이 명확하게 구별되었습니다.출판용, 굵은 글씨 등입니다. begin; 플래그를 포함한 일부 특수 마킹 프로그래밍(예:'begin따옴표('begin'밑줄 친 것(begin(Illiott 503)에 장착합니다.이것은 "스트립"이라고 불립니다.

따라서 언어 구문의 일부인 토큰은 프로그래머 정의 이름과 충돌하지 않습니다.

예약 키워드

특정 이름은 프로그래밍 언어의 일부로 예약되며 프로그래머 정의 이름으로 사용할 수 없습니다.가장 인기 있는 프로그래밍 언어의 대부분은 예약된 키워드를 사용합니다.초기 예로는 FLOW-MATIC(1953) 및 COBOL(1959)이 있습니다.1970년 이후 다른 예로는 Ada, C, C++, Java, Pascal 등이 있습니다.예약된 단어의 수는 언어에 따라 달라집니다.C는 약 30개, COBOL은 약 400개입니다.

의미론

의미론은 프로그램의 의미와 관련이 있다.많은 프로그래밍 언어의 표준 문서에서는 구문/문법을 상당히 형식적이고 정확하게 표현하기 위해 BNF 또는 이와 동등한 것을 사용하지만, 프로그램의 의미/의식은 일반적으로 예시와 영어 산문을 사용하여 기술됩니다.이로 인해 [8]애매모호해질 수 있습니다.일부 언어 설명에서 복합문의 의미는 '심플러' 구조를 사용하여 정의된다. 예를 들어, 루프는 테스트, 점프 및 라벨의 조합으로 정의될 수 있다.if그리고.goto.

의미론 기사는 의미론을 정확하게 지정하기 위해 사용된 몇 가지 수학적/논리적 형식론을 기술하고 있다. 이것들은 일반적으로 BNF보다 더 복잡하며, 일반적으로 하나의 접근법으로는 받아들여지지 않는다.어떤 접근법은 언어의 통역자를 효과적으로 정의하고, 어떤 접근법은 프로그램에 대해 추론하기 위해 형식 논리를 사용하고, 어떤 접근법은 일관성을 보장하기 위해 통사적 실체에 부가하는 것 등입니다.

표현.

종종 실행되는 문장과 평가되는 표현식 간에 구별이 이루어집니다.식에서 얻은 값은 종종 문장의 일부로 사용됩니다(예: 할당). variable := expression;

일부 프로그래밍 언어(예: C, C++)에서는 일부 문장이 결과를 제공할 수 있습니다(기술적으로는 모든 문장이 결과를 제공하지만, 이 결과는 종종 'void' 유형이며 어떤 경우에도 사용할 수 없습니다).결과를 제공하는 가장 유용한 문은 할당이며, 결과는 방금 할당된 값입니다.

이것은, 복수의 초기화에 도움이 됩니다.

i = j = 0;로 취급되고 있다i = (j = 0);

또, 간단한 핑거 트러블이 발생해, 일부의 코드의 의미가 완전하게 바뀌는 일이 있습니다.

if (i == j) {. . . };검사하여 여부를 확인합니다.i와 동등하다j
if (i = j) { . . . };값을 할당하다j로.i그 값이 0이 아닌지를 테스트합니다.

일부 언어에서는 다중 할당(Algol 60)을 허용하지만 할당이 식에 나타나는 것을 허용하지 않습니다(Algol 60, Pascal).

확장성

대부분의 언어는 언어로 정의된 일련의 문장이 있지만 프로그래머가 새로운 문장을 정의할 수 있도록 확장 가능한 언어를 사용한 실험이 있습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ "statement". webopedia. Retrieved 2015-03-03.
  2. ^ ALGOL 60 보고서 섹션 4.1 "ALGOL 60". Retrieved January 23, 2021.개정.
  3. ^ ALGOL 60 보고서 섹션 1.1 개정."ALGOL 60". Retrieved January 23, 2021.
  4. ^ ANSI FORTRAN 66"FORTRAN 66" (PDF). Retrieved February 19, 2021. 표준
  5. ^ ANSI FORTRAN 95"Fortran95" (PDF). Retrieved February 19, 2021. 표준
  6. ^ 코볼 "COBOL" (PDF). Retrieved January 23, 2021.매뉴얼
  7. ^ Pascal 사용자 매뉴얼 및 보고서 부록 D."Pascal" (PDF). Retrieved February 19, 2021.
  8. ^ 알골"Trouble Spots" (PDF). Retrieved February 24, 2021. 60의 트러블 스폿

외부 링크