스테이트먼트(컴퓨터 사이언스)
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;
- C, C++, PHP:
- 에 가다
- 포트란:
GOTO numbered-label
- 알골 60:
goto label;
- C, C++, PHP, Pascal:
goto label;
- 포트란:
- 돌아가다
- 포트란:
RETURN value
- C, C++, Java, PHP:
return value;
- 포트란:
- 멈추다/정지하다/정지하다
- 포트란:
STOP number
- C, C++:
exit(expression)
- PHP:
exit number;
- 포트란:
복합문
복합문장은 합리적인 깊이까지 내포할 수 있는 문구를 포함할 수 있으며, 일반적으로 이러한 문구를 준수할지 또는 반복할지를 결정하기 위한 테스트를 수반한다.
- 다음 예시의 표기법:
- <statement>는 단일 스테이트먼트입니다(단순하거나 복합적일 수 있습니다).
- <sequence>는 0 이상의 <문장> 시퀀스입니다.
- 일부 프로그래밍 언어는 하나의 <문>을 그룹으로 대체할 수 있도록 문장을 그룹화하는 일반적인 방법을 제공합니다.
- 다음 예시의 표기법:
- 알골 60:
begin <sequence> end
- 파스칼:
begin <sequence> end
- C, PHP, Java:
{ <sequence> }
- 알골 60:
- 다른 프로그래밍 언어에는 복합문마다 다른 특수 터미네이터가 있기 때문에 1개 이상의 문장이 자동으로 그룹으로 취급됩니다.
- 아다:
if test then <sequence> end if;
- 아다:
- 다른 프로그래밍 언어에는 복합문마다 다른 특수 터미네이터가 있기 때문에 1개 이상의 문장이 자동으로 그룹으로 취급됩니다.
많은 복합문은 루프 명령어 또는 선택 명령어입니다.이론적으로는 이러한 각 유형의 명령어만 필요합니다.실제로 자주 발생하는 다양한 특수한 경우가 있습니다.이러한 경우는 프로그램을 이해하기 쉽게 하거나 프로그래밍을 쉽게 하거나 보다 효율적으로 구현할 수 있습니다.여기에 언급되지 않은 많은 세부 사항이 있습니다. 자세한 내용은 링크된 문서를 참조하십시오.
- 카운트 제어 루프:
- 알골 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:
- 루프 시작 시 테스트를 사용하는 상태 제어 루프:
- 알골 60:
for index := expression while test do <statement> ;
- 파스칼:
while test do <statement> ;
- C, Java:
while (test) <statement> ;
- 아다:
while test loop <sequence> end loop
- 포트란 90:
작업하는 동안 (시험) < >순서> 종료 작업
- 알골 60:
- 루프 종료 시 테스트를 사용한 상태 제어 루프:
- 파스칼:
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;
- C:
- 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+:
한다면 (시험) 그리고나서 < >순서> 만약의 종료
- 알골 60:
- 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+:
한다면 (시험) 그리고나서 < >순서> 또 다른 < >순서> 만약의 종료
- 알골 60:
- 케이스/스위치 스테이트먼트 멀티웨이 선택:
- 파스칼:
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).
확장성
대부분의 언어는 언어로 정의된 일련의 문장이 있지만 프로그래머가 새로운 문장을 정의할 수 있도록 확장 가능한 언어를 사용한 실험이 있습니다.
「 」를 참조해 주세요.
- 프로그래밍 언어 비교 - 문
- 흐름 제어
- 식(콘트라스트)
레퍼런스
- ^ "statement". webopedia. Retrieved 2015-03-03.
- ^ ALGOL 60 보고서 섹션 4.1 "ALGOL 60". Retrieved January 23, 2021.개정.
- ^ ALGOL 60 보고서 섹션 1.1 개정."ALGOL 60". Retrieved January 23, 2021.
- ^ ANSI FORTRAN 66"FORTRAN 66" (PDF). Retrieved February 19, 2021. 표준
- ^ ANSI FORTRAN 95"Fortran95" (PDF). Retrieved February 19, 2021. 표준
- ^ 코볼 "COBOL" (PDF). Retrieved January 23, 2021.매뉴얼
- ^ Pascal 사용자 매뉴얼 및 보고서 부록 D."Pascal" (PDF). Retrieved February 19, 2021.
- ^ 알골"Trouble Spots" (PDF). Retrieved February 24, 2021. 60의 트러블 스폿