전기통신 구현용 chill의 표준화 - tta web view3.13.6 배열/구조체 모드의 배치...

188
C H I L L TTA Standard 전전전전전전전전 전전전 : 2000 전 7 전 13 전 TTAS.KO-09.0035 전전전전 전전전 전전전전 CHILL 전전 (A Object-oriented CHILL Standard for Telecommunication S/W Implementations)

Upload: others

Post on 27-Dec-2019

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

전기통신

구현용

객체지향

CHILL

표준

TT

A S

tan

da

rd

정보통신단체표준 제정일 : 2000 년 7 월 13 일TTAS.KO-09.0035

한국정보통신기술협회

전기통신 구현용 객체지향 CHILL 표준(A Object-oriented CHILL Standard for

Telecommunication S/W Implementations)

Page 2: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

서 문

1. 표준의 목적

본 전기통신 구현용 언어인 객체지향 CHILL 표준은 전기통신 소프트웨어 언어들 중 시스템

구현을 위한 고급 프로그래밍 언어의 하나로 ITU-T SG10 에서 권고한 CHILL-2000(Z.200)을

근간으로 국내 교환기 시스템의 소프트웨어 및 개발환경의 특성을 고려하여 개정한 것이다.

본 표준은 전기통신 시스템의 시스템 소프트웨어를 구축하는데 필요한 객체지향 CHILL

언어의 구문, 어의 및 제약 사항들을 제공하며, 객체지향 CHILL 의 렉시칼(lexical) 이름 및 기호,

구문 형태, 어의 모델, 정적 특성 및 조건 그리고 동적 특성 및 조건을 정의한다. 또한 본 표준의

이해를 돕기 위해 객체지향 CHILL 의 구문 문법 표 및 예제 프로그램들을 부록으로 명시한다.

2. 참조 권고 및 표준

2.1 국제 표준(권고) : ITU-T Z.200

2.2 국내 표준 : 없음

2.3 기 타 : CHILL Reference Manual (한국전자통신연구원)

3. 국제 표준(권고)과의 비교

3.1 국제 표준(권고)과의 관련성

본 표준은 전기통신 시스템을 위한 시스템 소프트웨어 구현용 프로그래밍 언어인 객체지향

CHILL 에 대해 기술하고 있으며, 1980 년 판 및 2000 년 판인 ITU-T CHILL 권고 문서 Z.200 에

근거를 두고 있다.

3.2 상기 국제 표준(권고) 등에 대한 추가 사항

3.2.1 선택 항목 : 없음

3.2.2 National Matter 항목 : 없음

3.2.3 기타 항목 :

1) 실시간 기능 변경

2) 입출력 기능 변경

TTAS.KO-09.0035(2000. 7.)

i

Page 3: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

3) 프로세스 생성의 프록시(Proxy) 기능 추가

4) Shift-left/right 연산자 추가

3.3 참조한 국제 표준(권고)과 본 표준의 장 구성 비교표

통신용 교환기 시스템의 시스템 소프트웨어 구축을 위한 시스템 소프트웨어 구현용

프로그래밍 언어인 객체지향 CHILL(ITU-T SG10 Q.10)에 기반을 두고 작성하였으며, 이에 따라

2000 년 판인 ITU-T CHILL 권고 문서 Z.200 에 근거를 두고 있다.

아래 표에서 본 표준에서 작성한 내용과 관련 국제 권고들을 대응하여 보여주고 있다.

KCS 국제 권고 비고

5.3.6 피연산자-3 “ 추가

6.11 START 실행 “ 추가

제 7 장 입출력 ITU-T SG.10 변경

제 9 장 시간 관리 “ 변경

부록.1 주요 용어 정의 “ 추가

4. 지적 재산권 관련사항

해당 사항 없음.

5. 적합인증 관련사항

해당 사항 없음.

6. 표준의 이력

판 수 제개정일 개정판 내용

제 1 판 2000 년 7 월 13 일 제정

TTAS.KO-09.0035(2000. 7.)

ii

Page 4: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

Preface

1. Objectives

This object-oriented CHILL standard for implementation of telecommunication S/W is a kind of high-level programming languages for system implementation among telecommunication S/W languages. The language is based on CHILL-2000 recommended by ITU-T SG10, but has been changed by the considerations with the properties of S/W & its developing environment for Korean domestic switching systems. This standard provides the syntax, the semantics and their constraints of object-oriented CHILL language, which is required to develop the system S/W of telecommunication switching systems. And it defines the lexical names and symbols, syntax format, semantic model, static properties/conditions and dynamic properties/conditions of object-oriented CHILL language. The syntax grammar notations and the examples of object-oriented CHILL are also introduced at appendix part for easy understandability of users.

2. Normative Standards and Recommendations

2.1 International Standards : ITU-T Rec. Z.200

2.2 Domestic Standards : None

2.3 Others : CHILL Reference Manual (ETRI)

3. Comparison to International Standards

3.1 Relationship to International Standards

This standard describes object-oriented CHILL as an implementation programming language for system S/W of telecommunication systems, and is originated from ITU-T CHILL Recommendation Z.200 revised by 1980 version and by 2000 version.

3.2 Additional Requirements to the International Standards

3.2.1 Options : None

3.2.2 National Matter Items : None

3.2.3 Others :1) changed about real-time features2) changed about input/output features3) added about PROXY feature of process creations

TTAS.KO-09.0035(2000. 7.)

iii

Page 5: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

4) added about shift-left/right operators

3.3 Comparing Table of Chapter Configuration for the referenced International Standards & this Standards

This standard is based on object-oriented CHILL as an implementation programming language for system S/W of telecommunication switching systems, and is originated from ITU-T CHILL Recommendation Z.200 revised by 2000 version.

The below table shows the inserted or changed indices of this standards compared from the international standards.

KCS International

Standard

Remarks

5.3.6 Operand-3 “ inserted

6.11 START Action “ inserted

Chapter 7. Input/Output ITU-T SG.10 changed

Chapter 9. Time Supervision “ changed

Appendix.1 Main Items Definitions “ inserted

4. Intellectual Property Rights

None

5. Requirements for Conformance and Certification

None

6. History of Standard

Edition Issue Date Contents

The 1st Edition 2000. 7. 13. Established

TTAS.KO-09.0035(2000. 7.)

iv

Page 6: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

목 차

목 차........................................................................................................................................ v

Index

제 1 장 서론............................................................................................................................. 1

Introduction

1.1 일반 사항................................................................................................................... 1

General

1.2 객체지향 CHILL 언어 연구..........................................................................................1

Language Survey of Object-Oriented CHILL

1.3 간단한 객체지향 CHILL 프로그래밍 방법....................................................................2

Simple Programming Method of OOCHILL

1.4 객체지향 CHILL 의 전반적 고찰..................................................................................3

Overview of OOCHILL

1.5 객체지향 CHILL 프로그래밍 환경의 개념....................................................................4

Concepts of OOCHILL Programming Environment

1.6 구간식 프로그래밍.....................................................................................................5

Piecewise Programming

1.6.1 분리 컴파일 방식..............................................................................................5

Separate Compilation

1.6.2 변화 분석 단계.................................................................................................5

Change Analysis Steps

1.6.3 분리 컴파일 과정의 자동화...............................................................................6

Automation of Separate Compiling Steps

제 2 장 기초 사항..................................................................................................................... 7

Preliminaries

2.1 표기법........................................................................................................................ 7

Notations

2.1.1 구문 기술부......................................................................................................7

Syntax Description

2.1.2 예제부.............................................................................................................7

Examples

2.1.3 어의 기술부......................................................................................................7

Semantic Description

2.1.4 참고 사항부......................................................................................................7

TTAS.KO-09.0035(2000. 7.)

v

Page 7: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

References

2.1.5 참조 사항부......................................................................................................8

See Also

2.2 어휘........................................................................................................................... 8

Vocabulary

2.3 렉시컬 심볼................................................................................................................9

Lexical Symbols

2.3.1 예약어............................................................................................................10

Keywords

2.3.2 연산자............................................................................................................12

Operations

2.3.3 이름...............................................................................................................12

Names

2.3.4 리터럴............................................................................................................13

Literals

2.4 코멘트......................................................................................................................13

Comments

제 3 장 모드 및 클래스...........................................................................................................15

Modes and Classes

3.1 일반 사항................................................................................................................. 15

General

3.1.1 모드...............................................................................................................15

Modes

3.1.2 클래스............................................................................................................15

Classes

3.1.3 모드와 클래스의 특성 및 이들간의 관계.........................................................15

Properties of, and Relations between Modes and Classes

3.2 모드 정의................................................................................................................. 16

Mode Definitions

3.2.1 개요...............................................................................................................16

Overview

3.2.2 SYNMODE 정의문.........................................................................................17

SYNMODE Definitions

3.2.3 NEWMODE 정의문........................................................................................17

NEWMODE Definitions

3.3 모드 분류................................................................................................................. 18

TTAS.KO-09.0035(2000. 7.)

vi

Page 8: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

Mode Classification

3.4 이산 모드................................................................................................................. 19

Discrete Modes

3.4.1 개요...............................................................................................................20

General

3.4.2 정수 모드.......................................................................................................20

Integer Modes

3.4.3 진위 모드.......................................................................................................21

Boolean Modes

3.4.4 문자 모드.......................................................................................................21

Character Modes

3.4.5 세트 모드.......................................................................................................22

Set Modes

3.4.6 이산 범위 모드...............................................................................................22

Discrete Range Modes

3.5 실수 모드................................................................................................................. 23

Real Modes

3.5.1 부동 소수점 모드............................................................................................23

Floating Point Modes

3.5.2 부동 소수점 범위 모드....................................................................................24

Floating Point Range Modes

3.6 집합 모드................................................................................................................. 25

Powerset Modes

3.7 참조 모드................................................................................................................. 26

Referance Modes

3.7.1 개요...............................................................................................................26

General

3.7.2 한정 참조 모드...............................................................................................26

Bound Reference Modes

3.7.3 자유 참조 모드...............................................................................................27

Free Reference Modes

3.7.4 횡렬 모드.......................................................................................................28

Row Modes

3.8 프로시듀어 모드.......................................................................................................28

Procedure Modes

3.9 인스턴스 모드..........................................................................................................29

TTAS.KO-09.0035(2000. 7.)

vii

Page 9: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

Instance Modes

3.10 동기화 모드............................................................................................................30

Synchronization Modes

3.10.1 개요.............................................................................................................30

General

3.10.2 이벤트 모드..................................................................................................31

Event Modes

3.10.3 버퍼 모드.....................................................................................................32

Buffer Modes

3.11 입/출력 모드...........................................................................................................33

Input/Output Modes

3.12 시간 모드...............................................................................................................33

Timing Modes

3.13 복합 모드...............................................................................................................33

Composite Modes

3.13.1 개요.............................................................................................................33

General

3.13.2 스트링 모드..................................................................................................33

String Modes

3.13.3 배열 모드.....................................................................................................34

Array Modes

3.13.4 구조체 모드..................................................................................................35

Structure Modes

3.13.5 연합체 모드..................................................................................................36

Union Modes

3.13.6 배열/구조체 모드의 배치 서술......................................................................37

Layout Description for Array/Structure Modes

3.14 동적 모드...............................................................................................................39

Dynamic Modes

3.15 모레타 모드............................................................................................................39

Moreta Modes

3.15.1 개요.............................................................................................................40

General

3.15.2 모듈 모드.....................................................................................................40

Module Modes

3.15.3 리젼 모드.....................................................................................................42

TTAS.KO-09.0035(2000. 7.)

viii

Page 10: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

Region Modes

3.15.4 타스크 모드..................................................................................................44

Task Modes

제 4 장 장소 및 이의 접근.......................................................................................................47

Locations and Their Accesses

4.1 선언문......................................................................................................................47

Declarations

4.1.1 개요...............................................................................................................47

General

4.1.2 장소 선언문....................................................................................................47

Location Declarations

4.1.3 장소-동치 선언문...........................................................................................49

Loc-Identity Declarations

4.2 장소.........................................................................................................................49

Locations

4.2.1 개요...............................................................................................................49

General

4.2.2 접근 이름.......................................................................................................50

Access Names

4.2.3 역참조 한정 참조............................................................................................50

Dereferenced Bound References

4.2.4 역참조 자유 참조............................................................................................51

Dereferenced Bound References

4.2.5 역-참조 횡렬..................................................................................................52

Dereferenced Rows

4.2.6 스트링 요소....................................................................................................52

String Elements

4.2.7 스트링 슬라이스.............................................................................................53

String Slices

4.2.8 배열 요소.......................................................................................................54

Array Elements

4.2.9 배열 슬라이스................................................................................................55

Array Slices

4.2.10 구조체 필드..................................................................................................55

Structure Fields

4.2.11 장소 프로시듀어 호출...................................................................................56

TTAS.KO-09.0035(2000. 7.)

ix

Page 11: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

Location Procedure Calls

4.2.12 장소 Built-in Routine 호출.............................................................................56

Location Built-in Routine Calls

4.2.13 장소 변환.....................................................................................................56

Location Conversions

4.2.14 자신의 모레타 장소......................................................................................57

Self Moreta Location

제 5 장 값 및 이의 연산..........................................................................................................58

Values and their Operations

5.1 SYNONYM 정의문...................................................................................................58

SYNONYM Definitions

5.2 기본 값.....................................................................................................................59

Premitive Values

5.2.1 개요...............................................................................................................59

General

5.2.2 장소 내용.......................................................................................................60

Location Contents

5.2.3 값 이름...........................................................................................................60

Value Names

5.2.4 리터럴............................................................................................................60

Literals

5.2.5 튜플...............................................................................................................67

Tuples

5.2.6 값 스트링 원소...............................................................................................68

Value String Elements

5.2.7 값 스트링 슬라이스........................................................................................68

Value String Slices

5.2.8 값 배열 원소...................................................................................................68

Value Array Elements

5.2.9 값 배열 슬라이스............................................................................................68

Value Array Slices

5.2.10 값 구조체 필드.............................................................................................68

Value Structure Fields

5.2.11 수식 변환.....................................................................................................68

Expression Conversions

5.2.12 표현 변환.....................................................................................................69

TTAS.KO-09.0035(2000. 7.)

x

Page 12: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

Representation Conversions

5.2.13 값 프로시듀어 호출......................................................................................69

Value Procedure Calls

5.2.14 값 Built-in Routine 호출................................................................................69

Value Built-in Routine Calls

5.2.15 Start 수식.....................................................................................................69

Start Expressions

5.2.16 Zero-adic 연산자..........................................................................................69

Zero-adic Operator

5.2.17 괄호 수식.....................................................................................................70

Parenthesized Expression

5.2.18 참조 장소.....................................................................................................70

Referenced Location

5.3 값 및 수식................................................................................................................71

Values and Expressions

5.3.1 개요...............................................................................................................71

General

5.3.2 수식...............................................................................................................72

Expressions

5.3.3 피연산자-0.....................................................................................................72

Operand-0

5.3.4 피연산자-1.....................................................................................................72

Operand-1

5.3.5 피연산자-2.....................................................................................................73

Operand-2

5.3.6 피연산자-3.....................................................................................................74

Operand-3

5.3.7 피연산자-4.....................................................................................................75

Operand-4

5.3.8 피연산자-5.....................................................................................................76

Operand-5

5.3.9 피연산자-6.....................................................................................................77

Operand-6

5.3.10 피연산자-7...................................................................................................78

Operand-7

제 6 장 실행문........................................................................................................................80

TTAS.KO-09.0035(2000. 7.)

xi

Page 13: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

Actions

6.1 개요.........................................................................................................................80

General

6.2 치환 실행................................................................................................................. 81

Assignment Action

6.3 IF 실행.....................................................................................................................83

IF Action

6.4 CASE 실행...............................................................................................................85

CASE Action

6.5 DO 실행...................................................................................................................87

DO Action

6.5.1 개요...............................................................................................................87

General

6.5.2 FOR 제어.......................................................................................................89

FOR Control

6.5.3 WHILE 제어...................................................................................................89

WHILE Control

6.5.4 FOR-WHILE 제어...........................................................................................90

FOR-WHILE Control

6.6 호출 실행................................................................................................................. 91

Call Action

6.6.1 매개변수 전달 및 RETURNS 값 전달..............................................................94

Parameter Passing and RUTURNS Value Passing

6.7 RETURN 실행..........................................................................................................95

RETURN Action

6.8 GOTO 실행..............................................................................................................96

GOTO Action

6.9 Empty 실행..............................................................................................................97

Empty Action

6.10 CAUSE 실행..........................................................................................................97

CAUSE Action

6.11 START 실행...........................................................................................................97

START Action

6.12 STOP 실행.............................................................................................................99

STOP Action

6.13 CONTINUE 실행....................................................................................................99

TTAS.KO-09.0035(2000. 7.)

xii

Page 14: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

CONTINUE Action

6.14 DELAY 실행.........................................................................................................100

DELAY Action

6.15 DELAY-CASE 실행...............................................................................................101

DELAT-CASE Action

6.16 SEND 실행...........................................................................................................102

SEND Action

6.16.1 개요...........................................................................................................102

General

6.16.2 Send-시그널 실행.......................................................................................102

Send-Signal Action

6.16.3 Send-버퍼 실행..........................................................................................104

Send-Buffer Action

6.17 RECEIVE-CASE 실행...........................................................................................105

RECEIVE-CASE Action

6.17.1 개요...........................................................................................................105

General

6.17.2 Receive-시그널-case 실행..........................................................................105

Receive-Signal-Case Action

6.17.3 Receive-버퍼-case 실행.............................................................................106

Receive-Buffer-Case Action

6.18 CHILL Built-in Routine 호출..................................................................................107

CHILL Built-in Routine Calls

6.18.1 CHILL 단순 Built-in Routine 호출................................................................107

CHILL Simple Built-in Routine Calls

6.18.2 CHILL 장소 Built-in Routine 호출................................................................107

CHILL Location Built-in Routine Calls

6.18.3 CHILL 값 Built-in Routine 호출....................................................................108

CHILL Value Built-in Routine Calls

6.18.4 동적 장소 처리 Built-in Routines.................................................................109

Dynamic Storage Handling Built-in Routines

제 7 장 입출력......................................................................................................................111

Input and Output

7.1 개요.......................................................................................................................111

General

7.2 입출력 라이브러리의 이용......................................................................................111

TTAS.KO-09.0035(2000. 7.)

xiii

Page 15: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

Uses of Input/Output Libraries

7.3 기본 입출력 기능....................................................................................................111

Basic Input/Output Functions

제 8 장 예외 처리................................................................................................................. 114

Exception Handling

제 9 장 시간 관리................................................................................................................. 115

Time Supervision

제 10 장 프로그램 구조........................................................................................................116

Program Structure

10.1 개요.....................................................................................................................116

General

10. 2 도달 및 중첩........................................................................................................117

Reaches and Nesting

10.3 BEGIN-END 블럭.................................................................................................118

BEGIN-END Blocks

10.4 프로시듀어 정의문................................................................................................119

Procedure Definitions

10.5 프로세스 정의문...................................................................................................121

Process Definitions

10.6 모듈.....................................................................................................................122

Modules

10.7 리젼.....................................................................................................................123

Regions

10.8 프로그램...............................................................................................................125

Programs

10.9 장소 할당 및 생존-기간.........................................................................................125

Storage Allocation and Lifetime

10.10 구간식 프로그래밍 구조......................................................................................126

Constructs for Piecewise Programming

10.10.1 원격 구간.................................................................................................126

Remote Pieces

10.10.2 명세 모듈, 명세 리젼 및 문맥....................................................................127

Spec Modules, Spec Regions and Contexts

10.10.3 Quasi 정의문............................................................................................128

Quasi Definitions

10.10.4 Quasi 정의 발생자와 정의 발생자 간의 매칭.............................................128

TTAS.KO-09.0035(2000. 7.)

xiv

Page 16: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

Matching between Quasi Defining Occurrences and Defining Occurrences

10.11 포괄성................................................................................................................128

Genericity

제 11 장 병행 실행...............................................................................................................133

Concurrent Execution

11.1 쓰레드 및 이의 정의..............................................................................................133

Threads and their Definitions

11.2 상호 배제 및 임계.................................................................................................134

Mutual Exclusion and Region

11.2.1 개요...........................................................................................................134

General

11.2.2 임계성........................................................................................................135

Regionality

11.3 쓰레드의 지연.......................................................................................................135

Delaying of a Thread

11.4 쓰레드의 재활성...................................................................................................136

Reactivation of a Thread

11.5 시그널 정의문.......................................................................................................136

Signal Definitions

제 12 장 일반 어의 특성.......................................................................................................138

General Semantic Properties

12.1 모드 규칙..............................................................................................................138

Mode Rules

12.1.1 모드와 클래스의 특성.................................................................................138

Properties of Modes and Classes

12.1.2 모드와 클래스간의 관계.............................................................................139

Relations on Modes and Classes

12.2 가시성 및 이름 결합..............................................................................................145

Visibility and Name Binding

12.2.1 가시성의 정도............................................................................................145

Degrees of Visibility

12.2.2 가시성 조건 및 이름 결합...........................................................................145

Visibility Conditions and Name Binding

12.2.3 도달 안의 가시성........................................................................................145

Visibility in Reaches

12.2.4 세트 요소 이름의 가시성............................................................................149

TTAS.KO-09.0035(2000. 7.)

xv

Page 17: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

Visibility of Set Element Names

12.2.5 필드 이름의 가시성....................................................................................149

Visibility of Field Names

12.3 CASE 선택...........................................................................................................149

CASE Selections

12.4 어의 범위의 정의 및 종합......................................................................................149

Definition and Summary of Semantic Categories

12.4.1 이름...........................................................................................................149

Names

12.4.2 장소...........................................................................................................149

Locations

12.4.3 수식 및 값..................................................................................................149

Expressions and Values

12.4.4 기타 어의 범위...........................................................................................150

Miscellaneous Semantic Categories

부록.1 주요 용어 정의..........................................................................................................151

Appendix.1 Main Item Definitons

색인..................................................................................................................................... 158

Index

TTAS.KO-09.0035(2000. 7.)

xvi

Page 18: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

TTA 정보통신단체표준 TTAS.KO-09.0035 2000. 7. 13.

전기통신 구현용 객체지향 CHILL 표준A Object-oriented CHILL Standard for

Telecommunication S/W Implementations

제 1 장 서론

본 전기통신 구현용 국내 권고 안은 ITU-T SG10 Q.10 CHILL 권고안인 Z.200 을 근간으로

국내 교환기 시스템 소프트웨어의 특성에 맞게 개정한 것이다. 이 장의 다음 절들은 언어 설계에

대한 몇 가지 동기를 소개하고 언어적 기능의 고찰을 제공하고자 한다.

1.1 일반 사항

통신용 소프트웨어의 구조가 복잡해지고 대용량화 됨에 따라 소프트웨어 위기(software

crisis)가 대두하게 되었다. 이에 따라 ITU-T(구, CCITT)는 소프트웨어의 개발 시간과 경비를

줄이고 아울러 질적 향상을 위해 소프트웨어 공학에 입각하여 소프트웨어 생명 주기(life cycle)

에서의 각 단계를 명시하고 그에 따르는 방법론과 소프트웨어 도구들에 대하여 연구를 수행하여

소프트웨어 개발 각 단계에 따라 적용할 수 있는 언어를 정의하였다. 그 후 각 언어들에 따른 부-

그룹들을 구성하고 연구를 계속 수행하여 시스템의 명세(specification)와 기술(description)을

위해 객체지향 SDL 을, 고급 프로그래밍 언어로서는 객체지향 CHILL 을, 그리고 운용 및 유지를

위한 언어인 HMI 를 Z-series 로 각각 권고하였다.

객체지향 CHILL 은 대용량의 복합 내장형 통신 시스템을 주 목적으로 설계된 강한 형(type)

점검과 (프로시듀어나 프로세스를 갖는) 블럭 구조 및 객체지향성과 포괄성을 갖는 프로그래밍

언어이며, 다음과 같이 설계되었다:

확장된 컴파일-시간 점검을 통해 신뢰성과 실행-시간 효율성을 증진시켰다.

응용 소프트웨어와 다양한 하드웨어의 요구를 만족시키기 위해 충분한 유연성과

적응성을 가졌다.

대용량 시스템의 모듈적 그리고 객체지향적 개발 방법론을 제공할 수 있다.

병행성과 실시간 기능을 제공함으로써 실-시간 응용 분야에 채택될 수 있다.

매우 효율적인 목적 코드를 생성할 수 있다.

배우고 사용하기 쉽다.

1.2 객체지향 CHILL 언어 연구

TTAS.KO-09.0035(2000. 7.)1

Page 19: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

객체지향 CHILL 프로그램은 다음과 같이 세가지 부로 구성된다:

데이타 객체의 서술

데이타 객체를 연산하는 실행문의 서술

프로그램 구조의 서술

데이타 객체는 데이타-문(선언문과 정의문)으로 서술되고, 실행은 실행문들에 의해

서술되며, 프로그램 구조는 프로그램 구조화 정의문에 의해 서술된다.

객체지향 CHILL 의 연산 가능성 데이타 객체는 값과 이를 저장하는 장소이다. 그 실행은

데이타 객체를 실행할 연산 및 값이 저장되고 장소로부터 추출할 순서를 정의한다. 프로그램

구조는 데이타 객체의 생존기간(lifetime)과 가시성(visibility)을 결정한다.

1.3 간단한 객체지향 CHILL 프로그래밍 방법

프로그래밍 언어를 배우는 가장 좋은 방법은 실제적으로 그 언어를 이용하여 프로그래밍을

해보는 것이다. 쉬운 프로그램의 예로서 두 자연수의 합을 구하는 문제를 객체지향 CHILL 으로

프로그래밍하여 보자.

예제-11 SPEC MODULE REMOTE unixio;23 Main: MODULE4 SYNMODE IntSumMode = MODULE SPEC5 SumOp: SPEC PROC(INT, INT) RETURNS(INT) END;6 PUBLIC SumOp;7 END IntSumMode;8 SYNMODE IntSumMode = MODULE BODY9 SumOp: PROC(x INT, y INT) RETURNS(INT)10 RETURN(x+y);11 END SumOp;12 END IntSumMode13 DCL a, b, sum INT,14 IntSumLoc IntSumMode;1516 main: PROC( )17 a := 10;18 b := 20;19 sum := IntSumLoc.SumOP(a, b);20 IF (sum = 30) THEN21 printf(“success!\n”);22 ELSE23 printf(“fail!\n”);24 FI;25 END main;26 END Main;

위와 같이 프로그램을 작성하는데 있어서 객체지향 CHILL 로 작성된 경우는 반드시 원시

TTAS.KO-09.0035(2000. 7.)

2

Page 20: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

프로그램 파일 이름의 어미를 ".och"로 명명하여야 한다. 위의 예에서 파일의 이름을 "sum.och"

라고 하자. 다음으로 우리는 ochc 명령어로 다음과 같이 컴파일할 수 있다.

> ochc sum.och

만약 프로그램에 오류가 있을 때는 오류 메시지가 발생하고, 그렇지 않으면 컴파일이

수행되어 a.out 이라는 실행 파일(executable file)이 생성된다. 이 수행 파일을 수행시키기 위해

아래와 같이 key-in 하여 수행시키면,

> a.out

다음과 같은 결과를 얻게 된다.

success!

이제부터 위에서 보인 예제 프로그램에 대해서 좀 더 자세하게 알아보자. 객체지향 CHILL

프로그램은 프로그램의 단위로 모듈(module) 또는 리젼(region)으로 구성되고, 프로그램의

시작은 main 이라는 이름의 프로시듀어에서 수행을 시작한다. 이는 모든 프로그램에서 반드시

main 프로시듀어가 존재해야 함을 의미한다. 예제-1 은 하나의 모듈로 프로그램이 구성된

간단한 구조이며, 프로그램이 main 프로시듀어에서 수행을 시작하므로 그 프로시듀어 이름을

16번째 행(line)에서 main 으로 하였다. 모듈 내에서는 선언문(DCL)이나 정의문(SYN,

SYNMODE/NEWMODE, SIGNAL, PROC, PROCESS)이 먼저 존재하고 그 다음에 main

프로시듀어 정의문이 존재해야 한다. 13번째 행에서 a, b, 그리고 sum 이라는 변수를 정수(INT)

모드로 선언하였고, 14번째 행에서 IntSumLoc 이라는 변수를 IntSumMode 의 모듈 모드로

선언하였으며, 수행은 17번째 행부터 시작한다.

printf()는 프로그램상에서 정의되어 있지 않지만 입출력을 제공하는 프로시듀어로서 입출력

라이브러리에 정의되어 있다. 일반적으로 여러 사용자가 공통으로 사용하는 것들을 라이브러리

로 만들게 되며, 그 구성 내용으로는 변수 이름, 프로시듀어 이름, 그 외 정의된 모드 이름 등이

될 수 있다. 이들은 일반적으로 컴파일된 코드 형태로 존재하고, 이를 사용하는 사용자

프로그램에게는 링크 시에 제공된다. 라이브러리를 사용할 경우 컴파일러는 정의되지 않은

이름에 대해 컴파일 오류를 발생시키므로 라이브러리 내에서 존재하는 이름들에 대한 정보를

SPEC MODULE을 사용하여 정보를 제공한다. 이때 컴파일러에게 필요한 SPEC MODULE 을

알려주기 위해 1번째 줄같이 “SPEC MODULE REMOTE unixio;”를 사용하여 printf()에 대한

정보를 컴파일러에게 알려준다. 위의 예제와 같이 시스템에서 제공하는 입출력 라이브러리를

이용할 경우 컴파일러는 /usr/lib/chill/include 에 있는 unixio.sp 를 사용하게 되어 있다.

1.4 객체지향 CHILL 의 전반적 고찰

객체지향 CHILL 은 모듈 프로그래밍, 구조적 뿐만 아니라 객체지향적 프로그래밍, 병렬

처리, 분리 컴파일, 강한 형 점검(strong type checking), 높은 신뢰성, 예외 처리 그리고 데이타

추상화(data abstraction) 기능을 가지고 있으며, 호 처리, 시스템 시험 및 응용, 운영체제, 온라인

TTAS.KO-09.0035(2000. 7.)

3

Page 21: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

(on-line) 및 off-line 도구 개발 등의 응용 분야뿐만 아니라 다양한 응용 분야에 적용할 수 있는

사실상 시스템 프로그래밍을 위한 고급 프로그래밍 언어이다. 따라서 기존의 프로그래밍 언어가

가지는 대부분의 기능을 포함하는 크고 복잡한 고급 프로그래밍 언어로서 다양한 응용 분야에

적용할 수 있는 일반적인 기능에 중점을 두고 신뢰성 보장, 효율적인 목적 코드의 생성과 변경

및 추가의 용이성 등을 고려하여 설계되었다.

객체지향 CHILL 프로그램의 구성은 프로그래밍할 때 발생하는 오류를 줄이고 자연스런

방법으로 시스템을 구성할 수 있도록 융통성을 부여하기 위해 (1)모듈 프로그래밍, (2)구조적 및

객체지향적 프로그래밍, (3)병렬 처리 기능을 구현할 수 있도록 여러 종류의 구조문을 가지고

있다: (1) 모듈(MODULE)은 프로그램을 구성하는 단위일 뿐만 아니라 프로그램상에 나타나는

이름들의 가시성을 제어하기 때문에 모듈 프로그래밍 기법과 데이타 추상화 및 데이타 수집

(data collection)의 기능을 구현할 수 있게 하며, (2) 프로시듀어와 begin-end 블럭은 구조적

프로그래밍을 위해 블럭 개념의 기능을 제공한다. 그리고 모레타 모드의 장소 생성 및 이의

접근뿐만 아니라 원소 프로시듀어 호출(CALL) 혹은 원소 프로세스 구동(START)을 통해

객체지향적 프로그래밍을 제공한다. (3) 병렬 처리 기능으로는 프로그램상에서 동시에 수행되는

프로그램의 동적 부분인 프로세스가 있고, 이들 프로세스들 사이의 동기화와 통신 그리고 상호-

배제(mutual-exclusion)를 위하여 이벤트, 버퍼, 시그널, 리젼 기능이 있다. 프로그램의 신뢰도를

높이기 위해 컴파일 및 수행시의 일치성 점검, 가시성 제어 기능, 강한 형 점검 규칙 등이 있으며,

프로그램이 수행될 때 일어나는 비정상 상태의 발생에 대해 각 실행문 단위에서 예외 처리

(exception handling) 기능을 사용자가 부여할 수 있다. 또한 대형 소프트웨어의 개발과 융통성이

있는 프로그램 구조를 제공하기 위해 구간식(piecewise) 프로그래밍 방식도 채택하고 있다.

객체지향 CHILL 과 여러 면에서 유사한 언어인 Ada-95 를 비교해 볼 때 양자는 모두 내장형

(embedded) 시스템 개발을 위한 용도로 개발되었고, 여러 사용자 기관들의 요구와 함께

표준화한 고급 프로그래밍 언어이며, C++, Modula, Pascal, Oberon, Eiffel 및 독일 지멘스

(Siemens) 사에서 만든 ObjectCHILL 을 근거로 하여 설계되었다. 그러나 Ada-95 는 객체지향

CHILL 에 비해서 좀더 간단하며 재사용을 위한 패키지 기능이 우수하지만, 융통성이 있는 구조,

인터페이스 제어 기능 및 재사용을 위한 클래스의 상속 기능은 객체지향 CHILL 이 더

우수하다고 볼 수 있다.

1.5 객체지향 CHILL 프로그래밍 환경의 개념

객체지향 CHILL 프로그래밍은 사용자가 프로그램을 편집하여 컴파일한 후 수행 및

프로그램 오류 수정 등을 포함하는 일련의 프로그램을 개발하는 과정을 말한다. 이러한

프로그래밍 개념을 실현하기 위해 사용자에게 일련의 통합된 도구들을 제공하는 객체지향

CHILL 프로그래밍 환경(CPE: 객체지향 CHILL Programming Environment)을 개발하였다. CPE

는 SDL-92 환경(ISET: Integrated SDL Environments for Telecommunication system)과 함께

TDX-10 및 ATM 과 같은 대용량 통신 시스템 개발을 위한 유용한 객체지향 CHILL 프로그래밍

TTAS.KO-09.0035(2000. 7.)

4

Page 22: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

개발 환경(CSDE: CCITT languages-based Software Development Environment)을 제공하고

있다.

일반적인 경우, 사용자는 프로그래밍 단계 이전에 SDL-92 을 사용하여 시스템에 대한

정형적 명세(formal specification) 기술(description)을 작성한다. 이러한 과정에서 사용자는 ISET

을 이용하여 작성하고 있는 SDL-92 를 분석하여 시스템 명세에 대한 검증(verification/validation)

을 하고 여러 가지 필요한 정보와 문서들을 추출한다. SDL-92 를 이용한 설계가 끝나면 SDL-92

를 이용하여 객체지향 CHILL 프로그래밍을 하거나 자동 변환기에 의해 자동적으로 객체지향

CHILL 으로 변환할 수 있다. 자동 변환기는 SDL-92 에 표현되어 있는 중요 정보로부터 객체지향

CHILL 프로그램의 구조와 타스크 객체들간의 통신을 위해 SIGNAL 송수신에 관한 부분이

개략적으로 표현되므로 객체지향 CHILL 프로그램의 기초로 사용할 수 있다. 이와 같이

함으로써 사용자는 점진적으로 프로그램을 완성할 수 있으며, 특히 프로그램 구조부를

자동적으로 생성하므로 프로그램 모듈 사이의 인터페이스를 고려할 필요가 없다.

1.6 구간식 프로그래밍

객체지향 CHILL 분리 컴파일 시스템 설계에 있어서 객체지향 CHILL 프로그램의 안전한

분리 컴파일의 보장, 인터페이스를 위한 이름 사이의 강력한 일치성 점검을 위해 컴파일 단위는

파일로 하며, 하나의 파일은 하나 이상의 모듈을 포함할 수 있고, 한 파일 내에 generic module

이나 remote module 이 포함될 경우 텍스트 삽입으로 처리하도록 정의하였다.

1.6.1 분리 컴파일 방식

분리 컴파일 과정은 크게 프로그램 명세(specification)의 자동 생성, 이름 결합(name

binding), 그리고 컴파일 혹은 재컴파일의 3 단계로 이루어진다.

먼저 컴파일러를 이용하여 프로그램 명세를 자동적으로 생성하는데 프로그램 명세는

하나의 파일에서 다른 파일과 인터페이스하는데 필요로 하는 GRANT/SEIZE 정보를 말하며, 각

프로그램 파일에 대하여 하나의 spec 파일로 생성된다. 이러한 프로그램 명세의 자동적인

생성은 사용자가 인터페이스를 위해 작성해야 할 명세를 사용자가 작성하지 않도록 하고,

사용자가 작성시 범할 수 있는 오류를 검증하는데 사용한다. 각 모듈의 내용이 바뀌면

컴파일러는 자동적으로 spec 파일을 다시 생성한다.

모든 프로그램 파일에 대한 spec 파일이 생성되면 모든 spec 파일은 이름 결합기(name

binder)의 입력으로 주어지며, 이 이름 결합기는 이를 이용하여 전체 프로그램 수준에서

인터페이스의 일치성과 어의를 분석하여 인터페이스 라이브러리를 이용하여 프로그램이

어떻게 수정되었는지 분석한다. 모든 GRANT/SEIZE 이름들에 대해 변화 분석을 수행한 후 어떤

모듈이 영향을 받아 재컴파일을 필요로 하는 파일에 대해 seize 파일을 생성하고 인터페이스

라이브러리를 수정한다. Seize 파일은 프로그램 파일이 독립적으로 컴파일이 가능하도록

TTAS.KO-09.0035(2000. 7.)

5

Page 23: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

프로그램 파일이 필요로 하는 인터페이스 정보를 모두 가지고 있다.

마지막으로 컴파일러는 seize 파일을 보고 수정되었으면 컴파일 또는 재컴파일을 수행하며,

그렇지 않으면 이미 컴파일된 것이 유효하다고 인정하여 재컴파일을 하지 않는다.

1.6.2 변화 분석 단계

일치성(consistency)을 점검하기 위해 이름 결합기는 변화를 분석하여 새로이 컴파일할

파일을 결정한다. 이름 결합기의 입력이 되는 명세(spec) 파일은 grant/seize 하는 이름과 grant

하는 이름의 실제 선언 및 정의를 포함한다. 객체지향 CHILL 에서는 하나의 선언된 이름에

대해서 set 요소(element) 이름이나 구조체 항목(struct field) 이름 등과 같은 부수적인

(subordinate) 이름이 허용되며, synmode/newmode와 같이 새로운 이름을 정의할 수 있을 뿐만

아니라 이들 이름들이 서로 grant/seize 함으로써 이름들 사이에 복잡한 의존 관계를 가진다.

때로는 정의 자체가 cycle 을 형성하고 있어서 분석이 불가능한 경우도 발생한다. 이를 위해

이름 결합기는 먼저 변화를 분석하기 이전에 이름들의 의존 관계를 분석하기 위해 심볼

테이블로 부터 정의-연결(defined-by) 관계를 추출하여 이름 의존 관계를 의존 그래프

(dependency graph)로 만들고, 이들을 모듈 별로 그룹화하여 모듈간의 의존성을 분석하고 이를

토대로 파일 의존성을 분석한다. 변화 분석 단계에서는 어이가 바뀐 이름에 대해서 의존

그래프를 따라 가면서 어의의 속성을 처리하고 어의 분석을 함으로써 일치성을 유지하게 한다.

이름 결합기는 속성이 변화된 이름들을 추적하여 영향을 받아서 재-컴파일할 모듈과 파일을

결정하고, 재컴파일을 필요로 하는 파일에 대한 seize 파일을 생성한다.

이러한 분리 컴파일 방식은 모든 spec 파일을 함께 인터페이스의 일치성 및 어의를

분석하고 컴파일을 하기 위한 완전한 정보를 seize 파일로 제공하기 때문에 이름의 의존 관계에

의한 컴파일 순서의 문제가 제거된다. 그러나 이러한 방식은 점진적(incremental) 혹은 순서적

(ordered) 컴파일에 비해서 안전성은 보장되지만 경우에 따라 덜 효율적일 때가 발생하기도

한다.

1.6.3 분리 컴파일 과정의 자동화

분리 컴파일을 수행하기 위해 프로그램 파일, spec 파일, seize 파일, 인터페이스

라이브러리 사이에 시간적인 의존 관계가 발생하는데 이 의존 관계를 이용하여 분리 컴파일

과정을 자동화할 수 있다. 이를 기본으로 Makefile 을 이용하고 있으며 Makefile 은 makefile

생성기를 이용하여 자동적으로 생성한다. Makefile 은 프로그램 context 생성, 프로그램 명세

생성, 이름 결합(name binding) 및 seize 파일 생성, 그리고 컴파일 혹은 재컴파일 단계로

구성된다. 프로그램 문맥(context) 생성은 시스템 공통의 인터페이스로 부터 사용자 프로그램을

분석하여 사용자 프로그램이 필요로 하는 인터페이스 정보를 자동적으로 추출하는 기능으로

TDX-10 과 같이 시스템 차원의 공통 인터페이스 정보가 클 때 컴파일해야 할 인터페이스의

TTAS.KO-09.0035(2000. 7.)

6

Page 24: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

크기를 줄임으로써 효율성을 높일 수 있다. Makefile 생성기의 입력으로 형상을 기술하도록 되어

있다. 형상 기술에는 컴파일해야 할 파일 정보, 지시자(directive), 옵션 등의 정보를 포함한다.

또한 관리해야 할 형상이 클 경우 디렉토리(directory) 구조를 따라 재귀적(recursive)으로 기술할

수 있으며, SCCS(Source Code Control System)과 연동하여 사용할 수 있다.

TTAS.KO-09.0035(2000. 7.)

7

Page 25: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

제 2 장 기초 사항

2.1 표기법

본 매뉴얼은 크게 구문 기술부, 예제, 어의 기술부, 참고 사항부, 그리고 참조부로 구성되어

있다.

2.1.1 구문 기술부

구문 기술부는 사용자가 프로그래밍을 할 때 사용할 수 있는 문법을 나타내며, 확장한

BNF(Backus-Naur Form)을 이용하여 그와 유사한 형태로 기술하였다. BNF 서술을 위한

표기법을 다음과 같이 정의한다:

1. 구문 생성 규칙은 ::= 심볼의 좌측에는 비단말(nonterminal)이 그리고 우측에는 좌측

비단말이 유도하는 구문 규칙을 기술한다.

2. 단말(terminal) 심볼은 대문자 혹은 소문자 영문으로 표기한다.

3. 이탤릭체로 쓰여진 어휘는 어의를 포함한 구문을 의미하며, 그와 관계가 있는 비단말이나

단말 심볼을 포함하고 있음을 의미한다.

4. | 심볼은 구문 생성 좌측의 비단말에 대하여 우측에 여러 개의 다른 형태의 구문 생성

규칙을 가짐을 의미한다.

5. 구문상에서 { 와 } 사이에는 비단말 혹은 단말 심볼들이 들어 갈 수 있으며 { 와 } 사이의

심볼로 그룹화 함을 의미한다.

6. + 심볼은 그 요소가 하나 이상 존재하고 있음을 의미한다.

7. * 심볼은 그 요소가 없을 수도 있으며 하나 이상 존재할 수도 있음을 의미한다.

2.1.2 예제부

구문에서 표시된 기능에 대하여 사용자가 프로그래밍할 수 있도록 쉽고 간단한 사용 예를

보이고, 필요에 따라서 적당한 설명을 첨가하였다.

2.1.3 어의 기술부

구문 정의가 가지는 의미 및 기능에 관하여 설명한다.

TTAS.KO-09.0035(2000. 7.)

8

Page 26: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

2.1.4 참고 사항부

구문 기술부에서 기술한 구문 범주 내에서 ITU-T 가 권고한 객체지향 CHILL 정의에 대해

제한 사항, 추가 사항, 혹은 변경된 사항에 대하여 기술한다.

2.1.5 참조 사항부

본 매뉴얼에서 언급하지 않은 자세한 내용을 알고자 할 때 이용할 수 있는 참고 문헌이나 본

매뉴얼에서 관계되는 다른 부분을 알려 준다. 참고 문헌의 표기는 아래와 같다:

(1) CHILL user's manual :

CCITT, CHILL user's manual (corresponding to Z.200(1980)), April 1985

CHILL user's manual 을 이용하여 같은 단원의 CHILL Z.200(1980)과 CHILL

Z.200(1996)을 참고할 수 있다.

(2) Section 번호 표시 :

CHILL Language Reference Manual

2.2 어휘

객체지향 CHILL 프로그램의 렉시컬 요소(즉, 어휘)에는 특수 심볼(special symbol)인 예약어

렉시컬(lexical) 심볼, 연산자 등과 이름(name), 리터럴(literal), 숫자(digit), 문자(character) 등이

있다. 이름은 다음과 같이 나타낸다:

[구문]<name> ::=

<letter> { <letter> | <digit> | _ }*

<digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

<hexadecimal digit> ::=<digit> | A | B | C | D | E | F | a | b | c | d | e | f

<octal digit> ::=0 | 1 | 2 | 3 | 4 | 5 | 6 | 7

<character> ::= <letter>| <digit>| <symbol>| <non-graphic character>

<letter> ::= A | B | C | D | E | F | G | H | I | J | K | L | M

TTAS.KO-09.0035(2000. 7.)

9

Page 27: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

| N | O | P | Q | R | S | T | U | V | W | X | Y | Z| a | b | c | d | e | f | g | h | i | j | k | l | m| n | o | p | q | r | s | t | u | v | w | x | y | z

<symbol> ::= _ | ' | " | ( | ) | * | + | , | - | . | / | : | ; | < | = | > | ?

<non-graphic character> ::=newline \nhorizontal tab \tback space \bNULL character \0carriage return \rform feed \fback slash \\single quote \'double quote \"

[어의]

이름은 문자(a-z, A-Z)로 시작하여 밑줄(_), 문자, 숫자(0-9)들로 구성해야 된다. 밑줄 심볼(_)

도 이름의 일부분을 이루므로, LIFE_TIME 과 LIFETIME 은 서로 다른 이름이다. 또한 소문자(a-

z)와 대문자(A-Z)도 다르게 취급하므로, Status 와 status 는 서로 다른 이름이다.

예약어는 객체지향 CHILL 언어에서 미리 정의된 것이므로, 일반적인 이름으로 이용될 수

없다. 그리고 예약어의 전체 소문자와 전체 대문자는 같이 취급하므로, ARRAY 와 array 는

동일한 예약어로 취급한다. 그러나 aRRay 혹은 Array 등은 전체적으로 소문자 혹은 대문자로

구성되지 않았으므로 예약어가 아니라 이름으로 취급한다.

리터럴은 다음과 같은 것들이 있다:

emptiness - NULL 혹은 null

진위 - TRUE 혹은 true, FALSE 혹은 false

정수 - 342, 285_342, D'21_000 등

문자 - 'A', '1' 등

문자 스트링 - '객체지향 CHILL', 'I Love You\0' 등

비트 스트링 - B'0101', b'1111_0000' 등

가변 문자 스트링 - "객체지향 CHILL is a best language for Telecom." 등

프로시듀어 – general 속성을 갖는 프로시듀어 정의문 (예: IntSum: PROC(x INT, y

INT) RETURNS(INT))이 있을 때, IntSum 등

[참조]

CHILL user's manual 5.2.4.2, 5.2.4.7

2.3 렉시컬 심볼

TTAS.KO-09.0035(2000. 7.)

10

Page 28: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

객체지향 CHILL 언어에서 쓰이는 렉시컬 심볼(lexical symbol)들은 다음과 같다:

기호 이름 사 용 ; semicolon terminator for statements etc., comma separator in various constructs( left parenthesis opening parenthesis of various constructs) right parenthesis closing parenthesis of various constructs[ left square bracket opening bracket of a tuple] right square bracket closing bracket of a tuple(: left tuple bracket opening bracket of a tuple:) right tuple bracket closing bracket of a tuple: colon label indicator, range indicator. dot field selection symbol:= assignment symbol assignment, initialization-> arrow referencing, dereferencing, prefixing renaming/* comment opening bracket start of a comment*/ comment closing bracket end of a comment' single apostrophe start or end symbols in various literals" double quotation start or end symbols in variable length string literals-- line-comment end line end delimiter of in-line comments! prefixing operator qualifier to a moreta mode name or to a set element name

[참조]

CHILL user's manual 14. "Special Symbols"

2.3.1 예약어

다음은 CHILL 언어에서 쓰이는 예약어들로서, 대문자나 소문자 모두 혼용해서 사용할 수

있다.

ABS abs ABSTRACT abstractAFTER after ALL allALLOCATE allocate AND andARRAY array ASM asmAT at BASED_ON based_onBEGIN begin BIT bitBODY body BOOL boolBUFFER buffer BY byBYTE byte CALL callCARD card CASE caseCHAR char CONSTR constrCONTINUE continue DCL dclDELAY delay DESTR destrDIRECTLY directly DO doDOWN down ELSE elseELSIF elsif END endEOF eof ESAC esacEVENT event EVER everEVERY every EXCEPT except

TTAS.KO-09.0035(2000. 7.)

11

Page 29: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

FALSE false FI fiFINAL final FOR forGOTO goto GRANT grantIF if IMPLEMENTS implementsIN in INCOMPLETE incompleteINIT init INLINE inlineINSTANCE instance INT intINTERFACE interface LENGTH lengthLOC loc LOWER lowerMAX maxMIN min MOD modMODULE module NATIVE nativeNEWMODE newmode NONPERSISTENT nonpersistentNOT not NULL nullNUM num OD odOF ofOR or PERVASIVE pervasivePOWERSET powersetPRED pred PRIORITY priorityPROC proc PROCESS processPROXY proxy PTR ptrRANGE range RECEIVE receiveREF ref REGION regionREIMPLEMENT reimplement REM remREMOTE remote REPEAT repeatRETURN return RETURNS returnsSEIZE seize SELECT selectSELF self SEND sendSET setSHORT short SIGNAL signalSIZE size SPEC specSTACKSIZE stacksize START startSTATIC static STOP stopSTRUCT struct SUCC succSYN syn SYNMODE synmodeSYSTEM system TASK taskTERMINATE terminateTHEN then THIS thisTIMELIMIT timelimit TO toTRUE true UNION unionUPPER upper VARARG varargWHEN when WHILE whileWITH with XOR xor

* 객체지향성과 포괄성을 도입한 객체지향 CHILL 에서 추가된 예약어는 다음과 같다:ABSTRACT abstractANY anyANY_ASSIGN any_assignANY_DISCRETE any_discreteANY_INT any_intANY_REAL any_realASSIGNABLE assignableBASED_ON based_on

TTAS.KO-09.0035(2000. 7.)

12

Page 30: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

BODY bodyCONSTR constrDESTR destrGENERIC genericINCOMPLETE incompleteINVARIANT invariantMODE modeNOT_ASSIGNABLE not_assignablePOST postPRE preREIMPLEMENT reimplementREMOTE remoteSELF selfTASK taskWHEN when

* 예약어는 앞으로 추가될 수 있다.

[참조]

CHILL user's manual 15. "CHILL Special Names"

2.3.2 연산자

기호 이름 사용< 작음 관계 연산자<= 작거나 같음 관계 연산자= 같음 관계 연산자 혹은 정의 지시기/= 같지 않음 관계 연산자>= 크거나 같음 관계 연산자 > 큼 관계 연산자:= 치환 치환 연산자+ 더하기 덧셈 연산자- 빼기 뺄셈 연산자* asterisk 곱셈 연산자/ solidius 나눗셈 연산자

[참조]

CHILL user's manual 14., 5.3

2.3.3 이름

객체지향 CHILL 에서 장소는 접근할 수 있는 이름을 뜻한다. 이름은 반드시 영문자로

시작되어야 하며, 하나 이상의 문자와 숫자 및 밑줄 기호(_)의 조합으로 된 이름도 가능하다. 즉,

time_table 은 timetable 과 서로 다른 이름이다. 이름의 끝은 공란 혹은 특수 기호로 구별한다.

TTAS.KO-09.0035(2000. 7.)

13

Page 31: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

예를 들어 time table 은 2 개의 이름인 time 과 table 이 된다.x325richard_straussfirst_digitstate_no_325

객체지향 CHILL 언어의 예약어(혹은 keyword)들은 사용자가 이름으로 사용할 수 없다.

다음은 이름으로 사용될 수 없는 예이다. 또한 객체지향 CHILL 에서는 식별자에 밑줄 기호(_)를

연속해서 두개 이상 사용할 수 없다.

CHAR - 예약어DCL - 예약어B+EL - 특수 심볼(+)1xA3 - 숫자로 시작S;23 - 특수 심볼(;)

[참조]

CHILL user's manual 2.2

2.3.4 리터럴

기호 이름 사용B', b' 리터럴 표시 2 진수O', o' 리터럴 표시 8 진수D', d' 리터럴 표시 10 진수H', h' 리터럴 표시 16 진수

[예제]DCL i INT := D'18;

DCL j INT := b'1010;

DCL k INT;k := O'743;

DCL x, y INT;x := h'A65F;y := H'cb4a;

[참조]

CHILL user's manual 5.2.4.2

TTAS.KO-09.0035(2000. 7.)

14

Page 32: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

2.4 코멘트

[구문]<comment> ::=

<bracketed comment>| <line-end comment>

<bracketed comment> ::=/* <character string> */

<line-end comment> ::=-- <character string> <end-of-line>

<character string> ::={ <character> }*

[예제]/* This is an example of a comment in English. *//* 코멘트는 한글로도 작성할 수 있다. */

-- This is an example of a comment in English. <end-of-line>-- 코멘트는 한글로도 작성할 수 있다. <end-of-line>

[어의]

코멘트는 프로그램의 일부분이 아니며, 단지 프로그래머가 프로그램을 읽기 쉽도록

설명하기 위한 것으로, 한글을 포함할 수도 있다.

<end-of-line>은 코멘트가 발생하는 행의 끝을 지칭한다. 따라서 <line-end comment>는 그

행의 끝이 처음 발생하는 곳에서 종료된다.

[참조]

CHILL user's manual 2.4

Z. 200 CHILL 2.4

TTAS.KO-09.0035(2000. 7.)

15

Page 33: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

제 3 장 모드 및 클래스

3.1 일반 사항

모드(mode)는 장소(location)에 접속되어 있고, 값(value)은 장소에 접속된 클래스(class)를

갖는다. 장소에 접속된 모드는 장소, 장소의 접근(access) 방법 및 그 값에 허용되는 연산들에

포함된 값 집합을 정의한다. 값에 접속된 클래스는 값을 갖는 장소의 모드를 결정하는 한

수단이다. 어떤 값은 strong 하다. Strong 값은 클래스와 이에 접속된 모드를 갖는다. Strong 값은

모드 정보가 필요한 값 문맥들 내에서 필요하다.

3.1.1 모드

객체지향 CHILL 은 정적 모드(즉, 모든 특성이 정적으로 결정될 수 있는 모드)와 동적 모드

(즉 몇몇 특성이 실행 시간에만 알 수 있는 모드)를 갖는다. 동적 모드는 항상 실행-시간

매개인자를 갖는 매개화된 모드이다. 정적 모드는 구문 범주인 모드(mode)의 단말 생성자이다.

모드는 또한 프로그램 문맥 안에 명시적으로 지칭되지 않은 값에 의해 매개화되어 있다.

3.1.2 클래스

객체지향 CHILL 에서 클래스는 어떠한 표기도 갖지 않는다. 아래와 같은 종류의 클래스가

존재하며, 객체지향 CHILL 프로그램안의 어떤 값은 이들 종류중의 한 클래스를 갖는다. 모드 M

에 대해 M-value 클래스가 존재한다. 그 클래스를 갖는 모든 값과 이들 값들만이 strong 하고 그

값에 접속된 모드는 M 이다.모드 M 에 대해 M-파생(derived) 클래스가 존재한다.어떤 모드 M 에 대해 M-참조(reference) 클래스가 존재한다.null 클래스all 클래스

마지막 두 클래스는 상수(constant) 클래스이다. 즉, 모드 M 에 독립적이다. M 이 동적

모드인 M-값(value) 클래스, M-파생 클래스 혹은 M-참조 클래스이면, 그 클래스를 동적이라

한다.

3.1.3 모드와 클래스의 특성 및 이들간의 관계

객체지향 CHILL 에서 모드는 특성을 갖는다. 이 특성은 세습적 혹은 비-세습적일 수 있다.

세습적인 특성은 정의 모드부터 정의되는 모드 이름까지 상속된다. 아래의 요약은 모든

TTAS.KO-09.0035(2000. 7.)

16

Page 34: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

모드들에 적용할 특성들이다:모드는 노벨티(novelty)를 갖는 것이 아니라 이름 동치(name equivalence)를 따른다.모드는 읽기-전용(read-only) 특성을 가질 수 있다.모드는 매개화할 수 있다.모드는 참조 특성을 가질 수 있다.모드는 태그를 갖는 매개화 특성을 가질 수 있다.모드는 non-value 특성을 가질 수 있다.

객체지향 CHILL 에서 클래스는 다음과 같은 특성들을 갖는다 (12.1 절에 정의되어 있음)클래스는 root 모드를 가질 수 있다.하나 혹은 그 이상의 클래스들은 결과 클래스를 가질 수 있다.

객체지향 CHILL 에서 연산은 장소와 값의 모드와 클래스에 의해 결정된다. 이는 모드와

클래스간의 많은 관계처럼 12.1 절에 정의된 모드 점검 규칙에서 나타난다. 다음과 같은 관계가

있을 수 있다:두 모드들은 similar 하다.두 모드들은 v-equivalent 하다.두 모드들은 equivalent 하다.두 모드들은 l-equivalent 하다.두 모드들은 alike 하다.두 모드들은 novelty bound 하다.두 모드들은 read-compatible 하다.두 모드들은 dynamic read-compatible 하다.두 모드들은 dynamic equivalent 하다.한 모드는 다른 모드에 restrictable 할 수 있다.모드는 클래스와 compatible 하다.클래스는 클래스와 compatible 하다.

3.2 모드 정의

3.2.1 개요

[구문]<mode definition> ::=

<name list> = <defining mode>

<defining mode> ::= <mode>[3.3]

[예제]tree_elem = STRUCT( i INT, left, right sub_tree);sub_tree = REF tree_elem; /* linked list 구조를 형성 */Dollar = INT;Data1 = PROC(Data1) (INT);

TTAS.KO-09.0035(2000. 7.)

17

Page 35: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

[어의]

모드 정의는 모드를 나타내는 이름을 정의하며, newmode정의문과 synmode 정의문에서

발생한다. 모드 이름을 사용함으로써 프로그램을 읽기 쉽고 관리하기 쉽게 작성할 수 있다. 모드

정의는 재귀적으로(recursively) 정의할 수 있으며, 이것을 재귀 모드 이름이라 한다. 재귀 모드

이름은 그것의 모든 특성을 정의 모드로부터 알 수 있도록 정의되어야 한다. 예를 들면, "Data =

STRUCT(n INT, v Data)"와 같은 정의는 Data 의 메모리 크기를 결정할 수 없으므로 허용되지

않는다. 따라서 재귀 모드 이름의 정의는 참조 모드나 프로시듀어 모드를 사용할 경우에만

가능하다.

[참조]

CHILL user's manual 3.2.1

3.2.2 SYNMODE 정의문

[구문]<synmode definition statement> ::=

SYNMODE <mode definition> {, <mode definition>}* ;

[예제]SYNMODE month = SET(jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec);SYNMODE a = INT, b = a; /* b 는 INT 모드를 가짐 */

[어의]

synmode 정의문은 정의 모드를 위한 이름을 정의하며, 정의된 이름은 정의 모드와 완전히

같다. 위의 두 번째 예에서 a, b 는 모두 같은 모드인 정수 모드 INT 로 사용된다.

[정적 특성]

synmode 정의문안의 정의 이름은 synmode 를 정의한다. synmode 이름은 다음과 같을 때

모드 M 과 유사하다고(synonymous) 말할 수 있다:

M 이 synmode 이름의 정의 모드일 때;

synmode 이름의 정의 모드가 M 과 유사한 synmode 이름일 때.

두 개의 모드 A 와 B 가 다음과 같을 때 유사하다:

A 와 B 가 같은 이름일 때;

A 가 B 의 정의 모드이고 B 가 synmode 이름일 때;

B 가 A 의 정의 모드이고 A 가 synmode 이름일 때;

A 의 정의 모드가 B 와 유사하고 A 가 synmode 이름일 때;

B 의 정의 모드가 A 와 유사하고 B 가 synmode 이름일 때.

TTAS.KO-09.0035(2000. 7.)

18

Page 36: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

synmode 이름의 novelty 는 정의 모드의 novelty 이다.

[참조]

CHILL user's manual 3.2.2

3.2.3 NEWMODE 정의문

[구문]<newmode definition statement> ::=

NEWMODE <mode definition> {, <mode definition>}* ;

[예제]NEWMODE line = RANGE(1:8); /*line 은 1 에서 8 사이의 값을 가지는 새로운 모드*/NEWMODE dollar = INT; /*dollar 는 정수 모드와 같은 특성을 가지는 새로운 모드*/

[어의]

newmode 정의문은 새로운 모드를 나타내는 이름을 정의한다. newmode 정의문에 의하여

정의된 모드는 그 모드를 정의하는 정의 모드와 같은 특성을 가지나 같은 모드는 아니며 서로

호환성이 없다. 위의 예에서 dollar 는 정수와 같은 특성을 가지나 같은 모드는 아니다. 따라서

"DCL a dollar, b INT;"로 선언하였을 경우 "a := b;" 같은 실행문은 허용하지 않는다. synmode

정의문은 같은 모드의 이름을 정의하는 반면, newmode 정의문은 같은 특성을 갖는 완전히 다른

모드를 정의한다.

ETRI 의 객체지향 CHILL 에서는 SYNMODE/NEWMODE 구별이 없이 C/C++의 typedef 와

같이 단순한 이름 동치만을 따른다. 왜냐하면 novelty 특성 추가는 교환기 프로그램 개발 경험상

불필요함을 경험으로 알았기 때문이다.

[참조]

CHILL user's manual 3.2.3

3.3 모드 분류

객체지향 CHILL 프로그램의 모든 장소는 모드를 가지며, 모드에는 복합(composite) 모드와

비복합(non-composite) 모드가 있다. 복합 모드는 스트링(string) 모드, 배열(array) 모드, 구조체

(structure) 모드 및 모레타(moreta) 모드와 같이 부분적으로 접근할 수 있는 모드이며, 비복합

모드는 부분적으로 접근할 수 없는 모드이다.

[구문]<mode> ::=

TTAS.KO-09.0035(2000. 7.)

19

Page 37: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

<non-composite mode>| <composite mode>| <formal generic mode indication>[3.3.6]

<non-composite mode> ::= <discrete mode>[3.4]

| <real mode>[3.5]

| <powerset mode>[3.6]

| <bound reference mode>[3.6.2]

| <free reference mode>[3.6.3]

| <procedure mode>[3.7]

| <instance mode>[3.8]

| <synchronization mode>[3.9]

<composite mode> ::= <string mode>[3.10.2]

| <array mode>[3.10.3]

| <structure mode>[3.10.4]

| <union mode>[3.10.5]

| <moreta mode>[3.11]

[예제]다음 예는 비복합 모드들이다.

BOOL, RANGE(1:10), REF INT, CHAR;

다음은 복합 모드들에 대한 예이다.CHAR(20), ARRAY(1:20) INT, STRUCT(a BOOL, x INT);

SYNMODE StackMode = MODULE SPEC SEIZE ElementMode; SYN ElementNo = 100; DCL StackData ARRAY(1:ElementNo) ElementMode; Push: SPEC PROC(ElementMode) END; Pop: SPEC PROC( ) RETURNS(ElementMode) END; PUBLIC Push, Pop;END StackMode;SYNMODE StackMode = MODULE BODY Push: PROC(x ElementMode); /* 원소 프로시듀어 Push 의 구현 */ END Push; Pop: PROC() RETURNS(ElementMode); /* 원소 프로시듀어 Pop 의 구현 */ END Pop;END StackMode;

[어의]

모드는 그 모드의 장소가 차지하는 메모리 단위의 수를 나타내는 크기를 가진다. 모드 앞에

예약어 READ 가 올 수 있으며 그러한 모드를 읽기-전용(read-only) 모드라 하고, 읽기-전용

모드를 가지는 장소의 내용은 수정할 수 없으며 그 장소의 내용을 읽는 것만 허용된다. 각 모드

값에 대해서는 같음(=), 틀림(/=) 연산을 수행할 수 있다.

TTAS.KO-09.0035(2000. 7.)

20

Page 38: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

[참조]

CHILL user's manual 3.3

(향후 국제 표준에 의거 어의 모델 추가 예정)

3.4 이산 모드

3.4.1 개요

이산(discrete) 모드는 전체적으로-정돈된(totally-ordered) 값들의 집합과 부-집합을

정의한다. 여기서 정돈된 값이란 작은 값부터 큰 값까지 차례로 정돈될 수 있는 값을 의미한다.

모든 이산 모드는 상한 값과 하한 값을 가진다. 또한 범위(range) 모드가 아닌 모든 이산 모드는

범위 모드의 부모(parent) 모드가 될 수 있다. 이산 모드를 가지는 두 값 사이에는 관계 연산,

NUM, PRED, SUCC 와 같은 built-in 루틴 연산이 가능하며, 여기서 관계 연산에는 다음과 같은

것들이 있다.less than: <less than or equal to: <=equal to: =greater than: >greater than or equal to: >=not equal to: /=

이산 모드의 종류<discrete mode> ::=

<integer mode>[3.4.2]

| <boolean mode>[3.4.3]

| <character mode>[3.4.4]

| <set mode>[3.4.5]

| <range mode>[3.4.6]

[참조]

CHILL user's manual 3.4.1

3.4.2 정수 모드

[구문]<integer mode> ::=

INT

[예제]

TTAS.KO-09.0035(2000. 7.)

21

Page 39: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

DCL xx INT;xx := 10;

[어의]

정수 모드는 부호를 갖는 정수 값의 집합을 정의한다. 정수 모드는 포함될 수 있는 값의

상한치와 하한치를 가진다. 정수 모드를 갖는 값들 사이에서 불연속 모드에서 정의한 연산과 +,

-, *, /, MOD, ABS, REM 등의 연산을 할 수 있다.

[참조]

CHILL user's manual 3.4.2

3.4.3 진위 모드

[구문]<boolean mode> ::=

BOOL

[예제]DCL bb BOOL;bb := TRUE;

[어의]

진위 모드는 진위 동작을 하는 논리적 진위 값(TRUE, FALSE)을 정의한다. 진위 모드의

상한 값은 TRUE 이며, 하한 값은 FALSE 이다. 진위 값 사이에는 이산 모드에서 정의된 연산과

AND, OR, XOR, NOT 등의 연산을 할 수 있다.

[참조]

CHILL user's manual 3.4.3

3.4.4 문자 모드

[구문]<character mode> ::=

CHAR

[예제]DCL cc CHAR;cc := 'a';

TTAS.KO-09.0035(2000. 7.)

22

Page 40: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

[어의]

문자 모드는 ASCII 코드에 기술된 문자 값들을 정의한다. 이 값들은 '2' < 'A' < 'B' < 'C'와

같은 문자 배열 순서를 정의한다. 문자는 길이가 1 인 스트링과 같으며, 문자 값들 사이에는

불연속 모드에서 정의된 연산과 길이가 1 인 문자 스트링에서 정의되는 연산들을 사용할 수

있다.

[참조]

Section 3.3.5.2

CHILL user's manual 3.4.4

3.4.5 세트 모드

(향후 국제 표준에 의거 numbered set 모드의 기능 추가 예정)

[구문]<set mode> ::=

SET ( <set element name list> )

[예제]DCL weekday SET(mon, tue, wed, thu, fri);weekday := mon;

[어의]

세트 모드는 비 수치적인 양을 나타내기 위해서 사용할 수 있는 값의 집합을 정의한다. 이

값들은 이름 리스트에 정의되는 이름에 의해서 표현된다. 세트 모드의 각 값은 그와 관련된 정수

값을 내부적인 표현으로 가지며, 이 내부 표현은 값의 순서를 정의한다. 위의 예는 mon, tue,

wed, thu, fri 의 5 가지 값을 정의한다. 또한 그들의 내부 표현은 배열 순서와 일치하며, mon 은 0,

tue 는 1, wed 는 2, thu 는 3, fri 는 4 의 내부 표현을 가진다.

[참고사항]

세트 원소 이름은 세트 모드마다 중복해서 정의할 수 있으므로 한정자(!)를 이용하여

유일하게 접근할 수 한다.

[참조]

CHILL user's manual 3.4.5

3.4.6 이산 범위 모드

TTAS.KO-09.0035(2000. 7.)

23

Page 41: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

[구문]<range mode> ::=

<discrete mode name> ( <literal range> )| RANGE ( <literal range> )| INT ( <literal range> )

<literal range> ::= <discrete literal expression> : <discrete literal expression>

[예제]DCL rr RANGE(2:100); /* rr 은 2 와 100 사이의 정수 값을 가질 수 있다. */rr := 30;

[어의]

범위 모드는 기술된 범위 내에 있는 값들의 집합을 정의하며, 큰 값의 집합에서 제한된 범위

내에 있는 값들만을 정의할 때 유용하다. 범위 모드는 그 모드 값이 가질 수 있는 값들의

하한치와 상한치를 가진다.

[참고 사항]

이산 모드 이름은 반드시 사용자가 정의한 모드 이름이어야 한다.

하한치와 상한치는 서로 호환성을 가져야 하며, 상한치는 하한치보다 크거나 같아야 한다.

discrete_mode_name(literal_range) 형태로 범위 모드가 정의될 경우에 literal_range 는

discrete_mode_name 과 호환성을 가져야 하며, 그들의 값은 discrete_mode_name 의 범위

내에 있어야 한다.

범위 모드가 가지는 값의 범위에 따라 [1, 2, 4] 바이트로 메모리 할당이 이루어진다.

[참조]

CHILL user's manual 3.4.6

3.5 실수 모드

[구문]

<real mode> ::= <floating point mode>| <floating point range mode>

[어의]

실수 모드는 실수 숫자의 연속적인 범위에 근접한 수치 값의 집합을 명시한다.

TTAS.KO-09.0035(2000. 7.)

24

Page 42: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

3.5.1 부동 소수점 모드

[구문]<floating point mode> ::=

<floating point mode name>

[예제]DCL FloatLoc FloatMode;FloatLoc := 3.17;

[어의]

부동 소수점 모드는 일반적인 순서와 산술 연산이 정의된, 즉 구현에 의해 정의된

한계들간에, 최소한의 정확성을 갖는 실수 값의 범위에 수치 근접한 집합을 정의한다(5.3 절

참조). 이 집합은 구현에 의해 표현될 수 있는 값들만을 포함한다. 구현은 범위에 대한 부모

모드로써도 사용될 수 있는 각기 다른 한계나 정밀도(예. LONG_FLOAT, SHORT_FLOAT)를

갖는 다른 부동 소수점 모드들을 정의할 수 있다(13.3 절 참조). &FLOAT 모드는 구현에 의해

정의된 모든 미리-정의된 부동 소수점 모드의 모든 값을 포함하는 가상 모드로써 소개된다. 부동

소수점 값의 내부 표현은 부동 소수점 값 그 자체이다.

[정적 특성]

부동 소수점 모드는 다음과 같은 세습적인 특성을 갖는다:

상한치와 하한치는 부동 소수점 모드에 의해 정의된 가장 높은 값과 가장 낮은 값을

상대적으로 지칭하는 리터럴이다. 이들은 구현에 의존적이다.

부동 소수점 모드에 의해 정의된 최대 개수의 유효 10 진 숫자인 정밀도

0 을 배제한 부동 소수점 모드에서 정확하게 표현할 수 있는 가장 작은 양수 값과 가장 큰

음수 값을 지칭하는 리터럴인 양수 하한 한계 및 음수 상한 한계

3.5.2 부동 소수점 범위 모드

[구문]<floating point range mode> ::=

<floating point mode name> ( <float value range> )| RANGE ( <float value range> [ , <significant digits> ] )| <floating point range mode name>

<float value range> ::=<lower float bound> : <upper float bound>

<lower float bound> ::=<floating point literal expression>

TTAS.KO-09.0035(2000. 7.)

25

Page 43: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

<upper float bound> ::=<floating point literal expression>

<significant digits> ::=<integer literal expression>

[예제]DCL FloatLoc RANGE(3.05 : 3.75);FloatLoc := 3.17;

[어의]

부동 소수점 범위 모드는 significant digits 에 의해 명시된 많은 유효 숫자를 갖는 float value

range 에 의해 명시된 한계치들 사이에 범위를 잡는 값들의 집합을 정의한다. 그 범위는 범위

값의 순서와 연산들을 정의하는 특정 부모 모드에서 정의된다. 예를 들면, RANGE(-10.0E1 :

10.0E1, 2)는 다음과 같은 값들을 지칭한다: -10.0, -9.9, ..., -0.1, 0, 0.1, ..., 10.0

[정적 특성]

부동 소수점 범위 모드는 다음과 같은 비-세습적인 특성을 갖는다: 부동 소수점 범위 모드는

부모 모드를 가지며 다음과 같이 정의된다:

부동 소수점 범위 모드가 다음과 같은 형태를 가질때,

<floating point mode name> ( <float value range> )

<floating point mode name>이 부동 소수점 범위 모드가 아니면, 그 부모 모드가 <floating

point mode name>이다. 그렇지 않으면 그것은 <floating point mode name>의 부모

모드이다.

부동 소수점 범위 모드가 다음과 같은 형태를 가지면,

RANGE ( <float value range> [ , <significant digits> ] )

그때 부모 모드는 literal range 안에 있는 <upper float bound>와 <lower float bound>

클래스의 결과 클래스에 의존한다.

부동 소수점 범위 모드가 부동 소수점 모드 M-파생 모드이면, 그 부모 모드는 아래 정의된

정밀도를 갖는 float value range 가 전해준 값의 범위를 포함한 구현에 의해 선택된 부동

소수점 모드이다.

그렇지 않으면 결과 클래스의 root 모드이다.

부동 소수점 범위 모드는 다음의 세습적인 특성을 갖는다:

상한치와 하한치는 float value range 에서 lower float bound 와 upper float bound 에 의해

전달되는 값을 지칭하는 리터럴이다.

부동 소수점 범위 모드가 다음의 형태를 가질때,

RANGE ( <float value range> [ , <significant digits> ] )

TTAS.KO-09.0035(2000. 7.)

26

Page 44: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

정밀도는 significant digits 에 의해 전달되는 값이다.

그렇지 않으면, lower float bound 와 upper float bound 의 정밀도의 가장 큰 정밀도이다.

그렇지 않으면, 부동 소수점 범위 모드는 floating point mode name 혹은 floating point range

mode name 의 세습적인 특성을 갖는다.

[정적 조건]

lower float bound 는 upper float bound 에 의해 전달된 값보다 작거나 같은 값을 전달해야

한다. 그리고 두 값은 floating point mode name 에 의해 정의된 값의 집합에 속한다.

명시된 정밀도를 갖는 상한과 하한 모두를 포함하는 미리-정의된 부동 소수점 모드가

존재해야 한다.

significant digit 의 값은 0 보다 커야 한다.

1.lower float bound 와 2. upper float bound 의 연산은 부동 소수점 범위 모드의 1. lower

bound 와 2. upper bound 의 값에 직접 혹은 간접적으로 의존하지 말아야 한다.

3.6 집합 모드

[구문]<powerset mode> ::=

POWERSET <member mode>

<member mode> ::= <set mode>

[예제]NEWMODE aspects = SET(fast, remote, duplicated), status = POWERSET aspects;여기서 status 의 값은 다음 tuple 로 표현되는 값들이 될 수 있다. 1) [ ] 2) [fast] 3) [remote] 4) [duplicated] 5) [fast, remote] 6) [fast, duplicated] 7) [remote, duplicated] 8) [fast, remote, duplicated]

[어의]

집합 모드는 주어진 멤버(member) 모드의 값의 집합을 정의한다. 여기서 멤버 모드는

반드시 세트 모드이어야 한다. 위의 예에서 status 의 멤버 모드는 aspects 가 된다. 세트

모드에서 가능한 합집합(OR), 교집합(AND), complement(NOT), set inclusion(>, >=, <, <=),

membership(IN), complement(NOT)와 같은 연산이 집합 모드에서도 가능하다.

TTAS.KO-09.0035(2000. 7.)

27

Page 45: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

[참조]

CHILL user's manual 3.5

3.7 참조 모드

3.7.1 개요

참조(reference) 모드는 참조-가능한(referable) 장소를 가리키는 (주소(address)나 서술자

(descriptor)인) 참조를 정의한다. 정의에 따라 한정 참조는 정적 모드나 관련된 모레타 모드들의

집합을 갖는 장소를 가리킨다; 자유 참조는 어떠한 정적 모드를 갖는 장소를 가리킬 수 있다;

횡렬 모드는 동적 모드의 장소를 가리킨다.

역참조 연산들은 장소 참조를 전달하는 참조 값에서 정의된다.

두 참조 값은 같은 장소를 가리키거나 어떠한 장소도 가리키지 않을 때 동일하다 (즉, 그들이

NULL 값을 가질 때).

3.7.2 한정 참조 모드

[구문]<bound reference mode> ::=

REF <referable mode>| <bound reference mode name>

[예제]NEWMODE cell = STRUCT(a int, b char);DCL pp REF cell;DCL ll cell;pp := ->ll; /*pp 는 ll 의 주소를 가진다.*/----------------------------------------------------------------SYNMODE StackMode = MODULE SPEC ... END StackMode;SYNMODE StackMode = MODULE BODY ... END StackMode;

SYNMODE StackWithTopMode = MODULE SPEC BASED_ON StackMode ...END StackWithTopMode;SYNMODE StackWithTopMode = MODULE BODY BASED_ON StackMode ...END StackWithTopMode;

DCL StackRefLoc REF StackMode, StackLoc StackMode, StackWithTopLoc StackWithTopMode;

StackRefLoc := ->StackLoc; /* 허용 */

TTAS.KO-09.0035(2000. 7.)

28

Page 46: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

StackRefLoc := ->StackWithTopLoc; /* 허용 */

[어의]

한정 참조 모드는 지정된 모드를 가진 정적(static) 장소의 주소를 지정한다. 위의 예에서 pp

는 ll 에 대한 주소를 가진다. 한정 참조 장소가 모레타 모드 장소를 가리키는 경우엔 그 모레타

모드뿐만 아니라 이의 파생된 하위 모레타 모드 장소의 주소를 지정할 수 있다.

[참조]

CHILL user's manual 3.6.2

3.7.3 자유 참조 모드

[구문]<free reference mode> ::=

PTR| <free reference mode name>

[예제]NEWMODE cell = STRUCT(a int, b char);DCL pp PTR;DCL ll cell;pp := ->ll; /*pp 는 ll 의 주소를 가진다.*/ll.a := pp->a; /*pp 는 ll 의 주소를 가진다.*/

[어의]

자유 참조 모드는 임의의 모드를 가진 정적(static) 장소의 주소를 지정할 수 있다. 위의

첫번째 실행문 예에서 pp 는 ll 에 대한 주소를 가진다.

[참조]

Z.200 객체지향 CHILL 3.7.3

3.7.4 횡렬 모드

(향후 국제 표준에 의거 row 모드의 기능 확장 가능)

3.8 프로시듀어 모드

[구문]<procedure mode> ::=

TTAS.KO-09.0035(2000. 7.)

29

Page 47: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

PROC ( [<spec parameter list>] ) [<result spec>]| <procedure mode name>

<spec parameter list> ::= <spec parameter> { , <spec parameter> }*

<spec parameter> ::= <mode> [ <parameter attribute> ]

<parameter attribute> ::= IN| LOC

<result spec> ::= [RETURNS] ( <mode> )

[예제]NEWMODE p = PROC(INT, INT) (INT);

test:PROC(a,b INT) (INT); IF (a > b) THEN RETURN a; ELSE RETURN b; FI;END test;

DCL Pr p;DCL i, j, k INT;i := 5;j := 10;Pr := test;k := Pr(i, j); /*프로시듀어 test 가 호출된다.*/

[어의]

프로시듀어 모드는 일반적(general) 특성의 프로시듀어 값을 정의한다. 여기서 일반적

(general) 특성의 프로시듀어란 어느 한 블럭 속에 중첩되어 정의된 프로시듀어가 아닌 최-

외각의(outer-most) 프로시듀어를 말하며, 또한 리젼(REGION) 구조 속에 정의되지 않은

일반적인 프로시듀어를 지칭한다. 프로시듀어 모드는 프로시듀어를 동적으로 처리할 수 있는

기능을 제공한다. 예를 들면, 다른 프로시듀어에 매개인자로 전달할 수 있고, 프로시듀어 모드

장소에 저장할 수 있으며, 버퍼에 메시지 값으로 전송할 수 있다. 또한 프로시듀어 호출 수행을

위해서 프로시듀어 모드의 장소를 호출할 수 있다.

두개의 프로시듀어 값이 같은 동적 문맥에서 같은 프로시듀어를 지칭하거나 어떠한

프로시듀어도 지칭하지 않으면(NULL 값이면) 동일하다.

[정적 특성]

TTAS.KO-09.0035(2000. 7.)

30

Page 48: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

프로시듀어 모드는 모드와 매개인자 속성으로 구성된 매개인자 명세 및 모드로 구성된 결과

명세로 구성된다.

[정적 조건]

프로시듀어 모드를 가지는 변수는 가장 바깥의 깊이(depth)에서 정의된 프로시듀어 이름에

대해서만 동적 연산이 가능하다.

따라서 모레타 모드 안에 정의된 원소 프로시듀어를 프로시듀어 리터럴로 사용할 수 없으며,

프로시듀어 변수에 대한 값으로 지정할 수 없다.

[참조]

CHILL User's Manual 3.7

3.9 인스턴스 모드

[구문]<instance mode> =::

INSTANCE| <instance mode name>

[예제]ex_process: PROCESS( ); DCL i INSTANCE; i := THIS;END ex_process;

DCL j, k INSTANCE; /* j, k 를 인스턴스 모드로 선언 */j := START ex_process(); /* START 함수문 */START ex_process() SET k; /* START 실행문 */

[어의]

인스턴스는 각 프로세스를 지칭하는 고유한 값으로, 각 프로세스가 생성될 때 각각 고유한

인스턴스 값이 부여된다. 이 값을 저장할 변수는 인스턴스 모드로 선언되어야 한다. 이 인스턴스

값들은 등가 여부가 비교될 수 있으며, 프로세스가 수행되는 도중에 다음과 같은 것에 의해

인스턴스 값을 얻을 수 있다.

START 수식

START 실행문의 SET 절

THIS 연산자 (수행되고 있는 프로세스 자신의 인스턴스 값을 나타냄)

버퍼 및 시그널에 대한 RECEIVE CASE 실행문의 SET 절

[참조]

TTAS.KO-09.0035(2000. 7.)

31

Page 49: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

CHILL user's manual 8.1.3

Section 8.2.2, 8.4.3, 8.5.4

3.10 동기화 모드

3.10.1 개요

이벤트(event)는 프로세스들간의 동기화(synchronization)를 위한 기능을 제공하며,

이벤트를 이용하여 프로세스간의 동기화를 구현할 수 있는 실행문으로서는 DELAY, DELAY-

CASE, 그리고 CONTINUE 가 있다. 각 이벤트는 이벤트 선언문에 의해 이벤트 모드로

선언되어야 한다. 이렇게 선언된 이벤트는 장소(location)를 가지며 각 이벤트 장소는 그 장소에

동시에 지연(delay)될 수 있는 최대의 프로세스 수를 표시하는 이벤트 길이를 갖는다. 이 이벤트

길이는 양의 정수 값으로 명시되지 않은 경우 0 으로 간주하며 이는 이벤트의 길이가

무한대임을 나타낸다.

프로세스는 DELAY 나 DELAY-CASE 실행문을 수행함으로써 주어진 이벤트 장소에 대해

지연되며, 이 지연된 프로세스는 다른 프로세스가 해당 이벤트 장소에 대한 CONTINUE

실행문을 수행함으로서 다시 수행을 계속하게 된다. 한 프로세스가 CONTINUE 실행문을

수행할 때 주어진 이벤트 장소에 하나 이상의 프로세스가 지연되어 있는 경우에는 그

프로세스들 중 가장 높은 우선순위를 가지고 있는 프로세스가 선택되어 재활성이 된다.

프로세스가 DELAY 나 DELAY-CASE 실행문을 수행할 때 이미 주어진 이벤트 길이 만큼의

프로세스가 지연되어 있을 때 그 프로세스는 지연되지 않는다.

DELAY-CASE 실행문은 하나 이상의 이벤트 장소를 기술할 수 있어 동시에 하나 이상의

이벤트에 대하여 프로세스를 지연시킬 수 있다는 것 이외에는 DELAY 실행문과 동일하며 또한

DELAY-CASE 실행문의 SET 절을 사용함으로써 지연되었던 프로세스를 재활성시킨

프로세스의 인스턴스를 얻을 수 있다.

버퍼(buffer)는 프로세스간의 동기화 및 통신을 위한 기능을 제공하며, 이 버퍼에 대한

실행문들로는 SEND 및 RECEIVE-CASE 실행문, 그리고 RECEIVE 함수문이 있다. 각 버퍼는

장소(location)를 가지고 있으며 이 버퍼 장소는 버퍼 선언문에 의해 반드시 선언되어야 한다.

버퍼 선언문으로 버퍼를 선언할 때 그 버퍼의 메시지에 대한 모드가 반드시 명시되어야 하며, 그

메시지에 대한 모드는 또 다른 버퍼 모드나 이벤트 모드를 포함할 수 없다.

버퍼 모드 선언문에서는 해당 버퍼에 저장할 수 있는 최대 메시지 수를 나타내는 버퍼

길이를 명시할 수 있으며, 버퍼 길이가 명시되지 않은 경우에 버퍼 길이는 0 으로 간주한다. 이

버퍼 길이는 양의 정수 값으로 그 값이 0 인 경우 그 버퍼는 버퍼 메시지를 저장하고 있을 수

없음을 나타낸다. 그러므로 버퍼 길이가 0 인 경우 버퍼 메시지를 보내려는 프로세스는 그

메시지를 받기 위해 지연되어 있는 프로세스가 없을 때는 항상 지연되게 되며, 버퍼 메시지를

TTAS.KO-09.0035(2000. 7.)

32

Page 50: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

받으려는 프로세스도 버퍼 메시지를 보내기 위해 지연되어 있는 프로세스가 없으면 항상

지연된다.

또한 버퍼에 저장된 메시지의 개수가 그 버퍼에 대한 선언문에 명시된 버퍼 길이보다 작을

때 메시지를 보내려고 하는 프로세스는 버퍼 메시지를 버퍼 장소에 저장하고 그 프로세스의

수행을 계속한다. 그러나 이미 버퍼 메시지가 버퍼 길이 만큼 저장되어 있는 경우 메시지를

보내려는 프로세스는 지연되게 된다. 마찬가지로 버퍼로 부터 메시지를 받아 오려고 하는

프로세스도 해당 버퍼에 저장되어 있는 메시지가 있으면 그 메시지를 받아온 뒤 수행을

계속하지만 받아 올 메시지가 없는 경우 그 프로세스는 지연되게 된다. 한 프로세스가 메시지를

보내면 그 메시지는 해당 버퍼에 주어진 우선순위에 따라 저장되며 우선순위가 주어지지 않은

경우 그 메시지의 우선순위는 0 으로 간주되어 저장된다.

[참조]

CHILL user's manual 8.3.3

Section 8.4.1, 8.4.2, 8.4.3, 8.4.4

3.10.2 이벤트 모드

[구문]<event mode> ::= EVENT [ ( <event length> ) ]

| <event mode name>

[예제]DCL ready EVENT; /* "ready"를 이벤트 장소(location)로 선언 */DCL wait EVENT(10); /* "wait"를 이벤트의 길이가 10 인 이벤트 장소로 선언 */

[어의]

이 이벤트 선언문은 프로세스들간의 동기화를 위해 사용될 이벤트에 대한 장소를 정의하여

주는 것으로, 각 이벤트 장소는 그 이벤트에 대하여 지연될 프로세스를 저장하기 위한 일종의

대기 장소(queue)로 간주할 수 있다. 이벤트 길이는 양의 정수 값으로 해당 이벤트 장소에

동시에 지연될 수 있는 최대의 프로세스 수를 나타내며 이 이벤트 길이가 명시되지 않은

경우에는 무한대의 이벤트 길이를 가지는 것으로 간주하며 그 값은 0 이다.

이 이벤트 선언문으로 선언된 기억 장소에 대해 사용할 수 있는 실행문으로는 DELAY,

DELAY-CASE, 그리고 CONTINUE 가 있으며 이벤트 장소에 대해서는 이들 실행문 이외의

어떠한 연산자나 수식 등을 사용할 수 없다.

[참고사항]

이벤트 장소는 가상 최외곽(imaginary outermost) 프로세스에서만 선언할 수 있다.

TTAS.KO-09.0035(2000. 7.)

33

Page 51: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

[참조]

CHILL user's manual 3.9.2, 6.15, 6.16, 6.17, 8.3

Section 8.4, 8.4.2, 8.4.3, 8.4.4

3.10.3 버퍼 모드

[구문]<buffer mode> ::=

BUFFER [ ( <buffer length> ) ] <buffer element mode>| <buffer mode name>

[예제]DCL buffer_1 BUFFER(10) BOOL;DCL buffer_2 BUFFER INT;DCL buffer_3 BUFFER CHAR[10];

[어의]

이 버퍼 선언문은 프로세스들간의 동기화 및 통신을 위해 사용될 버퍼에 대한 장소를

정의하여 준다. 각 버퍼 장소는 일종의 "mailbox"로서 프로세스가 보낸 버퍼 메시지를 저장하고

있으며 또한 프로세스는 이 버퍼 장소로부터 버퍼 메시지를 받을 수 있다. 버퍼 길이는 양의

정수 값으로 해당 버퍼 장소에 저장할 수 있는 최대의 메시지 개수를 나타내며, 이 버퍼 길이가

명시되지 않은 경우에는 그 버퍼에 저장할 수 있는 메시지의 개수가 정의되지 않았음을

나타내며, 이때 버퍼 길이는 시스템에 의해서 default 값으로 정의된다.(현재 host 에서는 O.S 의

메모리 할당 한계까지 임) 버퍼 길이가 0 인 경우 이는 해당 버퍼가 메시지를 저장하고 있을 수

없음을 나타낸다. 그러므로 버퍼 길이가 0 인 경우 버퍼 메시지를 보내려는 프로세스는 그

메시지를 받기 위해 지연되어 있는 프로세스가 없을 때는 항상 지연되게 되며, 버퍼 메시지를

받으려는 프로세스도 버퍼 메시지를 보내기 위해 지연되어 있는 프로세스가 없으면 항상

지연된다.

버퍼 장소에 대한 실행문으로는 메시지를 버퍼 장소에 보내어 저장하는 SEND 실행문,

그리고 버퍼 장소로부터 메시지를 받아오는 RECEIVE 수식과 RECEIVE CASE 실행문이 있다.

[참고사항]

버퍼 장소는 가상 최외곽 프로세스에서만 선언할 수 있다.

[참조]

CHILL user's manual 3.9.3

Section 8.5

TTAS.KO-09.0035(2000. 7.)

34

Page 52: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

3.11 입/출력 모드

(지원 않함)

3.12 시간 모드

(지원 않함)

3.13 복합 모드

3.13.1 개요

복합 모드는 각각 접근할 수 있는 부분 값을 가질 수 있는 모드다. 복합 모드에는 스트링

모드, 배열 모드, 구조체 모드 및 모레타 모드가 있다.

복합 모드의 종류<composite mode> ::=

<string mode>[3.13.2]

| <array mode>[3.13.3]

| <structure mode>[3.13.4]

| <union mode>[3.13.5]

| <moreta mode>[3.14]

[참조]

CHILL user's manual 3.10.1

3.13.2 스트링 모드

[구문]<string mode> ::=

CHAR [ <string length> ]| BIT [ <string length> ]| REF CHAR [ * ]| <string mode name>

<string length> ::= <integer literal expression>

[예제]DCL s CHAR[5];

TTAS.KO-09.0035(2000. 7.)

35

Page 53: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

DCL ss CHAR[30];DCL chstr REF CHAR[*];DCL byte BIT[8];

s := 'abcd\0';ss[5] := 'b';chstr := "this is an example";byte := B'10010111'

[어의]

스트링 모드는 비트 스트링과 문자 스트링 값을 정의한다. 문자 스트링의 주된 사용은

텍스트 수행이며, 비트 스트링 값은 하드웨어와의 인터페이스를 위해 유용하게 사용할 수 있다.

스트링 색인(indexing)은 왼쪽부터 오른쪽으로 주어지며, 0 부터 "(스트링 길이)-1"까지이다.

문자 스트링은 스트링 길이가 주어질 경우와 스트링 길이가 정해지지 않고 그 스트링에 대한

포인터만 가지는 경우가 있다. 스트링의 길이가 주어진 경우에 그 스트링에 대한 치환을

수행하려면 반드시 스트링의 길이가 일치해야 하며, single quotation(')으로 스트링의 시작과

끝을 나타내고, 스트링의 마지막 문자로 '\0'를 함께 삽입하는 것이 안전하다. 왜냐하면 한

스트링의 끝을 '\0' 문자로 나타내기 때문에 나타내고자 하는 스트링의 끝을 명확하게 표현해

주기 때문이다. 스트링 길이가 주어지지 않은 가변 길이 스트링일 경우에는 스트링의 시작과

끝을 double quotation(")으로 표시한다. 가변 길이 스트링일 경우 시스템에서 자동적으로 끝

부분에 '\0'를 삽입해 주기 때문에 스트링의 끝에 '\0'를 넣을 필요가 없다. 스트링 길이가

주어지지 않고 포인터로 선언된 경우는 가변 길이 스트링을 의미하며, 이는 C 와의

인터페이스를 위한 스트링 모드로서 새로이 추가된 모드이다. 가변 길이의 문자 스트링과 문자

스트링 모드의 관계는 11.2 절에 설명되어 있다.

[참고사항]

C 와의 인터페이스를 위하여 C 형태의 스트링과 동일하게 취급한다.

[참조]

Section 11.2 가변 길이 스트링

CHILL user's manual 3.10.2

3.13.3 배열 모드

[구문]<array mode> ::=

ARRAY [ <index mode list> ] <element mode>| <array mode name>

<index mode list> ::= <index mode> { , <index mode> }*

TTAS.KO-09.0035(2000. 7.)

36

Page 54: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

<index mode> ::= <discrete mode>| <literal range>

<element mode> ::= <mode>

[예제]DCL aa ARRAY[1:10, 1:20] INT; /*ARRAY[1:10] ARRAY [1:20] INT;는 오류.*/aa[1,5] := 100;

[어의]

배열 모드는 같은 모드를 가지는 값들의 색인된 리스트를 정의하며, 이 때의 모드를 요소

모드라 한다. 각 색인은 색인 모드에 의해 정의되는 값의 순서적인 집합에 의해 얻어진다. 또한

배열 모드의 각 요소는 분리되어 처리될 수 있다. 앞의 예에서 aa 의 색인 모드는 RANGE(1:10)

이며, aa 의 요소 모드는 ARRAY[1:20] INT 이다.

[참조]

CHILL user's manual 3.10.3

3.13.4 구조체 모드

[구문]<structure mode> ::=

STRUCT ( <field list> )| <structure mode name>

<field list> ::= <field> { , <field> }*

<field> ::= <name list> <mode>

[예제]NEWMODE aday = STRUCT(day RANGE(1:31); month REF CHAR[*]; year RANGE(1000:2000));

DCL today aday;today.day := 10;today.month := "Jan.";today.year := 1988;

[어의]

TTAS.KO-09.0035(2000. 7.)

37

Page 55: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

구조체 모드는 이름으로 분리할 수 있는 일련의 값으로 구성된 복합 값을 정의한다. 각 값은

이름에 부여된 모드에 의해서 정의된다. 구조체에서 선택할 수 있는 이름들은 서로 다르며,

이들을 필드 이름이라 한다. 실제 구조체내의 한 필드 이름을 사용할 때는 <structure location

name>.<field name>으로 쓴다.

구조체 모드의 고정 구조체는 고정된 필드만으로 구성되며, 그러한 필드들은 항상 존재한다

앞의 예에서 첫번째 모드 이름 aday 는 고정 구조체의 예이다.

[참고사항]

모든 필드 이름은 서로 달라야 한다.

[참조]

CHILL user's manual 3.10.4

3.13.5 연합체 모드

[구문]<union mode> ::=

UNION ( <field list> )| <union mode name>

<field list> ::= <field> { , <field> }*

<field> ::= <name list> <mode>

[예제]NEWMODE aday = UNION (day RANGE(1:31); month REF CHAR[*]; year RANGE(1000:2000));

DCL today aday;

/* day, month, year 필드의 메모리는 겹쳐 있음. */today.day := 10;today.month := "Jan.";today.year := 1988;

[어의]

연합체 모드는 이름으로 분리할 수 있는 일련의 값으로 구성된 복합 값을 정의한다. 각 값은

이름에 부여된 모드에 의해서 정의된다. 연합체에서 선택할 수 있는 이름들은 서로 다르며,

이들을 필드 이름이라 한다. 실제 연합체 내의 한 필드 이름을 사용할 때는 <union location

TTAS.KO-09.0035(2000. 7.)

38

Page 56: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

name>.<field name>으로 쓴다.

[참고사항]

모든 연합체 필드 이름들은 서로 달라야 한다.

3.13.6 배열/구조체 모드의 배치 서술

기존의 배치 방법에서는 데이타의 크기를 4 의 배수로 정하여 메모리상에 올려 사용되었다.

그러나 이와 같은 방식은 사용상에 있어서 많은 메모리 낭비를 초래하였다. 따라서 데이타의

특성에 따라 필요한 만큼의 메모리 크기를 정하고, 그 데이타들을 메모리상에 어떻게 배치할

것인가를 생각하게 되었다. 만일 그 데이타들을 촘촘히 붙여준다면, 메모리 낭비를 최대한으로

줄여 줄 수 있으나, 그 데이타를 접근하는데 많은 어려움이 있어 수행능력이 떨어지는 경우가

발생한다. 그러므로 메모리 낭비와 수행능력 두 가지 측면을 고려하여 다음과 같은 방식을

세우게 되었다.

참고로 크기(size)는 모드에 따라 데이타를 실제적으로 표현하는데 필요한 메모리 크기를

말하며, 배치(alignment)는 데이타의 시작 번지를 데이타 크기에 따라 byte, short, long word

등의 경계(boundary)로 잡히도록 조정하는 것을 말한다.

[규칙 1] 배열이나 구조체를 제외한 기본 모드의 크기는 다음과 같다.

종 류 부호(signed) 범 위 크기(바이트)

범위(RANGE)S -128 : 127

-32768 : 32767-2147483648 : 2147483647

124

세트(SET) U 요소 갯수 <= 127 32767 2147483647

124

집합(POWERSET) U 요소 갯수 <= 8 16 32

124

비트-스트링 U 스트링 길이 <= 8 16 32

124

문자(CHAR)진위(BOOL)

U 1

정수, REF, PTRPROCINSTANCE가변 문자 스트링

U 4

문자 스트링 U 길 이

<표 14-1> 기본 모드의 바이트 수 : S 는 부호 정수, U 는 비부호 정수

TTAS.KO-09.0035(2000. 7.)

39

Page 57: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

[규칙 2] 이들 기본 모드에 대한 배치 규칙은 다음과 같다.

데이타 크기 배 치 규 격1 바이트2 바이트3~4 바이트5 바이트 이상

주소가 1 의 배수가 되도록 배치한다. 2 4 4

<표 14-2> 기본 모드의 배치 규칙

단, 매개변수는 데이타 크기가 4바이트 이하일 경우라도, 주소를 4 의 배수로 조정한다.

그리고 이들 기본 모드들이 복합해서 사용되는 배열 또는 구조체 모드에서는 다음과 같은

방식이 정해진다. (규칙 3)

1) 1-dimension 배열

규칙 1 에 의해 기본 요소 모드의 크기를 정하고,

규칙 2 에 의해 그 기본 요소 모드들을 배치한다.

즉, 총 배치한 데이타의 크기는 다음과 같다.

: (요소 갯수) * (배치한 요소의 크기)

2) N-dimension 배열

inner most(맨 오른편)의 첫번째 dimension 배열을 위의 1.에 의해 산출한다.

그리고 두 번째 dimension 의 요소 모드는 첫번째 배열이 되고, 그것을 기본 모드로 하여

1.방식에 의해 규칙 2 를 적용하여 산출한다.

반복적으로 N-dimension까지 배치한다.

즉, 총 배치한 데이타의 크기는 다음과 같다.

: (N-dim 의 갯수) * ...* (1-dim 의 갯수) * (배치한 요소의 크기)

3) 1-depth 구조체

규칙 1 에 의해 각 항목을 하나의 단위로 취급하여, 각 항목의 모드 크기를 구한다.

규칙 2 에 의해 각 항목을 배치한다.

즉, 총 배치한 데이타의 크기는 다음과 같다.

: (첫번째 항목의 크기) + ... + (마지막 항목의 크기)

4) N-depth 구조체

inner most(맨 오른편)의 1-depth 구조체를 위의 3.방식에 의해 산출한다.

그리고 두 번째 depth 의 항목 모드는 첫번째 구조체가 되고, 그것을 기본 모드로 하여 3.

방식에 의해 규칙 2 를 적용하여 산출한다.

TTAS.KO-09.0035(2000. 7.)

40

Page 58: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

반복적으로 N-depth까지 배치한다.

즉, 총 배치한 데이타의 크기는 다음과 같다.

: (N-depth 의 첫번째 항목 크기) + ...+ (N-depth 의 마지막 항목 크기)

이에 대한 예제를 살펴보면, 배치가 행해지는 방식을 쉽게 이해할 수 있다.

NEWMOE LONG = int(-2147483648:2147483647); /*4바이트로 표현가능한 수의 범위*/

DCL x STRUCT(a STRUCT(a1 CHAR[2]; a2 INT; a3 BYTE); b SHORT; c BOOL; d STRUCT(d1 CHAR; d2 ARRAY[1:3] CHAR; d3 SET(s1, s2, s3)); e LONG; f BIT[1:5]; g CHAR[2]);

0 1 2 3 4

a1 --------------------

--------------------

a2a3 -------------------- -------------------

---------------------

b c --------------------

d1 -------------------- --------------------

--------------------

d2[1] d2[2] d2[3] --------------------

d3 -------------------- --------------------

--------------------

ef -------------------- g

<표 14-3> 위 예제의 데이타 배치표

TTAS.KO-09.0035(2000. 7.)

41

Page 59: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

3.14 동적 모드

(지원 않함)

3.15 모레타 모드

3.15.1 개요

[구문]<moreta mode> ::=

<module mode>[3.15.2]

| <region mode>[3.15.3]

| <task mode>[3.15.4]

| <generic moreta mode instantiation>[3.10.4]

[어의]

모듈 모드 - 모듈 모드의 장소는 일련의 실행문들이 없는 모듈과 같은 특성을 가진다.

리젼 모드 - 리젼 모드의 장소는 리젼과 같은 특성을 가진다.

타스크 모드 - 타스크 모드의 장소는 프로세스 정의문이 없는 모듈 모드 장소와 같은 구조를

반드시 가진다. 타스크 모드를 가지는 장소의 원소에 대한 직접적인 접근은 상호 배제

적이다. 타스크 모드의 장소는 다른 타스크 모드 장소 및 프로세스와 병행으로 실행될 수

있다.

[정적 조건]

모레타 모드나 포괄적 모레타 모드 형판 정의 시 중첩(nested) 정의될 수 없다.

블럭(프로시듀어, 프로세스 및 BEGIN-END)안에서는 모레타 모드를 정의할 수 없다.

블럭 안에 리젼 모드 장소나 타스크 모드 장소가 선언되거나 생성될 수 없다.

3.15.2 모듈 모드

[구문]<module mode> ::=

<module mode specification>| <module mode body>

<module mode specification> ::= MODULE SPEC [ ABSTRACT | FINAL ] [ <module inheritance> ] { <module specification component> }* END

<module mode body> ::= MODULE BODY

TTAS.KO-09.0035(2000. 7.)

42

Page 60: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

{ <module body component> }* END

<module inheritance> ::= BASED_ON <module mode name>

<module specification component> ::= <common module component>| <declaration statement>| <simple guarded procedure specification statement>| <process specification statement>| <signal definition statement>| <public statement>[12.2.3.6]

<module body component> ::= <common module component>| <simple guarded procedure definition statement>| <process definition statement>

<common module component> ::= <synonym definition statement>| <synmode definition statement>| <newmode definition statement>| <seize statement>

[어의]모듈 모드는 원소 이름으로 선택되고 원소 리스트를 구성하는 복합 값을 정의한다.

모듈 값은 (복합) 모듈 장소에 거주할 수 있다.

모듈 모드는 두 분리 부분, 즉 모듈 모드 명세와 모듈 모드 본체로 정의된다.

모듈 모드의 명세부는 모듈 모드의 값에 대한 인터페이스를 정의한다.

모듈 모드의 구현부는 모듈 모드의 값에 대한 동작을 정의한다.

모듈 상속절이 주어지면, 그 모드는 모듈 상속절에서 주어진 모드(즉 정의되는 모드의 기저

(base) 모드)로부터 파생된다.

파생된 모드는 기저 모드의 생성자 및 소멸자를 제외한 모든 원소를 포함하고 있는 것과

같이 동작이 된다. 가시성은 12.2 절 참조.

[정적 특성]ABSTRACT 속성이 지정되면 그 모듈 모드는 추상(abstract) 모듈 모드이다.

추상 모듈 모드는 추상 모듈 장소의 치환-불가능한 non-value 특성을 갖는다.

모듈 모드 명세 MS 또는 MS에 seize 되는 한 모듈 명세 원소가 MS안에서 PUBLIC 으로 명시

되면, MS 모드의 public 가시성 원소라 한다.

모듈 모드 명세 MS 또는 MS에 seize 되는 한 모듈 명세 원소가 MS안에서 PUBLIC 으로 명시

되지 않는다면, MS 모드의 internal 가시성 원소라 한다.

모듈 모드 본체 MB 또는 MB에 seize 되는 한 모듈 본체 원소가 모듈 M 의 public 이나

TTAS.KO-09.0035(2000. 7.)

43

Page 61: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

internal 가시성을 갖지 않으면, MB 모드의 private 가시성 원소라 한다.

[정적 조건]모듈 모드는 SYNONYM 정의문안에 정의 모드로 사용될 수 없다.

각 모듈 모드 명세에 대해 같은 정의 발생자 이름을 갖는 모듈 모드 본체는 하나만이

존재해야 한다.

모듈 모드 명세에 ABSTRACT 혹은 FINAL 속성 중의 하나가 명시되면, 이의 대응하는 모듈

모드 본체에도 명시되어야 한다.

simple 가드 프로시듀어 명세 안에 INCOMPLETE 가 명시되면, 이 프로시듀어는

incomplete 특성을 갖는다.

simple 가드 프로시듀어 명세 안에 INCOMPLETE 가 명시되면, 이 프로시듀어는 반드시

public 가시성을 가져야 한다.

모듈 모드 명세의 각 simple 가드 프로시듀어 명세가 complete 하면, 이의 대응하는 모듈

모드 본체에서 이에 대응하는 simple 가드 프로시듀어 정의를 가져야 한다. 이때 원소

프로시듀어 인증(signature)들이 같아야 한다(match).

모듈 모드 명세의 각 simple 가드 프로시듀어 명세가 incomplete 하면, 이의 대응하는 모듈

모드 본체에서 이에 대응하는 simple 가드 프로시듀어 정의를 갖지 말아야 한다.

모듈 모드 명세가 프로세스 명세를 가지면, 이의 대응하는 모듈 모드 본체에서 대응하는

프로세스 정의를 가져야 한다.

simple 가드 프로시듀어 명세 안에 REIMPLEMENT 속성이 명시되면, 이 프로시듀어는

반드시 public 가시성을 가져야 한다.

하위 모듈 모드 명세에서 한 프로시듀어가 REIMPLEMENT 속성이 명시되면, 이의 상위

모듈 모드 명세에서 대응 프로시듀어가 public 가시성을 가지며 프로시듀어 인증을 확증

(conform)하고 생성자나 소멸자 프로시듀어가 아니고 seize 되지 말아야 한다.

모듈 모드가 적어도 하나의 incomplete 원소 프로시듀어를 가지면, 이 모드를 추상 모드라

한다.

추상 모듈 모드는 모듈 상속절의 모듈 모드 이름이나 사용될 때 참조 모드의 이름으로만

사용될 수 있다.

모듈 모드 중의 한 원소가 non-value 특성을 가지면, 모듈 모드도 non-value 특성을 가져야

한다 (12.1.1.5 절 참조).

모듈 모드 M 이 FINAL 속성을 갖는다면, 그 M 을 final 모듈 모드라 부른다. final 모듈

모드는 모듈 모드의 상속절 안에 기저 모드로 사용될 수 없다.

3.15.3 리젼 모드

[구문]

TTAS.KO-09.0035(2000. 7.)

44

Page 62: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

<region mode> ::= <region mode specification>| <region mode body>

<region mode specification> ::= REGION SPEC [ ABSTRACT | FINAL ] [ <region inheritance> ] { <region specification component> }* END

<region mode body> ::= REGION BODY { <region body component> }* END

<region inheritance> ::= BASED_ON { <module mode name> | <region mode name> }

<region specification component> ::= <common module component>| <declaration statement>| <simple guarded procedure specification statement>| <signal definition statement>| <public statement>[12.2.3.6]

<region body component> ::= <common module component>| <simple guarded procedure definition statement>

[어의]리젼 모드는 원소 이름으로 선택되고 원소 리스트를 구성하는 복합 값을 정의한다.

리젼 값은 (복합) 리젼 장소에 거주할 수 있다.

리젼 모드는 두 분리 부분, 즉 리젼 모드 명세와 리젼 모드 본체로 정의된다.

명세 부분은 리젼 모드의 값에 대한 인터페이스를 정의한다.

구현부는 리젼 모드의 값에 대한 동작을 정의한다.

리젼 상속절이 주어지면, 그 모드는 리젼 상속절에서 주어진 모드(즉 정의되는 모드의 기저

모드)로부터 파생된다.

파생된 모드는 기저 모드의 생성자 및 소멸자를 제외한 모든 원소를 포함하고 있는 것과

같이 동작이 된다. 만약 기저 모드 자체가 파생 모드이면, 원소의 상속은 transitive 방법으로

이루어진다. 가시성은 12.2 절 참조.

[정적 특성]리젼 모드는 항상 치환-불가능한(not_assignable) 특성을 갖는다.

ABSTRACT 속성이 명시되면, 그 모드는 추상(abstract) 모드이다.

리젼 모드 명세 MS 또는 MS에 seize 되는 한 리젼 명세 원소가 MS안에서 grant되면, MS

모드의 public 원소라 한다.

TTAS.KO-09.0035(2000. 7.)

45

Page 63: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

리젼 모드 명세 MS 또는 MS에 seize 되는 한 리젼 명세 원소가 MS안에서 grant되지 않는다면,

MS 모드의 internal 원소라 한다.

리젼 모드 본체 MB 또는 MB에 seize 되는 한 리젼 본체 원소 C 가 리젼 M 의 public 이나

internal 이 아니면, MB 모드의 private 원소라 한다.

[정적 조건]리젼 모드는 SYNONYM 정의문안에 모드로 사용될 수 없다.

각 리젼 모드 명세에 대해 같은 정의 발생자 이름을 갖는 리젼 모드 본체 하나만이 존재해야

한다.

END 다음의 단순 이름 스트링은 모드 정의의 정의 발생자 이름과 같아야 한다. 이는 리젼

모드 명세뿐만 아니라 리젼 모드 본체에도 적용된다.

리젼 모드 명세에 ABSTRACT 혹은 FINAL 속성이 명시되면, 이의 대응하는 리젼 모드

본체에도 명시되어야 한다.

리젼 모드 명세가 리젼 상속절을 가지면, 이에 대응하는 리젼 모드 본체에도 같은 리젼

상속절을 가져야 한다.

simple 가드 프로시듀어 명세안에 INCOMPLETE 가 명시되면, 이 프로시듀어는

incomplete 특성을 갖는다.

simple 가드 프로시듀어 명세안에 INCOMPLETE 가 명시되면, 이 프로시듀어는 public

가시성을 갖는다.

리젼 모드 명세의 각 simple 가드 프로시듀어 명세가 complete 하면, 이의 대응하는 리젼

모드 본체가 대응하는 simple 가드 프로시듀어 정의를 가져야 한다.

리젼 모드 명세의 각 simple 가드 프로시듀어 명세가 incomplete 하면, 이의 대응하는 리젼

모드 본체가 대응하는 simple 가드 프로시듀어 정의를 가지지 말아야 한다.

simple 가드 프로시듀어 명세 안에 REIMPLEMENT 속성이 명시되면, 이 프로시듀어는

public 가시성을 가져야 한다.

하위 리젼 모드 명세에서 한 프로시듀어가 REIMPLEMENT 속성이 명시되면, 이의 상위

리젼 모드 명세에서 대응 프로시듀어가 public 가시성을 가지며 생성자나 소멸자

프로시듀어가 아니고 seize 되지 말아야 한다.

리젼 모드가 적어도 하나의 incomplete 원소 프로시듀어를 가지면, 이 모드를 추상 모드라

한다.

추상 리젼 모드는 리젼 상속절의 리젼 모드 이름이나 참조 모드의 이름으로만 사용될 수

있다.

리젼 모드 명세에서는 어떠한 DCL-장소도 grant할 수 없다.

파생된 하위 리젼 모드의 상위 모드가 모듈 모드이면, 그 모듈 모드도 not_assignable

특성을 가져야 하며 어떠한 DCL-장소도 grant할 수 없고 어떠한 원소 프로세스 정의문도

가질 수 없다.

TTAS.KO-09.0035(2000. 7.)

46

Page 64: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

리젼 모드 M 이 FINAL 속성을 갖는다면, 그 M 을 final 리젼 모드라 부른다. final 리젼

모드는 리젼 모드의 상속절안에 기저 모드로 사용될 수 없다.

3.15.4 타스크 모드

[구문]<task mode> ::=

<task mode specification>| <task mode body>

<task mode specification> ::= TASK SPEC [ ABSTRACT | FINAL ] [ <task inheritance> ] { <task specification component> }+ END [ <simple name string> ]

<task mode body> ::= TASK BODY { <task body component> }* END [ <simple name string> ]

<task inheritance> ::= BASED_ON { <module mode name> | <task mode name> }

<task specification component> ::= <region specification component>

<task body component> ::= <region body component>

[어의]타스크 모드는 원소 이름으로 선택되고 원소 리스트를 구성하는 복합 값을 정의한다.

타스크 값은 (복합) 타스크 장소에 거주할 수 있다.

타스크 모드는 두 분리 부분, 즉 타스크 모드 명세와 타스크 모드 본체로 정의된다.

명세부는 타스크 모드의 값에 대한 인터페이스를 정의한다.

구현부는 타스크 모드의 값에 대한 동작을 정의한다.

타스크 상속절이 주어지면, 그 모드는 타스크 상속절에서 주어진 모드(즉 정의되는 모드의

기저 모드)로부터 파생된다.

파생된 모드는 기저 모드의 생성자 및 소멸자를 제외한 모든 원소를 포함하고 있는 것과

같이 동작이 된다. 만약 기저 모드 자체가 파생 모드이면, 원소의 상속은 transitive 방법으로

이루어진다. 가시성은 12.2 절 참조.

[정적 특성]타스크 모드는 항상 치환-불가능한(not_assignable) 특성을 갖는다.

TTAS.KO-09.0035(2000. 7.)

47

Page 65: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

ABSTRACT 속성이 명시되면, 그 모드는 추상(abstract) 모드이다.

타스크 모드 명세 MS 또는 MS에 seize 되는 한 타스크 명세 원소가 MS안에서 grant되면, MS

모드의 public 원소라 한다.

타스크 모드 명세 MS 또는 MS에 seize 되는 한 타스크 명세 원소가 MS안에서 grant되지

않는다면, MS 모드의 internal 원소라 한다.

타스크 모드 본체 MB 또는 MB에 seize 되는 한 타스크 본체 원소 C 가 타스크 M 의 public

이나 internal 이 아니면, MB 모드의 private 원소라 한다.

[정적 조건]타스크 모드는 SYNONYM 정의문안에 모드로 사용될 수 없다.

각 타스크 모드 명세에 대해 같은 정의 발생자 이름을 갖는 타스크 모드 본체 하나만이

존재해야 한다.

END 다음의 단순 이름 스트링은 모드 정의의 정의 발생자 이름과 같아야 한다. 이는 타스크

모드 명세뿐만 아니라 타스크 모드 본체에도 적용된다.

타스크 모드 명세에 ABSTRACT 속성이 명시되면, 이의 대응하는 타스크 모드 본체에도

명시되어야 한다.

타스크 모드 명세가 타스크 상속절을 가지면, 이에 대응하는 타스크 모드 본체에도 같은

타스크 상속절을 가져야 한다.

simple 가드 프로시듀어 명세 안에 INCOMPLETE 가 명시되면, 이 프로시듀어는

incomplete 특성을 갖는다.

simple 가드 프로시듀어 명세안에 INCOMPLETE 가 명시되면, 이 프로시듀어는 public

가시성을 갖는다.

타스크 모드 명세의 각 simple 가드 프로시듀어 명세가 complete 하면, 이의 대응하는

타스크 모드 본체가 대응하는 simple 가드 프로시듀어 정의를 가져야 한다.

타스크 모드 명세의 각 simple 가드 프로시듀어 명세가 incomplete 하면, 이의 대응하는

타스크 모드 본체가 대응하는 simple 가드 프로시듀어 정의를 가지지 말아야 한다.

simple 가드 프로시듀어 명세 안에 REIMPLEMENT 속성이 명시되면, 이 프로시듀어는

public 가시성을 가져야 한다.

하위 타스크 모드 명세에서 한 프로시듀어가 REIMPLEMENT 속성이 명시되면, 이의 상위

타스크 모드 명세에서 대응 프로시듀어가 public 가시성을 가지며 생성자나 소멸자

프로시듀어가 아니고 seize 되지 말아야 한다.

타스크 모드가 적어도 하나의 incomplete 원소 프로시듀어를 가지면, 이 모드를 추상 모드

라 한다. 이때 이 모드에 ABSTRACT 속성이 명시되어야 한다.

추상 타스크 모드는 타스크 상속절의 타스크 모드 이름이나 참조 모드의 이름으로만 사용될

수 있다.

타스크 모드 명세에서는 어떠한 DCL-장소도 grant할 수 없다.

TTAS.KO-09.0035(2000. 7.)

48

Page 66: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

파생된 하위 타스크 모드의 상위 모드가 모듈 모드이면, 그 모듈 모드도 치환-불가능한

(not_assignable) 특성을 가져야 하며 어떠한 DCL-장소도 grant할 수 없고 어떠한 원소

프로세스 정의문도 가질 수 없다.

타스크 모드의 모든 public 원소 프로시듀어는 오직 IN 매개인자 특성만을 가지며 결과

모드를 갖지 않는다.

타스크 모드 M 이 FINAL 속성을 갖는다면, 그 M 을 final 타스크 모드라 부른다. final

타스크 모드는 타스크 모드의 상속절 안에 기저(base) 모드로 사용될 수 없다.

TTAS.KO-09.0035(2000. 7.)

49

Page 67: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

제 4 장 장소 및 이의 접근

4.1 선언문

4.1.1 개요

[구문]<declaration statement> ::=

<location declaration>

[어의]

선언문은 장소에 대한 접근으로 하나 이상의 이름을 선언한다.

4.1.2 장소 선언문

(향후 국제 표준에 의거 STATIC 의 기능 확장 가능)

[구문]<location declaration> ::=

DCL <name list> <mode> [<initialization>] ;

<initialization> ::= <reach bound initialization>| <lifetime bound initialization>| <moreta-bound initialization>

<reach bound initialization> ::= := <value>

<lifetime bound initialization> ::= INIT := <constant value>

<moreta-bound initialization> ::= ( [ <constructor actual parameter list> ] )

[예제]proc_a: PROC(i INT, j ARRAY[0:5] INT); DCL da INT := 0; DCL db BOOL INIT := FALSE;

DO WHILE (da < 10); MODULE SEIZE da; DCL dc INT INIT := da; /* Loop 동안 dc 값은 항상 0 을 가짐. */ DCL dd INT := da; /* Loop 동안 dd 값은 da 값에 의존함. */ da := da+1;

TTAS.KO-09.0035(2000. 7.)

50

Page 68: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

END; OD;END proc_a;

proca: PROC(i INT, j ARRAY[0:5] INT); DCL da INT INIT := 5; DCL db INT := i; DCL dd BOOL INIT := FALSE;

modula: MODULE DCL de CHAR INIT := 'z'; DCL df INT := db; SEIZE db; END modula;END proca;

[어의]

장소(location) 선언은 이름 리스트(name_list)의 이름들에 지정된 모드를 가지는 장소를

생성한다. 이때 생성되는 장소의 수는 이름 리스트에 열거된 이름의 수와 같다. 초기값을 생성된

장소에 저장할 수 있으며 이것을 장소의 초기화라 하고, 초기화에는 도달-한정(reach-bound)

초기화와 생존기간-한정(lifetime-bound) 초기화가 있다. 도달-한정 초기화는 선언문이 수행될 때

초기값을 저장하고, 생성기간-한정 초기화는 그 장소가 생성될 때 오직 한번만 초기값을

저장한다. 블럭의 수행이 시작될 때 생성기간-한정 초기화를 가지는 모든 장소에 초기화가

이루어지며, 다음으로 블럭 내에 있는 도달-한정 초기화를 가지는 장소에 대한 초기화가

순서적으로 수행된다. 또한 모듈리언(modulion)이 수행될 때 모듈리언내에 있는 도달-한정

초기화를 가지는 장소에 대한 초기화가 순서적으로 이루어진다. 위의 예제에서 수행 과정을

보면 proca 가 수행될 때,

생성기간-한정 초기화 da, dd, de 가 먼저 수행된다.

도달-한정 초기화 db 가 수행된다.

모듈이 수행될 때 도달-한정 초기화 df 가 수행된다.

모레타-한정 초기화시 문맥 순서대로 실행된다. 이때 매개인자 리스트가 명시되거나

공란이면, 이에 대응하는 모레타 모드 장소의 생성자 프로시듀어가 새로이 생성된 장소에 적용

호출된다. 여기서 그 모드가 타스크 모드이면 새로이 생성된 장소에 속한 쓰레드가 구동(start)

된다.

만약 모레타 장소의 생존기간(lifetime)이 종료되고 그 장소의 모드가 소멸자 프로시듀어를

가지면, 이때 그 소멸자 프로시듀어가 모레타 장소에 적용 호출된다(10.2 절 참조).

[정적 조건]

value 에서 정의되지 않은 값(*)은 허용하지 않는다.

장소의 모드가 non-value 특성(이벤트 모드, 버퍼 모드 및 이를 원소로 포함한 치환-

TTAS.KO-09.0035(2000. 7.)

51

Page 69: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

불가능한(not_assignable) 모레타 모드)을 가지면, 그 장소를 초기화할 수 없다.

전역(global) 변수 초기화는 lifetime-bound 초기화만을 허용한다.

[참조]

CHILL user's manual 4.1.2, 9.4.2

4.1.3 장소-동치 선언문

(향후 국제 표준에 의거 LOC 의 기능 확장 가능)

4.2 장소

4.2.1 개요

장소(<location>)의 종류

접근 이름(<access name>)

역참조 한정 참조(<dereferenced bound reference>)

역참조 자유 참조(<dereferenced free reference>)

스트링 요소(<string element>)

배열 요소(<array element>)

구조체 항목(<structure field>)

비트-스트링 슬라이스(<bit-string slice>)

자신의 모레타 장소(<self moreta location>)

모든 값들은 각기 자신들의 값 특성에 따라 클래스를 가지고, 이들 값에는 모든 종류의 원시

_값과 원시_값이 저장되는 장소들이 포함된다. 원시_값은 수식속에 포함되어 연산자들에 의해

연산이 가능하다. 또한 장소는 그 장소가 가지는 내용을 의미하며, 이들 장소는 정수, 불리언,

문자, 세트, 범위, 참조, 배열, 구조체, 스트링, 인스턴스, 이벤트, 버퍼 등의 특성을 갖는 값들을

저장할 수 있는 기억 장소를 의미한다. 그리고 장소의 설정은 'DCL'을 이용한 선언문으로

이루어지며, 그 장소에 저장할 수 있는 값들은 선언된 장소의 모드와 호환성이 있을 경우에만

가능하고, 선언된 모든 장소들은 각각의 존재성과 가시성을 갖는다. 장소의 존재성과 가시성에

대한 설명은 9 장을 참고할 수 있다.

[참고 사항]

값으로 정의되지 않은 값인 (*)는 허용하지 않는다.

포인터 변수의 초기화는 허용하지 않는다. (단, NULL 은 제외)

TTAS.KO-09.0035(2000. 7.)

52

Page 70: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

장소에 저장할 수 있는 값들이 서로 호환성이 있어야 한다는 것은 장소의 모드와 값의

클래스가 호환성이 있어야 한다는 것을 의미한다. 즉 정수 장소에는 정수 값을, 문자

장소에는 문자 값만을 저장할 수 있음을 의미한다.

[참조]

CHILL user's manual 4.2, 5.2, 5.3

4.2.2 접근 이름

[구문]<access name> ::=

<location name>

[예제]DCL st CHAR[12];

search: PROC(par CHAR[12]); par ...END search;

변수 st, par 들은 접근-이름이 되며, 동시에 장소-이름이 된다.

[어의]

접근-이름은 장소-이름을 의미한다. 즉 장소-이름에 값을 치환할 수 있는 변수의 이름을

의미하며, 장소를 접근할 때 고유 이름으로 지정한다.

[참고 사항]

값_이름은 장소를 갖지 않는 상수 값을 의미한다.

[참조]

CHILL user's manual 4.2.2, 5.2.3

4.2.3 역참조 한정 참조

[구문]<dereferenced bound reference> ::=

<bound reference location> ->

[예제]DCL i INT := 100, ch CHAR := 'A', iRef REF INT,

TTAS.KO-09.0035(2000. 7.)

53

Page 71: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

chRef REF CHAR;

iRef := ->i; /*iRef i 의 장소를 가리킨다.*/

chRef := ->ch; /*chRef 은 ch 의 장소를 가리킨다.*/

chRef-> := 'B'; /*chRef 가 가리키는 ch 에 'B'가 치환된다.*/

[어의]

한정-참조 장소를 선언할 때 포인터하게 될 장소가 가질 수 있는 모드가 결정된다. 이때

선언된 장소는 어느 특정 모드를 가진 장소를 가리키는 변수를 나타내고, 이 장소를 간접적으로

접근할 수 있는 것을 역참조 한정 참조라고 한다.

[참고 사항]

한정 참조 장소는 어느 특정 모드를 가진 장소의 주소를 갖는 포인터 변수를 의미한다.

참조 장소를 나타내는 '->' 대신에 'ADDR'을 사용해도 같은 의미를 갖는다.

포인터 변수에 치환하고자 할 때, 값의 클래스와 포인터 변수의 타입(혹은 모드)사이에

호환성이 있어야 한다.

[참조]

CHILL user's manual 4.2.3

4.2.4 역참조 자유 참조

[구문]<dereferenced free reference> ::=

<free reference location> -> { <mode name> | INT | BOOL | CHAR | INSTANCE }

[예제]SPEC MODULE REMOTE unixio;

Main: MODULESYNMODE intMode = INT, stMode = STRUCT(f1 INT;

f2 CHAR), arMode = ARRAY[1:2] INT;DCL iii INT := 10, stLoc stMode := [99, 'Z'], arLoc arMode := [33, 44], ptrLoc PTR;

main: PROC( ) ptrLoc := ->iii;

iii := ptrLoc->intMode; printf("10: ptrLoc->intMode = %d\n", ptrLoc->intMode);

TTAS.KO-09.0035(2000. 7.)

54

Page 72: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

iii := ptrLoc->INT; printf("10: ptrLoc->INT = %d\n", ptrLoc->INT);

ptrLoc := ->stLoc; iii := ptrLoc->stMode.f1; printf("99: ptrLoc->stMode.f1 = %d\n", ptrLoc->stMode.f1); printf("Z: ptrLoc->stMode.f2 = %c\n", ptrLoc->stMode.f2);

ptrLoc := ->arLoc; iii := ptrLoc->arMode[1]; printf("33: ptrLoc->arMode[1] = %d\n", ptrLoc->arMode[1]); printf("44: ptrLoc->arMode[2] = %d\n", ptrLoc->arMode[2]);

END main;END Main;

[어의]

자유 참조 장소를 선언할 때 가리키게 될 장소가 가질 수 있는 정적 모드가 결정될 필요는

없다. 이때 선언된 장소는 임의의 모드를 가진 정적 장소를 가리키는 변수를 나타내고, 이 정적

장소를 간접적으로 접근할 수 있는 것을 역참조 자유 참조라고 한다.

[참고 사항]

자유 참조 장소가 임의의 정적 장소 또는 그 일부를 접근하고자 할 때 반드시 정적 모드를

붙여야 한다.

포인터 변수에 치환하고자 할 때, 값의 클래스와 포인터 변수의 타입(혹은 모드) 사이에

호환성이 있어야 한다.

4.2.5 역-참조 횡렬

(향후 국제 표준에 의거 기능 확장 가능)

4.2.6 스트링 요소

[구문]<string element> ::=

<string location> [ <expression> ]

[예제]1. 문자 스트링 요소

DCL word CHAR[5];

word := 'ESRI\0'; /*word[0] := 'E'*/ /*word[1] := 'S'*/ /*word[2] := 'R'*/ /*word[3] := 'I'*/

TTAS.KO-09.0035(2000. 7.)

55

Page 73: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

/*word[4] := '\0'*/ word[1] := 'T'; /*word 에는 'ETRI'값이 치환된다.*/ printf("contents of word = %s\n", ->word); /*ETRI 가 출력된다.*/

2. 가변 문자 스트링 요소

DCL string REF CHAR[*]; DCL c CHAR; DCL i int;

string := "ABC"; /*string 이 가리키는 값은 "ABC"*/

c := 'a'; i := 0; string->[i] := c; /*string 이 가리키는 값은 "aBC"*/

c := 'b'; i +:= 1; /*i := i+1; 을 의미함.*/ string->[i] := c; /*string 이 가리키는 값은 "abC"*/

printf("contents of string = %s\n", string); /*abC 가 출력된다.*/

3. 비트 스트링 요소

DCL a BIT[5]; DCL b BIT[5];

a := B'11011'; /*a 에는 십진수 정수 값으로 27 이 치환된다.*/

b := B'10011'; /*b 에는 십진수 정수 값으로 25 가 치환된다.*/ /*b[0] := B'1'*/ /*b[1] := B'0'*/ /*b[2] := B'0'*/ /*b[3] := B'1'*/ /*b[4] := B'1'*/ b[1] := a[1];

[어의]

스트링 요소에는 문자 스트링 요소와 가변 문자 스트링 요소 및 비트 스트링 요소가 있다.

문자 스트링과 가변 문자 스트링의 요소는 길이가 1 인 문자 리터럴을 의미하며, 각각의

요소들은 문자 모드와 호환성이 있다. 여기서 가변 문자 스트링은 길이를 지정하지 않으므로,

사용자가 원하는 만큼의 문자 스트링들을 사용할 수 있다. 그리고 비트 스트링의 요소는 길이가

1 인 비트 리터럴을 의미하며, 각각의 요소들은 불리언 모드와 호환성이 있다.

[참고 사항]

길이가 같은 스트링들은 스트링 이름으로 한꺼번에 치환할 수 있다.

TTAS.KO-09.0035(2000. 7.)

56

Page 74: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

4.2.7 스트링 슬라이스

(향후 국제 표준에 의거 UP 기능 확장 가능)

[구문]<bit-string slice> ::=

<bit location> [ <start> : <end> ]

<start> ::= <integer expression>

<end> ::= <integer expression>

[예제]DCL b1, b2 BIT[5], b3 BIT[2] := B'11';

b1 := B'10101';

b2 := b1; /*b2: B'10101'*/b2[0:1] := b3; /*b2: B'11101'*/b1[2:3] := b2[0:1]; /*b1: B'10101'*/

[어의]

비트-스트링 슬라이스(slice)는 start 비트에서 end 비트까지의 길이를 갖는 부-스트링

종류의 하나이다. 그리고 연산 작용이 가능한 연산자들은 AND, OR, XOR 와 관계 연산자들이다.

[동적 조건]

start 값은 end 값보다 작거나 같아야 하고, start 값은 0 보다 작지않고 end 값은 그

슬라이스의 길이보다 작아야 한다.

[참조]

CHILL user's manual 5.2.8 에서는 start 와 end 값이 <constant literal>이었음.

4.2.8 배열 요소

[구문]<array element> ::=

<array location> [ <expression> { , <expression>}* ]

[예제]Main: MODULE DCL counter, sum INT; DCL num ARRAY[1:10] INT;

TTAS.KO-09.0035(2000. 7.)

57

Page 75: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

DCL alpha ARRAY[1:26] CHAR;

main: PROC( ) sum := 0; do for counter := 1 to 10; num[counter] := counter; sum := num[counter] + sum; od;

alpha[1] := 'A'; alpha[2] := 'B'; alpha[3] := 'C'; ... ... alpha[26] := 'Z'; END main;END Main;

num[1]에서 num[10]까지의 배열 요소들은 각각 1 부터 10까지의 정수 값이 치환되고, alpha[1]에서 alpha[26]까지는 각각 'A'부터 'Z'까지의 영문 대문자, 즉 문자 값이 치환된다.

[어의]

배열 변수 선언 시에 배열의 모드는 결정되므로, 배열 요소(element)의 모드는 선언시에

결정된 모드와 일치한다. 그리고 배열 요소의 접근은 색인(index)을 이용한다.

[참고 사항]

배열 요소의 타입(혹은 모드)과 호환성이 있는 값만을 치환할 수 있다.

길이와 타입이 같은 배열 요소들은 배열 이름으로 한꺼번에 치환이 가능하다.

배열 변수 자체가 매개변수로 전달될 수도 있고, 프로시듀어 안에서 반환될 수도 있다.

배열 슬라이스 혹은 부-배열은 실행문에서 사용할 수 없다.

[참조]

CHILL user's manual 3.10.3, 4.2.7

4.2.9 배열 슬라이스

(향후 국제 표준에 의거 ARRAY slice 기능 확장 가능)

4.2.10 구조체 필드

[구문]<structure field> ::=

<structure location> . <field name>

TTAS.KO-09.0035(2000. 7.)

58

Page 76: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

[예제]NEWMODE str = STRUCT( i INT, ch CHAR, iRef REF INT, chRef REF CHAR);DCL comp_one, comp_two str, i INT := 100, ch CHAR := 'Z';

comp_one.i := i; /*comp_one 의 i 항목에 100 을 치환한다.*/comp_one.ch := ch; /*comp_one 의 ch 항목에 'Z'를 치환한다.*/comp_one.iRef := ->i; /*comp_one 의 iRef 항목은 i 의 주소를 가리킨다.*/comp_one.chRef := ->ch; /*comp_one 의 chRef 항목은 ch 의 주소를 가리킨다.*/

comp_two := comp_one; /*comp_one 의 전체 값이 comp_two 에 치환된다.*/

[어의]

필드(field)의 모드는 구조체 변수 선언 시에 결정되며, 어느 특정 변수에 치환할 때 그

변수의 모드와 호환성이 있어야 한다. 구조체 항목의 접근은 <structure location>과 <field

name>사이에 "."를 사용해야 한다.

[참고 사항]

구조체 변수는 구조체 전체 혹은 구조체 항목 단위로 치환할 수 있다.

구조체 변수 자체가 매개변수로 전달될 수도 있고, 반환(return)될 수도 있다.

[참조]

CHILL user's manual 3.10.4, 4.2.9

4.2.11 장소 프로시듀어 호출

(향후 국제 표준에 의거 RETURNS(... LOC) 기능 확장 가능)

4.2.12 장소 built-in routine 호출

(향후 국제 표준에 의거 RETURNS(... LOC) 기능 확장 가능)

4.2.13 장소 변환

[구문]

TTAS.KO-09.0035(2000. 7.)

59

Page 77: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

<location conversion> ::=

<mode name> # ( <static mode location> )

[어의]

장소 변환은 <static mode location>에 의하여 지정되는 장소를 지칭한다. 그러나 객체지향

CHILL 모드 검사나 호환성 규칙을 무시하고, 내부 표현에 대한 변화가 없이 장소에 모드를

부여한다. 장소 변환의 자세한 동적 특성은 구현에 의하여 정의된다.

[정적 특성]

장소 변환의 모드는 <mode name>이다.

장소 변환은 참조 가능하다.

[정적 조건]

<static mode location>은 참조 가능해야 한다.

<mode name>의 크기와 <static mode location>의 크기가 일치해야 한다.

4.2.14 자신의 모레타 장소

[구문]<self moreta location> ::=

SELF

[어의]

모레타 모드의 원소 프로시듀어 혹은 원소 프로세스 정의문 P 안에서 사용되는 SELF 는

현재 적용 호출되고 있는 모레타 장소 ML 을 지칭한다.

SELF 의 모드는 모레타 장소 ML 의 모드이다.

[정적 조건]

SELF 는 모레타 모드 정의문 내에서만 사용이 가능하다.

TTAS.KO-09.0035(2000. 7.)

60

Page 78: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

제 5 장 값 및 이의 연산

j5.1 SYNONYM 정의문

[구문]<synonym statement> ::=

SYN <synonym definition> { , <synonym definition> }* ;

<synonym definition> ::= <name list> <mode> = <constant value>

[예제]SYN buffer_size = 80;SYN no_of_buffers = 10;SYN buffer_pool_size = buffer_size * no_of_buffers;DCL buffer_pool ARRAY[1:buffer_pool_size] INT;SYN stack_size = stack_size; /* illegal */SYN stack_length = buffer_size* stack_length; /* illegal */

[어의]

synonym 의 개념은 이름에 상수 값을 정의하기 위한 것이다. 따라서 일반 변수와는 다르게

실행 중에 그 값을 변경하지 못한다. synonym 정의문으로 기술된 이름을 synonym 이름이라

하며, 상수 값으로 사용할 수 있다. synonym 이름을 사용함으로써 프로그램을 읽고 관리하기가

용이해진다. 위의 예제에서 buffer_size 는 상수 값 80 을 나타내며, buffer_pool_size 는 800 을

나타낸다.

[정적 조건]

synonym 정의에 적용될 수 있는 모드는 다음과 같다: INT 모드 BOOL 모드 CHAR 모드 SET 모드 POWERSET 모드 REF 모드 PTR 모드 PROC 모드 INSTANCE 모드 STRING 모드 ARRAY 모드 STRUCT 모드 UNION 모드

TTAS.KO-09.0035(2000. 7.)

61

Page 79: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

synonym 정의는 재귀적으로 정의할 수 없다.

<mode>와 <constant value>간에 값의 호환성이 있어야 한다.

5.2 기본 값

5.2.1 개요

값(value)의 종류

수식(expression)

리터럴(literal)

튜플(tuple)

참조(referenced) 장소

start 수식

receive 수식

THIS 연산자

원시 값(<primitive value>)의 종류

값 이름(<value name>)

장소 내용(contents of location)

모드 변환(<mode conversion>)

값 프로시듀어 호출(<value procedure call>)

값 built-in 루틴 호출(<value built-in routine call>)

모든 값들은 각기 자신들의 값의 특성에 따라 클래스(class)를 가지고, 이들 값에는 모든

종류의 원시 값과 원시 값이 저장되는 장소들이 포함된다. 원시 값은 수식 속에 포함되어

연산자들에 의해 연산이 가능하다. 또한 장소는 그 장소가 가지는 내용을 의미하며, 이들 장소는

정수, 불리언, 문자, 세트, 범위(range), 참조(reference), 배열, 구조체, 연합체, 스트링, 인스턴스

(instance), 이벤트(event), 버퍼(buffer) 등의 특성을 갖는 값들을 저장할 수 있는 기억 장소를

의미한다. 그리고 장소의 설정은 'DCL'을 이용한 선언문으로 이루어지며, 그 장소에 저장할 수

있는 값들은 선언된 장소의 모드와 호환성이 있을 경우에만 가능하고, 선언된 모든 장소들은

각각의 존재성과 가시성을 갖는다.

장소의 존재성과 가시성에 대한 설명은 10 장을 참고할 수 있다.

[참고 사항]

값으로 정의되지 않은 값인 (*)는 허용하지 않는다.

포인터 변수의 초기화는 허용하지 않는다.(단, NULL 은 제외)

장소에 저장할 수 있는 값들이 서로 호환성이 있어야 한다는 것은 장소의 모드와 값의

TTAS.KO-09.0035(2000. 7.)

62

Page 80: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

클래스가 호환성이 있어야 한다는 것을 의미한다. 즉 정수 장소에는 정수 값을, 문자

장소에는 문자 값만을 저장할 수 있음을 의미한다.

[참조]

CHILL user's manual 4.2, 5.2, 5.3

5.2.2 장소 내용

(내용 추가 예정)

5.2.3 값 이름

[구문]<value name> ::=

<synonym name>

[예제]SYN one = 1;/* synonym 이름 'one'이 정수 값 '1'을 대신한다. */

[어의]

값 이름은 synonym 이름을 갖는 값을 의미한다. 즉 synonym 이름은 장소를 갖지않는 상수

값으로 취급한다. 따라서 그 이름에 값을 치환할 수 없다.

[참고 사항]

값 이름은 장소를 갖지 않는 상수 값을 의미한다.

[참조]

CHILL user's manual 4.2.2, 5.2.3

5.2.4 리터럴

5.2.4.1 개요

[구문]<literal> ::=

<integer literal>[5.2.4.2] | <floating point literal>[5.2.4.3]

| <boolean literal>[5.2.4.4]

TTAS.KO-09.0035(2000. 7.)

63

Page 81: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

| <set literal>[5.2.4.5]

| <emptiness literal>[5.2.4.6]

| <procedure literal>[5.2.4.7]

| <character string literal>[5.2.4.8]

| <bit string literal>[5.2.4.9]

[예제]SYN buffer_size = 80; /*80 은 정수 리터럴이며, 컴파일-시간에 결정되는 상수이다.*/255, 'c' /* 255 는 정수 리터럴; 'c'는 문자 리터럴 */

[어의]

리터럴은 컴파일-시간에 결정되는 상수 값(constant value)이다.

[참조]

CHILL user's manual 5.2.4.1

5.2.4.2 정수 리터럴

[구문]<integer literal> ::=

[D'] { <digit> | _ }+| B' { 0 | 1 | _ }+| O' { <octal digit> | _ }+| H' { <hexadecimal digit> | _ }+

[예제]10 진 정수 리터럴: 193527 혹은 D'153_421 혹은 02 진 정수 리터럴: B'0110111 혹은 b'10 혹은 B'11_01118 진 정수 리터럴: O'7042 혹은 o'7_042 혹은 O'016 진 정수 리터럴: H'FF89 혹은 h'A_803 혹은 H'0

[어의]

정수 리터럴은 정수 값이다. 정수 리터럴에는 10 진, 2 진, 8 진, 16 진이 있으며, 리터럴의

시작이 B'(혹은 b'), O'(혹은 o'), H'(혹은 h')가 아니면 10 진 정수 리터럴로 자동 인식된다. 정수

리터럴에서 밑줄(_)은 무시되며, 단지 프로그램을 읽기 쉽게 하기 위한 것이므로 값에 영향이

없다.

[참고사항]

정수 리터럴은 밑줄만으로 이루어질 수 없다. 즉, ___, B'__, O'__ 등은 허용되지 않는다.

정수 리터럴은 밑줄로 시작할 수 없다. (예: B'_1001 등)

TTAS.KO-09.0035(2000. 7.)

64

Page 82: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

[참조]

CHILL user's manual 5.2.4.2

5.2.4.3 부동 소수점 리터럴

[구문]<floating point literal> ::=

<unsigned floating point literal>| <signed floating point literal>

<unsigned floating point literal> ::= <digit sequence> . [ <digit sequence> ] [ <exponent> ]| [ <digit sequence> ] . <digit sequence> [ <exponent> ]

<signed floating point literal> ::= - <unsigned floating point literal>

<exponent> ::= E <digit sequence>| E - <digit sequence>

[예제]10.0E1-365.0E-5

[어의]

부동 소수점 리터럴(floating point literal)은 십진수처럼 표현되는 부동 소수점 값을 전달한다.

부호화 부동 소수점 리터럴은 비부호화 부동 소수점 리터럴에 의해 전달되는 값의 역인

값을 전달한다.

부동 소수점 리터럴이 구현적인 부동 소수점 모드의 상한치와 하한치 사이에 있으나 표현할

수 없다면, 부동 소수점 리터럴 값은 floating point literal 을 나타내는 구현에 의해 선택된 부동

소수점 모드에 암시적인 representation conversion 에 의해 전달된 값에 근접하다.

[정적 특성]

부동 소수점 리터럴의 클래스는 &FLOAT-파생 클래스이다. 부동 소수점 리터럴은 상수이고

리터럴이다.

부동 소수점 리터럴의 정밀도는 가수(mantissa)를 형성하는 두개의 digit sequence 에 의해

전달되는 수많은 유효 십진 수들의 합이다.

[정적 조건]

floating point literal 의 값은 &FLOAT 모드에 의해 정의된 값들 중 하나이다.

TTAS.KO-09.0035(2000. 7.)

65

Page 83: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

5.2.4.4 진위 리터럴

[구문]<boolean literal> ::=

FALSE | TRUE

[예제]DCL bool_flag BOOL;bool_flag := TRUE;

[어의]

진위 리터럴은 진위 값으로 나타내며, 그 값은 TRUE 혹은 FALSE 이다. 객체지향 CHILL

정의에 의해 TRUE > FALSE 이다.

[참조]

CHILL user's manual 5.2.4.3

5.2.4.5 문자 리터럴

[구문]<character literal> ::=

' { <character> | <control sequence> } '

[예제]DCL charStrLoc CHAR;charStrLoc := 'a';

[어의]

문자 리터럴은 문자 값으로 나타내며, 그 값은 문자이다. 객체지향 CHILL 정의에 의해 'A' ~

'z', '0' ~ '9', '_' 혹은 특수 문자이다.

[참조]

객체지향 CHILL user's manual 5.2.4.3

Section 3.3.2.2

5.2.4.6 세트 리터럴

[구문]

TTAS.KO-09.0035(2000. 7.)

66

Page 84: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

<set literal> ::= <set element name>

[예제]

DCL colour SET(red, white, blue); /*red, white, blue 는 세트 리터럴이다.*/

[어의]

세트 리터럴은 세트 모드로 정의된 set_element 의 이름이며, 세트 값을 가진다.

[참조]

CHILL user's manual 5.2.4.4

5.2.4.7 Emptiness 리터럴

[구문]<emptiness literal >::=

NULL

[예제]NEWMODE list = STRUCT(value INT; link REF list);DCL linkedList REF list;

linkedList := ALLOCATE(list);linkedList->.link := NULL;

[어의]

NULL 은 다음의 경우에 따라 적용되는 특별한 값을 갖는 미리 정의된 이름이다.

어느 장소도 가리키지 않는 참조 값으로 사용할 수 있다.

프로세스 식별 값을 갖지 않는 인스턴스 값으로 사용할 수 있다.

프로시듀어 모드의 장소가 프로시듀어 식별 값을 갖지 않는 리터럴 값으로 사용할 수

있다.

NULL 은 일반적으로 연결형-리스트(linked-list)에 주로 사용된다. 이 경우 리스트의 마지막

요소가 그 다음 후계자를 갖지 못할 때, 리스트의 마지막을 NULL 로써 표시한다.

[참조]

CHILL User's Manual 5.2.4.6

TTAS.KO-09.0035(2000. 7.)

67

Page 85: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

5.2.4.8 문자 스트링 리터럴

[구문]<character string literal> ::=

' { <non-apostrophe character> | <apostrophe> }*'| " { <non-apostrophe character> | <apostrophe> }*"

[예제]'CCITT'는 문자 스트링이다."CCITT"는 가변 길이의 문자 스트링이다.

[어의]

객체지향 CHILL 에서 길이가 0 인 문자 스트링 리터럴은 없으며, 길이가 1 인 문자 스트링

리터럴은 문자 값이 된다. 문자 스트링 리터럴에는 문자 스트링과 가변 길이의 문자 스트링이

있으며. 문자 스트링은 스트링의 처음과 끝을 단일 따옴표(')로 표시하고, 가변 길이의 문자

스트링은 이중 따옴표(")로 표시한다. 문자 스트링 리터럴내에 단일 따옴표(') 문자를 표시하려면

\'로 사용해야 한다. 또한 가변 길이 스트링 리터럴내에 이중 따옴표(") 문자를 표시하려면 \"로

사용해야 한다. 'abc\'ETRI\\객체지향 CHILL', "abc\"ETRI'객체지향 CHILL"등은 사용이 가능하다.

[참고사항]

문자 스트링 리터럴의 길이는 단일(이중) 따옴표(‘, “)나 제어 문자(\)를 제외한 문자의

수이다.

[참조]

Section 3.3.6.2 의 스트링 모드, 4.8 의 스트링 요소

CHILL user's manual 5.2.4.7

5.2.4.9 비트-스트링 리터럴

[구문]<bit string literal> ::=

{B|b}' { 0 | 1 | _ }* '| {O|o}' { <octal digit> | _ }* '| {H|h}' { <hexadecimal digit> | _ }* '

[예제]

B'011', O'271', H'B9', b'1010_0111'

[어의]

TTAS.KO-09.0035(2000. 7.)

68

Page 86: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

비트 스트링 리터럴은 비트 스트링 값이며, 2 진, 8 진, 16 진 비트 스트링 리터럴이 있다.

밑줄(_)은 값으로 계산하지 않고 다만 읽기 편하게 하기 위한 것이다. 정수 값과 비트 스트링

값과의 차이는 다음과 같다. 정수 값으로 B'011 은 3 이지만, 비트 스트링 리터럴로 B'011'은 3

비트의 스트링에 011 이 각각 들어있다.

[참고사항]

비트 스트링 리터럴의 길이는 B' 다음에 오는 0 나 1 의 갯수이며, O' 다음에 오는 8 진수의

합의 3 배가 길이가 되고, H' 다음에 오는 16 진수의 합의 4 배가 길이가 된다. 예를 들면

B'1011_1001'은 길이 8, O'271'은 길이 9, H'B9'는 길이가 8 이다. 이때 길이는 이진으로

변환된 후에 비트 스트링의 길이를 말한다.

현재 비트 스트링 리터럴은 정수 값과 호환성이 있으므로 정수 모드와 연산이 가능하다.

길이가 1 인 비트 스트링 리터럴과 진위 값은 호환성이 있다.

[참조]

Section 3.3.5.2

CHILL user's manual 5.2.4.8

5.2.4.10 프로시듀어 리터럴

[구문]<procedure literal> ::=

<general procedure name>

[예제]Main:MODULE

SYNMODE procMode = PROC(...) RETURNS(...);DCL procLoc_G procMode := NULL; /*전역 변수*/

foo: PROC(...) RETURNS(...); DCL procLoc_L procMode := NULL; /*지역 변수*/

plus: PROC(...) RETURNS(...); ... END plus;

... procLoc_L := plus; /*금지: plus 가 가장 바깥의 프로시듀어가 아님.*/ ... := procLoc_L(...);

procLoc_L := foo; /*허용*/ ... := procLoc_L(...);END foo;

main: PROC( ) procLoc_G := foo; /*허용*/

TTAS.KO-09.0035(2000. 7.)

69

Page 87: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

... := procLoc_G(...); END main;END Main;

[어의]

프로시듀어 리터럴은 프로시듀어 정의 이름을 가리키는 식별 값이다. 그리고 일반(general)

특성을 갖는 프로시듀어 값만을 지칭한다.

[정적 조건]

프로시듀어 리터럴의 클래스는 그 구문의 오른편에 있는 클래스와 같다. 즉 해당

프로시듀어 정의문의 형-매개인자 및 결과-모드의 개수, 순서 그리고 형태가 동일해야

한다.

프로시듀어 (리터럴) 장소는 가장-바깥 프로시듀어만을 값으로 가질 수 있다.

[참조]

CHILL User's Manual 5.2.4.5

5.2.5 튜플

[구문]<tuple> ::=

(: <value> {, <value> }* :)| [ <value> {, <value> }* ]

[예제]DCL comp1 ARRAY[1:3] INT := [10,20,30]; /*초기화*/DCL comp2 STRUCT(string CHAR[9], p POWERSET(one, two, three), ch CHAR);

comp2 := ['etri 객체지향 CHILL', [one, two], 'A']; /*comp2.string := 'etri 객체지향 CHILL'*/ /*comp2.p := [one, two]*/ /*comp2.ch := 'A'*/

튜플을 이용하여 변수 comp2 에 여러 개의 상수 값들을 한꺼번에 치환할 수 있다.

[어의]

튜플은 (객체지향의 캡슐화 개념에 위배되므로) 모레타 모드를 제외한 복합(배열, 구조체,

집합) 모드의 장소에 값들을 치환하는데 사용된다. 배열 모드인 경우에는 배열 요소 모드와

호환성이 있는 값을 사용할 수 있고, 구조체 모드인 경우에 구조체 안의 각 항목 이름의 모드와

호환성이 있는 값을 치환한다. 또한 집합(powerset) 모드의 경우엔 세트 모드만 사용할 수

있는데, 해당하는 세트 모드의 요소들이 0 개 이상 사용할 수 있다. 따라서 튜플은 복합 모드

TTAS.KO-09.0035(2000. 7.)

70

Page 88: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

장소의 초기화, 혹은 치환문의 오른편(즉 값)에 사용할 수 있다.

[참고 사항]

튜플 치환시에는 치환하는 값과 치환되는 장소의 각 요소들의 개수가 같아야 하고, 그

모드들이 서로 호환성이 있어야 한다.

값으로 정의되지 않은 값인 (*)는 허용되지 않는다.

튜플을 이용한 초기화 시 포인터 장소에 메모리 주소의 치환은 허용하지 않는다. (단 NULL

은 제외)

튜플 값에 대해서는 수식에서 사용하는 모든 연산자들을 사용할 수 없으며, 초기화 혹은

치환문에서만 사용할 수 있다.

튜플은 매개변수 전달 시, 실 매개변수로 전달할 수 없으며 프로시듀어 안에서 반환할 수도

없다.

버퍼와 시그널 그리고 모레타 장소에는 튜플 값을 사용할 수 없다.

[참조]

CHILL user's manual 5.2.5

Section 3.3.5

5.2.6 값 스트링 원소

(내용 추가 예정)

5.2.7 값 스트링 슬라이스

(내용 추가 예정)

5.2.8 값 배열 원소

(내용 추가 예정)

5.2.9 값 배열 슬라이스

(내용 추가 예정)

5.2.10 값 구조체 필드

TTAS.KO-09.0035(2000. 7.)

71

Page 89: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

(내용 추가 예정)

5.2.11 수식 변환

[구문]<mode conversion> ::=

<conversion mode> # ( <location> )

<conversion mode> ::= <integer mode>| <boolean mode>| <character mode>| <instance mode>

[예제]DCL i INT;DCL ch CHAR;

ch := 'A'; ------ (A) . .ch := char # (65); ------ (B) /*모드 변환*/

문자 'A'의 정수 ASCII코드값이 '65'이므로, (A)와 (B)는 같은 값을 갖는다.

[어의]

모든 장소의 모드(혹은 타입)는 선언 시에 이미 결정되는데, 모드 변환 기능은 선언 시에

결정된 변수에 치환할 수 있는 값의 클래스를 특정 모드의 클래스로 변환할 수 있다.

[참고 사항]

수식에 나타나는 값이나 변수의 내용은 모드 변환이 가능하지만, 치환문에서 왼편의 변수와

같이 장소 그 자체에 대한 모드 변환은 할 수 없다.

[참조]

CHILL user's manual 5.2.14

5.2.12 표현 변환

(국제 표준에 의거 내용 추가 예정)

5.2.13 값 프로시듀어 호출

TTAS.KO-09.0035(2000. 7.)

72

Page 90: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

(국제 표준에 의거 내용 추가 예정)

5.2.14 값 built-in routine 호출

(국제 표준에 의거 내용 추가 예정)

5.2.15 Start 수식

[참조]

Section 6.13

5.2.16 Zero-adic 연산자

[구문]<zero-adic operator> ::=

THIS

[예제]DCL a, a1, b, b1 INSTANCE;

p: PROCESS(i INSTANCE) # _p i := THIS;END p;

a := START p(a1); /*첫번째 프로세스*/b := START p(b1); /*두 번째 프로세스*/

: 이때, a 와 a1 의 인스턴스 값이 같고, b 와 b1 의 인스턴스 값이 같다.

[어의]

THIS 는 현재 수행하고 있는 프로세스의 유일한 인스턴스 값을 나타낸다.

[참고 사항]

THIS 의 클래스는 인스턴스 모드로 부터 유도된 클래스이다.

[참조]

CHILL user's manual 5.2.19

5.2.17 괄호 수식

TTAS.KO-09.0035(2000. 7.)

73

Page 91: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

(국제 표준에 의거 내용 추가 예정)

5.2.18 참조 장소

[구문]<referenced location> ::=

-> <location>

[예제]SYNMODE sType = STRUCT(i INT; j CHAR; k REF CHAR);SYNMODE aType = ARRAY[1:2] sType;DCL cVar aType := [[10, 'A'], [20, 'B']];DCL refI REF INT;DCL a CHAR := 'S';DCL b CHAR := 'T';DCL c CHAR;

cVar := [[10, 'A', ->a], [20, 'B', ->b]];

/*cVar 의 첫번째 요소의 i 항목의 장소를 가리키는 주소를 refI 에 전달한다.*/refI := ->cVar[1].i;

c := ->cVar[1].k->; /* c:= 'S'; */

[어의]

참조 장소는 지정된 장소의 주소를 갖는다. 이때 장소는 참조 가능해야 한다.

[참고 사항]

한정 참조 장소의 모드와 치환하는 값의 모드가 호환성이 있어야 한다.

[참조]

CHILL user's manual 5.2.13

5.3 값 및 수식

5.3.1 개요

[구문]<expression> ::=

<operand_1>[5.2]

| <sub_expression> { OR | XOR } <operand_1>

TTAS.KO-09.0035(2000. 7.)

74

Page 92: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

<sub_expression> ::= <expression>

[예제]DCL a BIT[8] := B'10010001'; b BIT[8] := B'01111101'; c BIT[8];c := a OR b; /* c = B'11111101' */

NEWMODE One = POWERSET SET (a,b,c,d,e,f,g,h,i,j);DCL three, four, five, six One;three := [a,c,e,g,i,b];four := [b,d,f,g,j,i];five := three OR four; /*five = [a,b,c,d,e,f,g,i,j]*/six := three XOR four; /*six = [a,c,d,e,f,j]*/

[어의]

수식은 상수(constants), 변수(variables), 연산자, 함수 호출(function calls) 등의 조합으로

이루어지며, 프로그램 내에서 값을 구하기 위하여 사용한다. 수식은 피연산자_1부터 피연산자

_5까지 계층적인 구조를 갖는다. 이 계층적인 구조는 암시적으로 연산의 순위 규칙을 포함하고

있다. 예를 들어 a AND b OR c AND d 는 (a AND b) OR (c AND d)를 의미한다. 다음은 연산자

OR 나 XOR 에 대한 예이다. 부수식과 피연산자_1 이 모두 boolean 값인 경우 OR 나 XOR 는

논리적 OR, XOR 를 의미하며, 이 수식의 결과는 boolean 값이 된다. 만약 부수식과 피연산자_1

이 비트 스트링 값이면 이 수식의 결과도 비트 스트링 값이 된다. 부수식과 피연산자_1 이 모두

집합(powerset) 값을 갖는 경우, 연산자가 OR 이면 결과는 집합(powerset) 값의 논리합이고

연산자가 XOR 이면 집합(powerset) 값 중에 하나씩 존재하는 값의 논리합이 결과이다.

[참조]

CHILL user's manual 5.3.2

5.3.2 수식

(국제 표준에 의거 내용 추가 예정)

5.3.3 피연산자-0

(국제 표준에 의거 내용 추가 예정)

5.3.4 피연산자-1

TTAS.KO-09.0035(2000. 7.)

75

Page 93: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

[구문]<operand-1> ::=

<operand-2>[5.3.5]

| <sub operand-1> AND <operand-2>

<sub operand-1> ::= <operand-1>

[예제]DCL a BIT[8] := B'1001_0001', b BIT[8] := B'0001_0001';a := a AND b; /*a = B'0001_0001'*/

NEWMODE One = POWERSET SET(a,b,c,d,e,f,g,h,i,j);DCL three, four, five One;three := [a,c,e,g,i,b];four := [b,d,f,h,j,i];five := three AND four; /*five := [b,i]*/

[어의]

피연산자-1은 논리합 연산자인 AND를 포함하는 수식이 피연산자가 될 수 있다. AND

연산자가 존재하는 경우 AND 연산의 결과는 진위 값, 비트-스트링 값, 집합 값이 될 수 있다.

피연산자의 값이 진위 값인 경우 결과는 논리곱의 진위 값이 되며, 피연산자가 비트-스트링 값인

경우 수식의 결과는 비트끼리 논리곱이 된다. 만약 피연산자가 집합 값을 갖는 경우, 수식의

결과는 피연산자들의 교집합이 되며, 역시 집합 모드 값이 된다.

[참조]

CHILL user's manual 5.3.3

5.3.5 피연산자-2

[구문]<operand-2> ::=

<operand-3>[5.3.6]

| <sub operand-2> <operator-3> <operand-3>

<sub operand-2> ::= <operand-2>

<operator-3> ::= <relational operator>| <membership operator>| <powerset inclusion operator>

<relational operator> ::= = | /= | > | >= | < | <=

TTAS.KO-09.0035(2000. 7.)

76

Page 94: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

<membership operator> ::= IN

<powerset operator> ::= <= | >= | < | >

[예제]->a /= ->b /*a 와 b 의 모드가 같은 경우 비교 가능하다.*/a > 3 /*a 의 모드가 정수형인 경우 비교 가능하다.*/c <= 'D' /*c 의 모드가 문자형인 경우 비교 가능하다.*/

DCL al POWERSET SET (a,b,c,d,e,f) := [a,c,d], bl, cl BOOL;

bl := c IN al; /*bl = TRUE*/cl := f IN al; /*cl = FALSE*/

NEWMODE Colour = SET(red, blue, green, yellow, pink), Polychrome = POWERSET Colour;DCL x, y, z Polychrome;

x := [red, green, pink];y := [green, pink];z := [red, pink];

-- x > y 의 결과는 참이다. -- x >= y 의 결과는 참이다. -- x > y 의 결과는 거짓이다.-- x < y 의 결과는 거짓이다.

[어의]

연산자-3 에는 관계 연산자, 구성원 연산자, 집합 포함 연산자가 올 수 있다. 연산자-3 이

관계 연산자 (>,>=,<,<=)인 경우 피연산자들은 불연속 값이거나, 스트링 값이어야 한다. 관계

연산자 =과 /=은 호환성이 있는 모든 값들 사이에서 연산이 가능하다. 모든 관계 연산자의 연산

결과는 진위 값이다. 구성원 연산자 IN 은 구성원 값과 집합 값 사이에 올 수 있는 연산자이다.

주어진 구성원 값이 집합 값 내에 존재하는 경우 연산 결과는 참이다. 집합 포함 연산자는 집합

값들간의 포함 여부를 결정하는 연산자이다.

[참고 사항]

연산자-3 이 =, /= 인 경우 피연산자의 모드는 호환성이 있어야 가능하다.

연산자-3 이 구성원 연산자인 경우, 부-피연산자-2는 집합 값이어야 하고, 피연산자-3은

집합 값이어야 한다.

피연산자-3이 집합 포함 관계 연산자인 경우 두 피연산자는 집합 값이어야 한다.

관계 연산자는 같은 모드의 피연산자에 대해서만 수행할 수 있다. 이 연산자는 두개의

TTAS.KO-09.0035(2000. 7.)

77

Page 95: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

피연산자간에 대소를 비교할 때 주로 이용되며 연산의 결과는 진위 값이 된다. 단 연산자

>, >=, <, <=가 집합의 포함 연산자로 사용될 수 있는데 이 경우 두 피연산자의 모드는

모두 집합 모드라야 하며, 연산 결과는 역시 진위 값이다.

[참조]

CHILL user's manual 5.3.4

5.3.6 피연산자-3

[구문]<operand-3> ::=

<operand-4>[5..3.7]

| <sub operand-3> <operator-4> <operand-4>

<sub operand-3> ::= <operand-3>

<operator-4> ::= <left shift operator>| <right shift operator>

<left shift operator> ::= <<

<right shift operator> ::= >>

[예제]DCL a, b, c INT;a := 13; b := 2;c := a << b + a; /*a 내용의 bit 순서를 왼쪽으로 2 자리만큼 이동; c = 52+13 = 65; */

SYNMODE Bit5 = BIT(5);DCL a Bit5 := B’10101’, /* a = 25 */ b Bit5;b := a >> 2; /* b = 5 */

[어의]

Shift 연산자 << 와 >>는 오른편 피연산자에 의해 주어진 비트 개수만큼 왼편 피연산자의

왼쪽과 오른쪽으로 이동시킨다. 왼편으로 혹은 오른쪽으로 이동할 때 비트 B’0’로 채워지며 그

결과 값은 2 를 계속 곱하는 혹은 나누는 결과를 갖는다.

[정적 조건]

오른편 피연산자 값은 반드시 0 보다 큰 자연수이어야 한다.

TTAS.KO-09.0035(2000. 7.)

78

Page 96: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

[참조]

The C Programming Language 2.9 Bitwise Logical Operators

5.3.7 피연산자-4

[구문]<operand-4> ::=

<operand-5>[5..3.8]

| <sub operand-4> <operator-5> <operand-5>

<sub operand-4> ::= <operand-4>

<operator-5> ::= <arithmetic additive operator>| <powerset difference operator>

<arithmetic additive operator> ::= + | -

<powerset difference operator> ::= -

[예제]DCL a, b, c INT;c := a * b + a; /*a*b 는 부-연산자-4 이고, a 는 피연산자-5*/

NEWMODE a = POWERSET SET (a,b,c,d,e,f,g);DCL p a := [a,b,c,d], q a := [c,d,e,f], r a;r := p - q; /*r = [a,b]*/

[어의]

연산자-5 가 산술 연산자인 경우 피연산자들은 정수형 값을 가져야 하며, 결과도 정수형

값이다. 연산자-5 가 집합의 차집합 연산자인 경우 두 피연산자는 집합 값이라야 하며, 연산

결과는 부 피연산자-4의 구성원에서 피연산자-5의 구성원를 뺀 결과이며 역시 집합 값을 갖는다.

[참고 사항]

+와 -가 연산자로 사용되는 경우 피연산자-4의 결과 모드는 피연산자-5와 부 피연산자-4

의 영향을 받는다. 즉 피연산자-5 와 부 피연산자-4 의 연산 후 결과 값의 모드가 피연산자-

4 의 모드가 된다.

피연산자들이 상수형 리터럴이면 피연산자-4도 상수형 리터럴이 된다.

TTAS.KO-09.0035(2000. 7.)

79

Page 97: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

산술 가감 연산자는 정수 값 간의 연산 시 사용될 수 있다.

집합의 차집합 연산자는 집합 값간의 연산 시 사용이 가능하다.

5.3.8 피연산자-5

[구문]<operand-5> ::=

<opernad-6>[5.3.9]

| <sub operand-5> <arithmetic multiplicative operator> <operand-6>

<sub operand-5> ::= <operand-5>

<arithmetic multiplicative operator> ::= * | / | MOD | REM

[예제]DCL a,b,c,d,e,f,g INT;a := -2;b := 3;c := a * b; /*c = -6*/d := a / b; /*d = 0*/e := a MOD b; /*e = k, 0 <= k < b, a = n * b + k, K = 1*/f := a REM b; /*a - (a / b) * a = f, f = -2*/

[어의]

산술 승제 연산자의 두 피연산자는 정수형 값을 가져야 한다. 연산자로는 곱셈, 나눗셈,

modulo, remainder 등이 있다. I MOD J 의 결과는 두 식 0 <= K < J (J 는 정수)와, I = N * J + K (J

> 0)를 만족하는 정수 값 K 이다. X REM Y 는 X - (X/Y) * Y (X, Y 는 정수)이다.

[참고사항]

피연산자-5의 모드는 부 피연산자-5 와 피연산자-6의 연산 결과의 영향을 받는다.

피연산자들이 상수형 리터럴인 경우 피연산자-5도 상수형 리터럴이 된다.

[참조]

CHILL user's manual 5.3.6

5.3.9 피연산자-6

[구문]<operand-6> ::=

TTAS.KO-09.0035(2000. 7.)

80

Page 98: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

[<monadic operator>] <primitive value>[5.2.1]

<monadic operator> ::= - | NOT

[예제]DCL a BOOL := TRUE, b BIT[4] := B'1010', c POWERSET SET (l,m,n,o,p) := [l,o,p]; d INT := -3,a := NOT a; /*a = FALSE*/b := NOT b; /*b = B'0101'*/c := NOT c; /*c = [m,n]*/d := -d; /*d = 3*/

[어의]

부호 변환 연산자인 "-" 는 정수 값의 앞에 올 수 있으며, 이 경우 정수 값은 부호가 바뀐다.

NOT(negation) 연산자는 진위 값 앞에 올 수 있으며, 이 경우 진위 값이 반대로 바뀐다. NOT

연산자는 비트-스트링 값 앞에도 올 수 있으며, 이 경우 비트-스트링 값이 비트별로 바뀐다. NOT

연산자는 집합 값 앞에도 올 수 있으며, 이 경우 집합 값의 보집합이 된다.

[참고 사항]

단일(monadic) 연산자는 피연산자 앞에 위치하는 연산자이다. 그 종류로는 정수의 부호를

바꾸는 "-" 연산자와, 논리값이나 비트-스트링 값 등을 부정(negation)하는 "NOT"

연산자가 있다. 단일 연산자의 연산 우선 순위는 제일 높다.

dyadic 연산자는 두개의 피연산자를 취하며, dyadic 연산자에는 산술 연산자(arithmetic

operator), 관계 연산자(relational operator), 논리 연산자(logical operator), 구성원 연산자

(membership operator) 등이 있다.

5.3.10 피연산자-7

[구문]<buffer receive expression> ::=

RECEIVE <buffer location>

[예제]DCL a BUFFER BOOL;DCL b BUFFER BOOL;DCL c BOOL := TRUE; :c := RECEIVE a;c := RECEIVE b; :

TTAS.KO-09.0035(2000. 7.)

81

Page 99: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

[어의]

버퍼에 대한 이 RECEIVE 수식은 주어진 버퍼 장소(location) 또는 메시지를 해당 버퍼

장소에 저장하기 위해 지연되어 있는 프로세스로부터 버퍼 메시지를 받아온다. RECEIVE

수식이 버퍼 메시지를 가지고 있지 않거나 메시지를 보내기 위해 지연된 프로세스가 없는

버퍼에 대해 수행되는 경우에 이 수식을 수행하는 프로세스는 그 버퍼에 대해 지연 된다.

[참고사항]

이 RECEIVE 수식은 반드시 독립된 수식으로만 사용되어야 하며, 다음의 예와 같이 다른

수식 내의 수식으로 사용될 수 없다. IF RECEIVE buffer = 10 THEN /* boolean 수식 내의 수식으로 사용 */ . . . FI;

위와 같은 경우 다음과 같은 방법으로 구현할 수 있다. bufferMsg := RECEIVE buffer; IF bufferMsg = 10 THEN . . . FI;

[참조]

CHILL user's manual 5.2.18

Section 8.5, 8.5.1, 8.5.2, 8.5.4

TTAS.KO-09.0035(2000. 7.)

82

Page 100: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

제 6 장 실행문

6.1 개요

[구문]<action statement> ::=

[ <label name> : ] <action> [ <label name> ] ;

<action> ::= <assignment action>[6.2]

| <if action>[6.3]

| <case action>[6.4]

| <do action>[6.5]

| <call action>[6.6]

| <return action>[6.7]

| <goto action>[6.8]

| <empty action>[6.9]

| <start action>[6.10]

| <stop action>[6.11]

| <continue action>[6.12]

| <delay action>[6.13]

| <delay case action>[6.14]

| <send action>[6.15]

| <receive case action>[6.16]

| <select case action>[6.17]

[예제]sum := 0;index := 1;label_1 : /* label_1 은 레이블 이름 */IF index <= 10 THEN /* if 문 */ sum := sum + index; /* sum +:= index 와 동일 */ index := index + 1; /* index +:= 1 과 동일 */ GOTO label_1;FI label_1;

위의 프로그램의 수행은 아래 프로그램과 동일하다.

sum := 0;label_1 : DO FOR index := 1 TO 10; /* do 문 */ sum := sum + index; /* 1 <= index <= 10 인 경우 */OD label_1;

[어의]

TTAS.KO-09.0035(2000. 7.)

83

Page 101: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

실행문(<action statement>)은 객체지향 CHILL 프로그램의 알고리즘 부분을 구성한다.

실행문의 종류로는 블럭문, 치환문(<assignment action>), 호출문(<call action>), EXIT 문,

RETURN 문, GOTO 문, EMPTY 문 등이 있다. 실행문에는 레이블 이름(<label name>)을 붙일

수 있고 그 이름은 GOTO 문, EXIT 문 등에서 사용될 수 있다. 하나의 실행문안에 여러 개의

실행문이 올 수 있는 실행문을 블럭화된(blocked) 실행문이라 하는데 그 종류로는 IF 문, CASE

문, DO 문, BEGIN-END 블럭문, 모듈문, DELAY-CASE 문 등이 있다.

[참고사항]

레이블 이름은 실행문 앞에 올 수 있다. GOTO 문이나 EXIT 문에서 레이블을 이용하여

원하는 실행문으로 찾아갈 수 있다.

블럭화된 실행문 뒤에는 레이블 이름을 붙여 사용할 수 있다.(예제 참조) 단 레이블을

붙이는 경우 앞에서 붙인 이름과 같아야 한다.

실행문의 종류로는 if 문, case문, do 문, begin-end 문, module, assignment 문, call 문, exit 문

return 문, goto 문, empty 문, start 문, stop 문, delay 문, continue 문, send 문, delay_case 문,

receive_case 문 등이 있다.

[참조]

CHILL user's manual 2.2, 6.1, 8.0, 9.2.1, 9.2.2

6.2 치환 실행

[구문]<assignment action> ::=

<location> [ <closed dyadic operator> ] := <expression>[5.1]

| <location> {, <location> } + := <expression>

<closed dyadic operator> ::= OR | XOR | AND| <arithmetic additive operator>[5.4]

| <arithmetic multiplicative operator>[5.5]

[예제]SYNMODE byte = INT(-128:127);SYNMODE short = INT(-32768:32767);

DCL a byte; /* a 는 1 바이트 정수 */DCL b short; /* b 는 2 바이트 정수 */ DCL c INT; /* c 는 4 바이트 정수 */

a := 10; /* a 에 10 을 대입 */b := 342; /* b 에 342 를 대입 */c := B'1010; /* c 에 이진수 값 1010 을 대입 */

TTAS.KO-09.0035(2000. 7.)

84

Page 102: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

c := a + b; /* c 에 a + b 한 결과를 대입 */

a, b, c := 20; /* a := 20; b := 20; c :=20;과 동일 */a, b := c; /* a := c; b := c;와 동일 */

a +:= 10; /* a := a + 10 과 동일 */a MOD:= b; /* a := a MOD b 와 동일 */

DCL a, b, c byte := 3;DCL d, e BOOL;DCL f, g CHAR;DCL aa, bb ARRAY[1:10] byte;

f := 'a';g := 'c';d := f > g;e := NOT d;e := a + b > c OR NOT e;aa := bb; /* 배열의 모든 요소가 한꺼번에 치환된다 */

do for a := 1 to 10; /* aa := bb 와 동일 */ aa(a) := bb(a);

SYNMODE StackModuleMode = MODULE SPEC ... END;SYNMODE SynSMMode = StackModuleMode;SYNMODE StackTopModuleMode = MODULE SPEC BASED_ON StackModuleMode ... END;DCL sml StackModuleMode, ssml SynSMMode, rsml1, rsml2 REF StackModuleMode; rstml REF StackTopModuleMode;

sml := ssml; /* 두 모듈 모드는 synonymous 하므로 치환 가능 */rsml1 := ALLOCATE(StackModuleMode);rsml2 := ->sml;

[어의]

치환문은 임의의 수식(expression)을 치환문에서 지정하는 장소(location)에 저장하는

실행문으로 치환 연산자(:=) 오른쪽의 수식을 계산해서 결과를 왼쪽의 장소에 치환한다. 치환

연산자 왼쪽에 여러 개의 장소가 컴마(,)로 구분되어 나오는 치환문을 복합 치환문이라 하는데,

이 경우 모든 장소에 동일한 값이 치환된다. closed_dyadic_operator 는 치환 연산자 앞에 쓰일

수 있으며 그 종류는 위에서 열거한 바와 같다. 치환 연산자 왼쪽의 값과 오른쪽의 값을

연산하여 치환 연산자 왼쪽에 저장할 경우 closed_dyadic_operator 를 이용하면 편리하다. 단,

복합 치환문에서는 closed_dyadic_operator 를 사용할 수 없다.

[정적 조건]

TTAS.KO-09.0035(2000. 7.)

85

Page 103: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

복합 치환문에서 치환될 모든 장소의 모드는 같아야 되며, 읽기-전용 모드가 아니어야 한다.

치환 연산자 오른쪽 값의 모드는 치환될 장소의 모드와 같아야 된다.

치환 연산자의 오른쪽 값은 치환될 장소의 모드의 범위를 벗어나면 안된다.

배열 혹은 스트링 값(string value)을 치환할 때 치환될 장소의 개수가 치환할 값의 수와

일치하여야 하며, 배열을 치환할 때에는 배열의 이름을 이용하여 전 요소를 한꺼번에

치환할 수 있으며 각각의 대응되는 요소끼리 치환할 수도 있다.

왼편 장소의 모드 혹은 오른편 수식 결과의 모드가 모듈 모드이면, 이 모듈 모드내의 구성

원소들이 쌍으로(pairwise) 유사해야(synonymous) 한다. [모드 점검의 structural

equivalence 규칙 적용]

치환문이 "pvl-> := pvr->;" 형태를 가질 때, 여기서 pvl 과 pvr 은 "REF ML"과 "REF MR"을

가짐, ML 과 MR 은 모레타 모드 이름을 갖고 다음을 만족해야 한다:

ML 과 MR 은 모레타 계층 구조속에서 같은 경로상에 있어야 한다.

치환문이 "pvl-> := mr;" 형태를 가질 때, 여기서 pvl 은 "REF ML"을 가짐, ML 과 mr 의 모드

이름은 모듈 모드 이름이어야 하고 다음을 만족해야 한다:

mr 의 모듈 모드는 ML 과 유사하거나 하위 모듈 모드이어야 한다.

치환문이 "ml := pvr->;" 형태를 가질 때, 여기서 pvr 은 "REF MR"을 가짐, ml 과 MR 의 모드

이름은 모듈 모드 이름이어야 하고 다음을 만족해야 한다:

ml 의 모듈 모드는 MR 과 유사하거나 하위 모듈 모드이어야 한다.

[동적 조건]

치환문이 "pvl-> := pvr->;", "pvl-> := mr;" 혹은 "ml := pvr->;" 형태를 가질 때, 여기서 pvl/ml

과 pvr/mr 은 동적/정적으로 "REF ML"과 "REF MR"을 가짐, ML 과 MR 의 모드 이름은 모듈

모드 이름이어야 하고 다음을 만족해야 한다:

ML 과 MR 은 유사해야(synonymous) 한다.

치환문이 "pvl := pvr;"이고 양쪽 모드가 "REF MML/R" 형태를 가질 때, 여기서 MML/R은

모레타 모드임, 다음을 만족해야 한다:

동적으로 치환할 당시 MMR의 모레타 모드는 MML과 유사하거나 하위 모레타 모드이어야

한다.

그렇지 않으면, RANGEFAIL 예외가 발생한다.

[참조]

CHILL user's manual 4.2.1, 5.3.2, 6.2

6.3 IF 실행

[구문]

TTAS.KO-09.0035(2000. 7.)

86

Page 104: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

<if then else> ::= IF <boolean expression> THEN

<action statement list> [ ELSE

<action statement list> ] FI

<if then elsif> ::= IF <boolean expression> THEN

<action statement list> ELSIF <boolean expression> THEN

<action statement list> { ELSIF <boolean expression> THEN

<action statement list> }* [ELSE <action statement list> ] FI

[예제]/* grade 가 90 이상일 때 congratulations message 가 출력됨 */IF (grade >= 90) THEN printf("Congratulations!\n");FI;printf("Your grade is %d\n",grade);

DCL beautiful, chosen BOOL := TRUE;DCL failed BOOL := FALSE;DCL girl, judgement BOOL;

/* The value of girl is introduced by means of an input routine */

IF girl = beautiful THEN judgement := chosen; /* girl = beautiful 인 경우 */ELSE judgement := failed; /* girl /= beautiful 인 경우 */FI; /* d = max(a,b,c) */

IF a>=b AND a>=c THEN /* IF 문이 중첩되어 사용된 경우 */ d := a; /* a 가 b, c 보다 큰 경우 */ELSE IF b>=c THEN d := b; /* a<b or a<c 이고 b>=c 인 경우 */ ELSE d := c; /* a<b or a<c 이고 b<c 인 경우 */ FI;FI;

/* d = max(a,b,c) */

IF a>=b AND a>=c THEN d := a; /* a 가 b, c 보다 큰 경우 */

TTAS.KO-09.0035(2000. 7.)

87

Page 105: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

ELSE IF b>=c THEN d := b; /* a<b or a<c 이고 b>=c 인 경우 */ ELSE d := c; /* a<b or a<c 이고 b<c 인 경우 */ FI;FI;

위의 프로그램은 아래 프로그램과 동일하다.

IF a>=b AND a>=c THEN d := a; /* a 가 b, c 보다 큰 경우 */ELSIF b>=c THEN d := b; /* a<b or a<c 이고 b>=c 인 경우 */ELSE d := c; /* a<b or a<c 이고 b<c 인 경우 */FI;

[어의]

IF THEN ELSE 문은 조건 수식(boolean_expression)의 결과에 따라서 2 개의 처리 중

어느쪽인가를 실행하는 양 갈래 문으로 IF 와 FI 로 블럭화되는 실행문이다. IF 문은 조건의

결과가 참이면 THEN 다음의 문장을 수행하고, 거짓이면 ELSE 다음의 문장을 수행한다. ELSE

이하는 생략할 수 있는데 이 경우 조건의 결과가 거짓이면 IF 문 다음 실행문을 수행한다. IF 문

내에 IF 문이 중첩되어 사용될 수 있다. 조건의 연산 결과는 진위 값이 되어야 한다.

IF 문은 조건의 결과가 참이면 THEN 다음의 문장을 수행한 후 IF 문을 종료하고, 거짓이면

ELSIF 다음의 조건을 계산한다. ELSIF 조건의 결과가 참이면 THEN 다음의 문장을 수행하고,

거짓이면 다음 ELSIF 의 조건을 계산한다. 이와 같은 방식으로 조건이 참인 경우가 나올 때 까지

다음의 ELSIF 를 수행한다. 위의 모든 조건이 거짓인 경우에는 ELSE 이하를 수행하는데 ELSE

이하는 생략될 수 있다. IF 문이 중첩되어 사용되는 경우에는 ELSIF 를 이용하여 이를 간편화할

수 있다.

[참고사항]

If 문의 조건에 AND, OR 가 존재하는 경우 조건문 검사방식은 다음과 같다:

위 예제 max(a,b,c)의 If 문을 보면, 조건에서 a >= b 의 결과가 FALSE 이면 AND 조건을

끝까지 검사하지 않고 바로 ELSE 다음의 실행문을 수행한다. 따라서 AND 앞의 조건의

결과가 참이 되어야만 AND 다음의 조건을 검사한다. OR 조건인 경우에도 같은 방법으로

OR 앞의 조건이 참이면 OR 조건을 끝까지 검색하지 않고 바로 THEN 다음의 실행문을

수행한다.

[참조]

CHILL user's manual 6.3, 9.2.1

TTAS.KO-09.0035(2000. 7.)

88

Page 106: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

6.4 CASE 실행

[구문]<case action> ::=

CASE <discrete expression> OF ( <case label> ) : <action statement list> {( <case label> ) : <action statement list> }* [ELSE <action statement list>]

ESAC

[예제]DCL a, b, c, order, score INT(0:100);DCL degree char;

CASE order OF (1) : a := b+c; /* order 의 값이 1 이면, a := b+c 를 수행하고 RETURN; RETURN 한다 */ (2,3,4,5) : b := 2; /* order 의 값이 2 ~ 5 이면, b := 2 를 수행 */ ELSE c := 3; /* order 의 값이 위의 조건이 아니면, c := 3 를 수행 */ESAC;

CASE score/10 OF (9,10) : degree := 'A'; /* score/10 의 값이 9 ~ 10 이면 dgree := 'A' */ (8) : degree := 'B'; /* score/10 의 값이 8 이면 dgree := 'B' */ (7) : degree := 'C'; /* score/10 의 값이 7 이면 dgree := 'C' */ (6) : degree := 'D'; /* score/10 의 값이 6 이면 dgree := 'D' */ ELSE degree := 'F'; /* score/10 의 값이 그 이외이면 dgree := 'F' */ESAC;

SYNMODE dayMode = SET(mon,tue,wed,thu,fri,sat,sun);DCL today dayMode;DCL feeling SET(happy,tired,unhappy);

CASE today of; (mon,tue,wed,thu) : feeling := unhappy; (fri) : feeling := tired; (sat,sun) : feeling := happy;ESAC;

[어의]

IF 문은 논리식의 값이 TRUE 인가 FALSE 인가에 따라서 두 경우 중 한 경우를 선택하는데

유용하지만 CASE 문은 조건의 결과에 따라 여러 경우 중 하나를 선택하는데 유용하다. CASE

문은 하나의 수식과 레이블이 붙은 실행 문장 리스트로 구성되는데, 레이블에는 수식의 리스트

또는 ELSE 등이 올 수 있으며 ELSE 이하는 생략할 수 있다. CASE 실행은 레이블에 주어진

값들과 수식의 결과가 일치하는 곳의 문장들이 수행되고 종료되는데, 일치하는 값이 없는

TTAS.KO-09.0035(2000. 7.)

89

Page 107: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

경우는 ELSE 다음의 문장들이 수행된다. case 레이블에는 수식이나 수식 리스트 또는 리터럴

range 가 올 수 있다.

[참고사항]

Case 레이블 내의 리스트의 모드와 CASE 다음 선택 수식의 모드는 같아야 한다.

선택 키워드 ELSE 뒤에는 실행문이 올 수 있으며, case 레이블에서 조건이 만족되면

ELSE 를 생략할 수 있다.

Case 레이블에는 syn 으로 선언한 상수, set 모드 요소 등이 올 수 있다.

선택 수식은 하나로 제한하였다.

Case 레이블에 올 수 있는 수식은 상수 리터럴 수식만 허용함.

CASE 문은 case 레이블을 효율적으로 씀으로써 수행 속도를 증가시킬 수 있다. 예를 들어

case 레이블의 값들이 밀접한 값들인 경우 CASE 문은 벡터로 처리되기 때문에 레이블의

갯수와 관계없이 직접 원하는 case 레이블이 있는 곳의 문장들이 수행된다. 그러나 case

레이블의 값들이 밀접한 값들이 아닌 경우 balanced 코드로 처리하므로 다소 비교 횟수가

증가된다.

[참조]

CHILL user's manual 3.4.6, 6.4

6.5 DO 실행

6.5.1 개요

(국제 표준에 의거 내용 추가 예정)

6.5.2 FOR 제어

[구문]<do action> ::=

DO FOR <loop counter> := <discrete expression> [BY <integer expression>] [DOWN] TO <discrete expression> ;

<action statement list> OD| DO FOR <loop counter> [DOWN] IN <discrete range mode> ;

<action statement list> OD| DO FOR EVER ;

<action statement list> OD

TTAS.KO-09.0035(2000. 7.)

90

Page 108: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

[예제]sum := 0;DO FOR index:=2 BY 2 TO 100; sum := sum + index; /* sum = 2 + 4 + ... + 98 + 100 */OD;

sum := 0;

DO FOR index:=100 BY 2 DOWN TO 1; sum := sum + index; /* sum = 100 + 98 + ... + 4 + 2 */OD;

곱셈표를 계산하여 출력하는 프로그램.

DCL i, j, k INT;

printf(" *** Multiplication Table ***\n");

DO FOR i IN INT(1:9); DO FOR j := 1 TO 9; k := i * j; printf("%2d",k); OD; /* FOR j */OD; /* FOR i */

DO FOR EVER; IF signsal = n_s_s THEN IF nr_car_n_s < limit THEN signal := e_w_s; FI; ELSE IF nr_cars_e_w < limit THEN signal := n_s_s; FI; FI;OD;

[어의]

프로그램상에서 어떤 변수의 값을 순차적으로 변화시키면서 처리를 반복하는 일이

필요하게 된다. 이와 같이 임의의 실행문이 일정한 횟수만큼 반복되는 경우 DO 문을 이용한다.

실행문이 수행될 것인가 아닌가는 DO 문의 조건 부분(control part)에 의하여 결정된다.

DO FOR 문은 지정된 반복 횟수 만큼 loop body(action_statement_list)를 수행하는

실행문으로 제어 부분인 loop_counter 가 주어진 초기값에서부터 시작하여 원하는 최대값에

도달할 때까지 반복 수행한다.

loop body 가 반복될 때마다 BY 이하의 값만큼 loop_counter 를 증가(감소)시켜

loop_counter 가 TO(DOWN TO) 이하의 종료 값을 초과하기 전까지 loop body 를 수행한다.

loop_counter 의 값은 loop body 가 수행되기 전에 계산된다. action_statement_list 는 하나

이상의 action 으로 구성되고 loop_counter 에는 변수 이름이 와야 된다.

TTAS.KO-09.0035(2000. 7.)

91

Page 109: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

위의 첫번째 예제는 100 이하의 양의 정수 중 짝수의 합을 구하는 프로그램이다. 여기서

변수 index 는 loop_counter 로 사용되며, loop_body 인 sum := sum + index 는 index 가 2 부터

시작하여 그 값이 100 을 초과하지않는 범위 내에서 반복 수행된다. index 는 loop_body 가

수행될 때마다 2씩 증가된다.

위의 두 번째 예제도 역시 100 이하의 양의 정수 중 짝수의 합을 구하는 프로그램으로 index

가 100 부터 시작하여 index 의 값이 1 이하가 될 때까지 loop body 인 sum := sum + indx 를 반복

수행한다. index 는 loop_body 가 수행될 때마다 2씩 감소된다.

DO 문에 FOR EVER 를 붙이면 loop body 를 무한 반복 수행하는 실행문이 된다. 나중에

설명하는 goto 문, exit 문, return 문 등으로 loop 를 빠져나가지 않는 한 실행을 반복한다.

[참고사항]

loop_counter 의 이름은 선언되어야 한다.

조건 내에 TO 를 사용하면 초기값이 종료 값보다 작아야 되며 loop_counter 의 값이 종료

값을 초과하지 않는 범위 내에서 DO 문이 수행된다. 만약 초기값이 종료 값보다 크면 loop

body 가 한번도 수행되지 않는다. loop_counter 의 값은 loop body 가 수행될 때마다 BY

이하 값 만큼 증가되는데, 만약 BY 수식이 생략되면 자동적으로 1씩 증가된다.

조건 내에 DOWN TO 를 사용하면 초기값이 종료 값보다 커야 되며 loop_counter 의 값이

종료 값보다 작지않은 범위 내에서 DO 문이 수행된다. 만약 초기값이 종료 값보다 작으면

loop body 가 한번도 수행되지 않는다. 여기서 loop_counter 의 값은 loop body 가 수행될

때마다 BY 이하 값 만큼 감소되는데, 만약 BY 수식이 생략되면 자동적으로 1씩 감소된다.

[DOWN] TO 이하의 값은 항상 양수 값이여야 된다.

DO FOR 문은 DO 와 OD 로 블럭화된 실행문이다.

DO FOR IN 인 경우에는 IN 이하 모드의 가장 작은 값을 loop_counter 의 초기값으로 하고 그

값의 successor 를 다음 loop_counter 의 값으로 하여 이 값이 모드의 가장 큰 값을

초과하지않는 범위 내에서 loop body 를 반복 수행한다. DO FOR DOWN IN 경우에는 위의

경우와 반대로 DOWN IN 이하 모드의 가장 큰 값을 loop_counter 의 초기값으로 하고 그

값의 predecessor 를 다음 loop_counter 의 값으로 하여 이 값이 모드의 가장 작은 값

미만으로 되지 않는 범위 내에서 loop body 를 반복 수행한다.

loop 를 빠져나가기 위하여 EXIT 문 등을 이용할 수 있다.

[참조]

CHILL user's manual 6.5.1

6.5.3 WHILE 제어

[구문]

TTAS.KO-09.0035(2000. 7.)

92

Page 110: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

<do while action> ::= DO WHILE <boolean expression> ;

<action statement list> OD

[예제]- 1 부터 100까지 숫자 중 3 의 배수의 합.

DCL sum INT :=0;DCL index INT:= 3;

DO WHILE index <= 100; sum := sum + index; /* sum = 3 + 6 + ... + 96 + 99 */ index := index + 3;OD; /* WHILE index */

[어의]

어떤 조건이 성립하고 있는 동안에 처리의 반복은 DO 문에 WHILE 제어를 붙여 사용한다.

DO WHILE 문에서 조건 부분에 기술된 조건 수식(boolean_expression)은 loop body 가

수행되기 전에 계산된다. 조건 부분의 값이 참이면, loop body 를 수행하고, 그렇지 않으면 DO

문은 종료된다.

[참고사항]

조건 부분의 변수 값을 loop body 내에서 변환시켜줘야 한다.

조건 부분의 값이 처음부터 거짓이면 loop body 는 한번도 수행되지 않는다.

[참조]

CHILL user's manual 6.5.2

6.5.4 FOR-WHILE 제어

[구문]<do for while action> ::=

DO FOR <loop counter> := <discrete expression> [BY <integer expression> ] [DOWN] TO <integer expression> WHILE <boolean expression> ;

<action statement list> OD| DO FOR <loop counter> [DOWN] IN <discrete mode> WHILE <boolean expression> ;

<action statement list> OD

[예제]DO FOR WHILE 의 예

TTAS.KO-09.0035(2000. 7.)

93

Page 111: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

DCL a, b, c, i, index, sum INT;

a := 3;b := 2;DO FOR i:= 1 TO 10 WHILE b < a; b := b + i;OD; /* FOR i */

c := 5;sum := 0;DO FOR index:=1 TO 10 BY 2 WHILE index < c; sum := sum + index; OD;

[어의]

지정된 반복 횟수만큼 loop body 를 수행하는 DO FOR 형식과, 조건 부분의 값이 참인

경우에만 loop body 를 반복 수행하는 DO WHILE 형식을 혼용한 형식으로, FOR 이하의 조건을

먼저 점검하고 WHILE 이하의 조건을 계산한다.

[참고사항]

FOR 이하의 조건을 만족하고 WHILE 조건이 만족하는 범위 내에서 loop body 가 수행 된다.

WHILE 이하의 조건이 처음부터 거짓이면 loop body 는 한번도 수행되지 않는다.

[참조]

CHILL user's manual 6.5.1, 6.5.2

6.6 호출 실행

[구문]<call action> ::=

[ CALL ] { <procedure name> | <procedure primitive value> } ( [ <actual parameter list >] )| <CHILL built-in routine call>[7.20]

| <moreta component procedure call>

<moreta component procedure call> ::= [ CALL ] <moreta location> . <component procedure name> ( [ <actual parameter list>] ) [ <priority> ]| [ CALL ] <bound reference moreta location primitive value> -> . <component procedure name> ( [<actual parameter list>] ) [ <priority> ]| [ CALL ] <component procedure name> ( [ <actual parameter list> ] ) [ <priority> ]

[예제]1) 거듭제곱 계산

TTAS.KO-09.0035(2000. 7.)

94

Page 112: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

power: PROC (x,y INT) (INT); /* x, y 의 모드는 정수, DCL z INT := 1; 결과 값의 모드도 정수*/

DO FOR i := 1 TO y; z := z*x; /* z *:= x;와 동일 */ OD; RETURN z;END power;

:

c := power(a,b);

:

2) Factorial 계산

fact: PROC (num INT) (INT); IF num <= 1 THEN RETURN 1; /* 1! = 1 */ ELSE RETURN num * fact(num-1); /* n! = n*(n-1)! */ FI;END fact;

...; c := fact(n);NEWMODE object = STRUCT(name ident; value number);DCL table ARRAY(1:100) object;DCL adr REF object;

search: PROC(key ident, no REF object LOC); DCL index object;

DO FOR index IN table; IF index.name = key THEN no := ->index; FI; OD;END search;

search('diamond', adr);adr->.value := 1500;

[어의]

프로시듀어 호출은 호출된 프로시듀어의 수행을 야기시킨다. 이때 매개변수 전달은 그

프로시듀어가 수행되기 전에 발생한다. 프로시듀어의 끝에 도달했을 때 혹은 RETURN 문을

만났을 때, 호출된 프로시듀어에서 호출한 프로그램으로 되돌아 간다. 호출한 프로그램으로

돌아가기 전에, 만약 그 프로시듀어가 결과를 가지고 있다면, 반환하기 전에 호출한

프로그램으로 결과를 전달한다. 프로시듀어의 호출을 언어상의 성격으로 볼 때 결과가 없는

TTAS.KO-09.0035(2000. 7.)

95

Page 113: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

프로시듀어 호출은 실행문 즉 호출문의 자격이며, 결과가 있는 프로시듀어 호출은 값의

자격으로 호출의 자격은 수식이 된다.

어떤 문제를 해결할 때는 일련의 특정한 기능이 여러 번 사용되는 경우가 있는데, 이러한

일련의 문장을 프로시듀어로 정의해 줌으로써 필요한 곳마다 일일이 여러 번 써주는 번거러움을

피할 수 있다. 이러한 일련의 문장들에게 프로시듀어는 특정한 이름을 부여하여 필요할 때마다

단순히 그 이름만을 불러 기능을 수행하도록 한다. 호출문은 프로시듀어 호출과, 내장 함수 호출

등 두 가지 경우가 있다. 이들을 호출하는 경우 그 이름으로 호출하며, 실 매개변수 리스트

(<actual parameter list>)내에 기술된 값이나 장소가 이들에게 전달된다.

프로시듀어 호출 시 매개변수는 생략 가능하고 재귀 호출(recursive call)이 가능하다.

실 매개변수 리스트는 컴마로 구분된 실 매개변수들의 집합이고, 실 매개변수에는 수식이

올 수 있다. 실 매개변수 리스트는 생략될 수 있다.

모레타 원소 프로시듀어 P 의 프로시듀어 호출 P(...)는 SELF.P(...)의 파생 구문이다. 모레타

원소 프로시듀어 호출 L.name(...)는 장소 L 의 모드내에 있는 name 에 의해 식별 가능한 모레타

원소 프로시듀어의 호출을 야기시킨다. 이때 L 은 프로시듀어에 초기 장소 매개인자로 전달된다.

모레타 원소 프로시듀어 호출은 항상 "장소 . 프로시듀어-호출" 구조를 갖는다. 이는 " 그

프로시듀어가 장소에 접속된다."라는 표현적 특성을 갖는다. 모레타 원소 프로시듀어 호출에

대해 다음과 같은 단계가 수행된다:

a) 호출된 프로시듀어는 모듈 모드 장소에 다음과 같이 적용된다:1. 실 매개인자의 연산2. 전위-조건(pre-condition)의 검사3. 완전한 불변-조건(invariant)의 검사4. 프로시듀어 본체의 실행5. 완전한 불변-조건의 검사6. 완전한 후위-조건(post-condition)의 검사7. 호출 지점으로의 반환

b) 호출된 프로시듀어는 리젼 모드 장소 RL 에 다음과 같이 적용된다:1. 실 매개인자의 연산2. RL 이 free 일 때까지 대기후 RL 을 잠금3. 전위-조건의 검사4. 완전한 불변-조건의 검사5. 프로시듀어 본체의 실행6. 완전한 불변-조건의 검사7. 완전한 후위-조건의 검사8. RL 을 풀림9. 호출 지점으로의 반환

c) 호출된 프로시듀어는 타스크 모드 장소 TL 에 다음과 같이 적용된다:

호출자는 다음 단계를 수행한다:1. 실 매개인자의 연산2. 프로시듀어 식별자, 실 매개인자 및 우선순위를 TL 에 전송3. 다음 실행문을 연속 실행

TL 은 다음 단계를 수행한다:

TTAS.KO-09.0035(2000. 7.)

96

Page 114: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

1. 프로시듀어 식별자와 실 매개인자를 우선순위에 따라 수신2. 전위-조건을 검사3. 완전한 불변-조건을 검사4. 프로시듀어 본체를 수행5. 완전한 불변-조건을 검사6. 완전한 후위-조건을 검사

[정적 조건]

프로시듀어 호출시 매개변수 전달(parameter passing)방식에는 call by value(default), call

by reference 인 두 가지 방법이 있다.

매개변수를 사용할 때 실 매개인자와 형 매개인자의 개수와 모드가 일치하여야 한다.

우선순위는 타스크 장소에 적용되는 원소 프로시듀어 호출에만 사용될 수 있다.

형 매개인자의 모드가 모레타 모드이면, 형 매개인자의 모드와 실 매개인자의 모드는

유사해야(synonymous) 한다.

형 매개인자의 모드가 모레타 참조 모드인 "REF MM" 형태를 가지면, 형 매개인자의

모드와 실 매개인자의 모드는 similar 해야 한다.

[동적 조건]

procedure primitive value 은 프로세스 정의문내에 정의된 프로시듀어 이름을 가질 수

없다.

단언(assertion) 점검은 다음 예외일 때 발생할 수 있다:

전위조건(precondition)이 FALSE 를 계산되면, PREFAIL 예외가 발생한다. 이때

적절한 처리기에 대한 검색이 프로시듀어 본체의 끝에서 시작하고 8.3 절에 따라

계속된다.

후위조건(postcondition)이 FALSE 를 계산되면, POSTFAIL 예외가 발생한다. 이때

적절한 처리기에 대한 검색이 프로시듀어 본체의 끝에서 시작하고 8.3 절에 따라

계속된다.

불변조건(invariant)이 FALSE 를 계산되면, INVFAIL 예외가 발생한다. 이때 적절한

처리기에 대한 검색이 프로시듀어 본체의 끝에서 시작하고 8.3 절에 따라 계속된다.

한 호출이 타스크 장소 TL 에 적용된다면, TL 은 종료되지 말아야 한다.

[참조]

CHILL user's manual 6.7, 7.1, 7.4

6.6.1 매개변수 전달 및 RETURNS 값 전달

[구문]<formal parameter list> ::=

TTAS.KO-09.0035(2000. 7.)

97

Page 115: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

<parameter spec> {, <parameter spec> }*

<parameter spec> ::= <name list> <mode> [ <parameter attribute> ] | *

<parameter attribute> ::= IN | LOC

[예제]DCL i, j INT := 2;DCL k INT;

test:PROC(x INT, y INT LOC) RETURNS(INT); x := x*2; y := y*2; RETURN(x);END test;

k := test(i,j);

위의 예제를 수행한 후, 각 변수의 값은 다음과 같다. i = 2 : 반환될 때, 형식 매개변수가 실 매개변수에 복사되지 않는다. (IN 속성) j = 4 : y 는 j 장소의 또 다른 이름이므로, y 치환문은 그 값이 j 에 저장된다. (LOC 속성) k = 4 : test 프로시듀어가 반환될 때, return 값이 k 에 저장된다.

[어의]

프로그램과 프로시듀어 사이에서 매개변수들을 전달하는 방법에는 두 가지 방식이 있다.

1. call by value : 매개변수의 속성이 IN 이거나 서술하지 않을 경우이다. 실 매개변수에서

서술한 수식은 대응하는 형식 매개변수의 지역 변수에 저장된다. 그러나 형식 매개변수의

값이 실 매개변수에 복사되지 않는다.

2. call by location : 매개변수의 속성은 LOC 이다. 이때 실 매개변수와 이에 대응하는 형식

매개변수의 장소가 같다. 그러므로 프로시듀어 내에서 형식 매개변수를 수정할 때,

대응되는 실 매개변수의 내용도 수정된다. 이때 형식 매개변수는 오직 포인터로 접근할

수 있는 변수이어야 한다. 그리고 * 사용은 그 위치 이후부터 대응하는 형식 매개변수와

실 매개변수들간의 타입 검사를 하지 않음을 말한다.

[참고사항]

6.7, 6.8, 7.1 장의 참고사항을 참조하시오.

[참조]

CHILL user's manual 7.3

TTAS.KO-09.0035(2000. 7.)

98

Page 116: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

6.7 RETURN 실행

[구문]<return action> ::=

RETURN [ <expression> ][5.1]

[예제]RETURN;RETURN 302; /* return 값 = 302 */

배열 a 내의 값 중 b 의 값보다 큰 값의 위치를 출력

comparison: PROC (a array[1:10] INT, b INT) (INT); DO FOR i := 1 TO 10; IF a[i] > b THEN RETURN i; FI; OD; RETURN 0; /* 배열 a 내에 b 값보다 큰 값이 없으면, 0 을 return */END comparison;

[어의]

RETURN 문은 프로그램 제어를 호출문으로 넘겨주기 위한 실행문으로 프로시듀어 호출에

의해 전달된 값으로 연산한 값을 호출문에 넘겨주려 할 때 이 문장을 사용한다. RETRUN 문에서

호출문으로 넘겨주는 결과의 모드와 프로시듀어 정의에서 선언한 모드는 일치하여야 한다.

RETURN 문을 이용하여 프로시듀어가 종료되기 전에 그 결과를 호출문에게 넘겨주고

프로시듀어를 종료할 수 있다. 넘겨줄 값이 없는 경우 RETURN 값은 생략될 수 있다.

[정적 조건]

RETURN 문은 반드시 프로시듀어 정의문 내에서만 사용되어야 한다.

프로그램 제어가 RETURN 문을 만나면 해당 프로시듀어가 종료된다.

[참조]

CHILL user's manual 6.8

6.8 GOTO 실행

[구문]<goto action> ::=

GOTO <label name>

[예제]

TTAS.KO-09.0035(2000. 7.)

99

Page 117: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

hell: coming(a);...IF a>d THEN GOTO hell; /* 프로그램 제어는 프로시듀어 호출문 coming(a) 으로 간다. */FI; DO FOR i := 1 TO 10; DO FOR j := 1 TO 3*i; IF condition1 THEN GOTO alpha; ELSE GOTO omega; FI; ...alpha: OD; /* FOR j */ printf(" Loop repetition complete.");omega:OD; /* FOR i */

[어의]

GOTO 문은 레이블 이름을 갖는 실행문으로, 프로그램 제어를 레이블이 붙은 실행문으로

이동시킨다. GOTO 문이 프로시듀어나 프로세스 혹은 Begin-end 블록 안에서 사용되는 경우,

GOTO 문 안에 사용된 레이블은 그 레이블이 정의된 블록 내에 존재하여야 한다. 즉 프로그램

제어를 이들 블록 밖으로 이동할 수 없다.

여기서 레이블은 다른 식별자 이름과 중복해서 사용될 수 있다. 이때 그 사용 레이블은

식별자 정의문으로 이동하는 것이 아니라 레이블이 붙은 실행문으로 이동한다.

[정적 조건]

한 블록 내에 정의되는 레이블 이름들은 그 블록 내에서 중복 정의할 수 없고 단일

(unique)해야 한다.

[참조]

CHILL user's manual 2.2, 6.9

6.9 Empty 실행

[구문]

<empty action> ::=

[예제]CASE i OF

TTAS.KO-09.0035(2000. 7.)

100

Page 118: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

(1:5) : X := 0; (6:20): X := 2; ELSE /* ELSE 다음은 EMPTY 문 */ESAC;

[어의]

EMPTY 문은 어떤 실행도 하지 않는다.

[참조]

CHILL user's manual 6.11

6.10 CAUSE 실행

(지원 않함)

6.11 START 실행

[구문]<start expression> ::= <instance location> := START <process name> ([<actual parameters>]) [<os directive>]

<start action> ::= START <process name> ( [<actual parameters>] ) [SET <instance location>] [<os directives>]

<os directives> ::= [ [AT <integer literal expression>] [REPEAT <integer expression>] EVERY <integer expression> {MS|SEC|MIN|HOUR} | AFTER <integer expression> {MS|SEC|MIN|HOUR|TOD}] [STACKSIZE <integer literal expression>] [PRIORITY <integer literal expression>] [TIMELIMIT <integer literal expression>] [SYSTEM]

[예제]SYN _add_one = 10; /* 프로세스 정의 번호 : 10 */DCL pid, pInstance INSTANCE;DCL j INT;

add_one: PROCESS(i INT); i := i + 1;END add_one;

pid := START add_one(j) PRIORITY 2; /* START 수식 */

TTAS.KO-09.0035(2000. 7.)

101

Page 119: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

START add_one(j) SET pInstance /* START 실행문 */ AT 091230 REPEAT 10 EVERY 5 SEC STACKSIZE 1024 /* Stacksize : 1024 bytes */ PRIORITY 1 /* Process 우선순위 : 1 */ SYSTEM; /* System process *//* 09 시 12 분 30 초 부터 이 프로세스를 5 초 간격으로 10 회를 생성하여 수행시킴 */

START add_one(j) AFTER 10 MIN STACKSIZE 512; /* START 실행문 *//* 10 분이 경과된 후에 이 프로세스를 생성하여 수행시킴 */

[어의]

START 수식과 START 실행문은 주어진 프로세스 이름에 의해 정의된 프로세스를

생성하여 수행 가능한 상태로 만들어 준다. START 수식과 START 실행문은 생성된

프로세스에게 고유의 instance 값을 부여해 준다. 부여된 인스탄스(instance) 값은 START

수식인 경우 START 수식의 LHS(Left-Hand Side)에 주어진 instance_location 에 저장되며,

START 실행문에서는 SET 절의 instance_location 에 저장된다. 그러나 START 수식에서 LHS

가 주어지지 않았거나 START 실행문의 SET 절이 주어지지 않은 경우에 그 instance 값은

무시된다.

새로 생성된 프로세스에게도 프로시듀어와 같이 매개변수 값을 전달할 수 있으나 이때,

프로세스의 매개변수는 INOUT 이나 IN 의 특성을 가지지 않은 것이어야 한다. 또한 START

수식이나 START 실행문에 주어진 실 매개인자(actual parameter)의 개수는 해당 프로세스

정의문에 주어진 형식 매개인자(formal parameter)의 개수와 동일해야 한다.

STACKSIZE, PRIORITY, TIMELIMIT, 및 SYSTEM 지시자는 각각 프로세스의 stack 크기,

우선순위, time limit, 그리고 그 프로세스가 시스템 프로세스인지 아닌지의 여부를 기술하는

것이다. 특히, STACKSIZE 는 사용자가 정의하지 않으면 HOST 환경에서 outermost 프로세스인

경우에는 4096 bytes, 일반 프로세스인 경우에는 1024 bytes 로 할당하여 준다. AT, REPEAT,

EVERY 지시자는 주기적으로 start 되어 수행되는 cyclic 프로세스를 위한 것으로 EVERY

지시자에 의해 주어진 time interval 이 경과한 부터, 또는 AT 지시자에 주어진 지정된 시각에

도달한 후부터 REPEAT 지시자에 주어진 횟수만큼 반복하여 해당 프로세스를 생성하여

수행시킨다. Cyclic 프로세스를 위한 각 지시자의 의미는 다음과 같다.

AT : 프로세스의 start 시각을 표시하는 것으로 hhmmss 의 형식으로 표현된다. 이 시각이

생략되면 0 로 간주하며 이 때에는 EVERY directive 에 주어진 interval 시간이 경과한

후부터 주기적으로 수행한다.

REPEAT : 주기적으로 수행하는 횟수로 생략된 경우에는 0 로 간주되며 이는 무한 수행을

의미한다.

EVERY : 주기적으로 수행하는 시간 간격을 나타낸다.

AFTER directive 는 주어진 시간이 경과한 후에, 또는 주어진 시각이 되었을 때 한번만

프로세스를 수행시키기 위한 것이다. 즉 AFTER directive 다음에 주어진 시간이 time-

of_day(TOD) 시간이면 이 시각이 되었을 때 프로세스를 수행하며, TOD 시간이 아니면 주어진

TTAS.KO-09.0035(2000. 7.)

102

Page 120: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

시간이 경과한 후에 프로세스를 수행한다. MS, SEC, MIN, HOUR, 및 TOD 의 keyword 는

시간의 단위를 표시하는 것으로 각각 mill-second, second, minute, hour, 그리고 time-of-day 를

나타낸다.

[참조]

CHILL user's manual 5.2.17, 6.13

6.12 STOP 실행

[구문]

<stop action> ::=

STOP

[예제]add_one: PROCESS(i INT); i = i + 1; STOP;END;

[어의]

STOP 실행문은 이 실행문을 수행하는 프로세스의 수행을 종료시키고 소멸시킨다.

그러므로 현재 수행 중인 프로세스는 이 STOP 실행문을 수행하거나 그 프로세스의 맨 마지막

실행문의 수행을 마침으로써 그 수행이 종료되고 소멸된다.

[참조]

CHILL user's manual 6.14

Section 8.1.1, 8.2.2

6.13 CONTINUE 실행

[구문]<continue action> ::= CONTINUE <event location>

[예제]DCL nonbusy EVENT;DCL busy BOOL := FALSE;

acquire: PROC(); DO WHILE busy;

TTAS.KO-09.0035(2000. 7.)

103

Page 121: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

DELAY nonbusy; OD; busy := TRUE;END acquire;

release: PROC(); busy := FALSE; CONTINUE nonbusy; /* continuing for event "nonbusy" */END release;

[어의]

CONTINUE 실행문은 주어진 이벤트 장소에 대하여 지연(delay)되어 있는 프로세스를

재활성시켜 그 프로세스의 수행을 계속하도록 한다. 주어진 이벤트 장소에 대해 하나 이상의

프로세스가 지연되어 있을 경우 이 실행문은 그들 중 우선순위가 가장 높은 프로세스를

선택하여 재활성시킨다. 그러나 해당 이벤트 장소에 대해 지연되어있는 프로세스가 없을 경우

이 실행문의 수행은 아무런 효과가 없다. 또한 현재 재활성화될 프로세스가 DELAY CASE

실행문에 의해 하나 이상의 이벤트 장소에 대해 지연되어 있는 경우 이 실행문은 해당 이벤트

장소에 대한 대기 장소(delay queue)로부터 재활성될 프로세스를 모두 제거한다.

[참조]

CHILL user's manual 6.15

Section 8.4 8.4.1, 8.4.2, 8.4.3

6.14 DELAY 실행

[구문]<delay action> ::= DELAY <event location> [ PRIORITY <integer literal expression> ]

[예제]DCL job_tobe_done EVENT; /* "job_tobe_done"을 event location 으로 선언 */

slave: PROCESS( ); DO FOR EVER; DELAY job_tobe_done; /* event "job_tobe_done"에 대하여 DELAY 됨 */ /* actions of job */ OD;END slave;

master: PROCESS( ); /* actions */ CONTINUE job_tobe_done; /* proceed with other actions */END master;

TTAS.KO-09.0035(2000. 7.)

104

Page 122: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

[어의]

DELAY 실행문은 이 실행문을 수행하는 프로세스를 주어진 event에 대해 delay 시킨다.

프로세스가 주어진 event 에 대해 delay 되면 그 프로세스는 해당 event 에 대한 프로세스 대기

장소(delay queue)에 주어진 우선순위에 따라 저장된다. 우선순위는 양의 정수 값으로

PRIORITY 절에 의해 명시되지 않은 경우 그 우선순위 값은 0 으로 간주된다. 또한 event

선언문에서 명시된 event 길이 만큼의 프로세스가 이미 그 event 에 대해 delay 되어 있을 때

프로세스가 DELAY 실행문을 수행하면 DELAYFAIL 예외가 발생한다.

[참고사항]

DELAYFAIL 예외가 발생하면 그 프로세스는 지연(delay)되지 않는다.

[참조]

CHILL User's Manual 6.16

Section 8.4, 8.4.1, 8.4.3, 8.4.4

6.15 DELAY-CASE 실행

[구문]<delay case action> ::= DELAY CASE [SET <instance location> ] [PRIORITY <integer literal expression>] ; ( <event location list> ): <action statement list> {( <event location list_2> ) : <action statement list> }* ESAC

[예제]DCL operator_is_ready, switch_is_closed EVENT;DCL continuer INSTANCE;

call_process: PROCESS(); DELAY CASE SET continuer PRIORITY 5; (operator_is_ready): /* some actions for event "operator_is_ready" */

(switch_is_closed) : DO FOR I IN REANGE(1:10); CONTINUE operator_is_ready; /* empty the queue for event "operartor_is_reday" */ ESAC;END call_process;

[어의]

TTAS.KO-09.0035(2000. 7.)

105

Page 123: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

DELAY-CASE 실행문은 이 실행문을 수행하는 프로세스를 하나 이상의 이벤트 장소에 대해

동시에 지연되도록 한다. 그러므로 DELAY CASE 실행문을 수행하는 프로세스는 delay 되어

주어진 각각의 event 에 대한 프로세스 대기 장소(delay queue)에 명시된 우선순위에 따라

저장된다. 이때 우선순위가 명시되지 않았으면 우선순위가 0 인 것으로 간주한다.

DELAY-CASE 실행문에 의해 delay된 프로세스는 다른 프로세스가 DELAY CASE

실행문에 기술된 event들 중 하나에 대한 CONTINUE 실행문을 수행함으로서 재활성

(reactivation)되며, 이때 DELAYCASE 실행문에 기술된 각 event 들의 대기 장소로 부터

reactivation 되는 프로세스가 제거된다. 또한 SET 절이 주어진 경우 CONTINUE 실행문을

수행한 프로세스의 instance 값이 SET 절에 주어진 instance 장소(location)에 저장된다.

[참조]

CHILL user's manual 6.17

Section 8.4, 8.4.1, 8.4.2, 8.4.4

6.16 SEND 실행

6.16.1 개요

6.16.2 Send-시그널 실행

[구문]<signal send by process definition action> ::=

SEND <signal name> [ ( <signal value location> [ SIZE <integer literal expression> ] ) ] [ IN <processor name> ] [ PRIORITY <integer literal expression> ]

<signal send by instance action> ::=SEND <signal name> [ ( <signal value location> [ SIZE <integer literal expression> ] ) ]

[ TO <instance location> ] [ PRIORITY <integer literal expression> ]

[예제]SYN _ready = 10; /* "ready"에 대한 signal 번호를 10 으로 정의 */SYN _wait = 20; /* "wait"에 대한 signal 번호를 20 으로 정의 */ . . .NEWMODE MSG = STRUCT (b BOOL, c CHAR(5));SYN ASMP = H'001F; /* ASMP processor# : 001FHEX */ . . .SIGNAL ready = (INT) TO p1;SIGNAL wait = (MSG); . . .DCL ready_msg INT := 10;DCL wait_msg MSG := [ TRUE, "wait\0" ]; . . .

TTAS.KO-09.0035(2000. 7.)

106

Page 124: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

DCL pid INSTANCE; :SEND ready (ready_msg); /*시그날 "ready"를 "p1"으로 정의된 모든 프로세스에게 전송 */SEND wait (wait_msg) PRIORITY 2; /* Signal "wait"를 모든 프로세스에게 전송 */ :SEND ready (ready_msg) TO pid; /* Signal "ready"를 'pid' location 에 저장된 : 프로세스 instance로 전송 */SEND wait (wait_msg) IN ASMP; /* Signal "wait"를 ASMP 프로세서로 전송 */

[어의]

SEND-시그널 실행문은 상대 프로세스에게 동기화 및 메시지를 전송한다. 주어진 signal 과

함께 signal 메시지와 메시지의 우선순위 및 그 signal 을 보내는 프로세스의 instance도 함께

전송되며, 우선순위가 명시되지 않은 경우에 우선순위는 0 으로 간주한다. Signal 전송 시

전송될 시그널 메시지의 모드는 해당 signal 정의문에 명시된 것과 동일해야 한다.

시그널의 전송은 프로세스 정의에 의해 전송하는 것과 프로세스의 인스탄스에 의해

전송하는 것으로 나뉘어 지며, 이는 signal 정의문과 SEND 실행문에 기술되는 TO 절과 IN 절의

내용에 따라 구분되어 진다. 즉, signal 정의문에 TO 절이 주어지고 SEND 실행문의 TO 절이

생략된 경우 signal 은 프로세스 정의에 의해 전송되는 것으로, 이때 signal 은 signal 정의문의

TO 절에 주어진 프로세스 정의 명에 의해 생성된 모든 프로세스에게 전송된다.

또한, signal 정의문 또는 SEND 실행문의 IN 절에 프로세서 번호가 주어진 경우, 그 signal 은

해당 프로세서의 특정 프로세스 정의로 전송된다. 이는 signal 을 받을 상대 프로세서를

지정하는 것 이외에는 프로세스 정의에 의해 전송하는 것과 동일하며 분산 시스템에서 지정된

프로세서의 특정 프로세스 정의로 signal 을 전송하기 위해 사용된다.

SEND 실행문에 TO 절이 있는 경우 signal 은 TO 절 다음에 기술된 프로세스 instance로

signal 이 전송된다. 이는 프로세스의 instance 에 의해 signal 을 전송하는 것으로 이때 signal

정의문의 TO 절에 프로세스 정의 명이 주어진 경우에 SEND 실행문의 TO 절의 프로세스의

instance 가 그 프로세스 정의에 의해 생성된 프로세스가 아닐 경우에 signal 은 전송되지 않는다.

(SENDFAIL 예외가 발생됨)

위의 경우 이외에 signal 정의문과 SEND 실행문의 TO 절이 모두 생략된 경우에 signal 은

현재 생성된 모든 프로세스에게 전송된다. 그러나 SEND 실행문의 TO 절에 주어진 프로세스의

instance가 NULL 인 경우와 주어진 프로세스 instance 를 가지는 프로세스가 존재하지 않는

경우에는 signal 은 전송되지 않는다. (EXTINCT 또는 EMPTY 예외가 발생됨)

시그널 전송 데이타에 SIZE 절이 있는 경우는 명시된 정수 리터럴 값의 크기만큼 (0 부터 n

bytes까지) 시그널 데이타를 전송한다.

[참고사항]

SEND 실행문에 의해 전송할 signal 메시지는 상수나 tuple 값과 같은 리터럴 수식을 사용할

수 없으며, 반드시 location 이어야 한다.

TTAS.KO-09.0035(2000. 7.)

107

Page 125: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

Signal 정의문과 SEND 실행문 모두에 IN 절이 주어진 경우 SEND 실행문의 IN 절이

우선한다.

주어진 signal 을 수신할 프로세스 instance의 값이 시스템에 의해 생성된 프로세스 instance

값의 범위 밖의 값일 경우 시스템은 "bound over" 메시지를 출력하고 signal 은 전송되지

않는다.

명시된 SIZE 절의 리터럴 정수 값은 해당 시그널 데이타 크기보다 작아야 한다.

[참조]

CHILL user's manual 8.5, 8.5.1, 8.5.3, 6.18.2, 6.19.2

Section 8.6, 8.6.2, 8.6.3

6.16.3 Send-버퍼 실행

[구문]<send buffer action> ::= SEND <buffer location> ( <value> ) [PRIORITY <integer literal expression> ]

[예제]DCL buffer_1 BUFFER(10) BOOL;DCL buffer_2 BUFFER INT;DCL buffer_3 BUFFER CHAR(4);DCL message_1 BOOL := TRUE;DCL message_2 INT := 10;DCL message_3 CHAR(4) := 'abc\0'; :SEND buffer_1(message_1);SEND buffer_2(message_2) PRIORITY 5;SEND buffer_3(message_3) PRIORITY 2; :

[어의]

Buffer 에 대한 SEND 실행문은 buffer 메시지를 주어진 buffer 장소(location)로 보내어

저장한다. 해당 buffer 가 비어 있을 때(저장된 메시지의 개수가 buffer 길이보다 작을 때) 보내진

메시지는 buffer 장소에 주어진 우선순위에 따라 저장된다. 그러나 buffer 가 비어 있지 않을 때

(이미 buffer 길이 만큼의 메시지가 저장되어 있을 때) 메시지를 보내려는 프로세스는 buffer 가

비워질 때까지 delay 된다. 우선순위도 buffer 메시지와 함께 해당 buffer 장소에 저장되며

우선순위가 명시되지 않은 경우에 우선순위는 0 으로 간주한다.

[참고사항]

SEND 실행문에 의해 전송할 buffer 메시지는 상수나 tuple 값과 같은 리터럴 수식을 사용할

TTAS.KO-09.0035(2000. 7.)

108

Page 126: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

수 없으며 반드시 장소(location)의 이름이어야 한다.

[참조]

CHILL user's manual 6.18.3

Section 8.5, 8.5.1, 8.5.3, 8.5.4

6.17 RECEIVE-CASE 실행

6.17.1 개요

(국제 표준에 의거 내용 추가 예정)

6.17.2 Receive-시그널-case 실행

[구문]<receive signal case action> ::= RECEIVE CASE [ NONPERSISTENT [ EXCEPT <signal list> ] ] [ SET <instance location> ; ] ( <signal name> [IN <location name>] ) : <action statement list> {( <signal name> [IN <location name>] ) : <action statement list>}* [ELSE <action statement list>] ESAC

[예제]SYN _ready = 10; /* "ready"에 대한 signal 번호를 10 으로 정의 */SYN _wait = 20; /* "wait"에 대한 signal 번호를 20 으로 정의 */ . . .NEWMODE MSG = STRUCT (b BOOL, c CHAR[5]); . . .SIGNAL ready = (INT) TO p1;SIGNAL wait = (MSG); . . .DCL sender INSTANCE;DCL ready_msg INT;DCL wait_msg MSG;

RECEIVE CASE SET sender; (ready IN ready_msg): /* actions if receive the signal "ready" */ (wait IN wait_msg): /* actions if receive the signal "wait" */ ELSE /* actions if not receive the signal "ready" or "wait" */ESAC;

[어의]

시그널에 대한 이 RECEIVE CASE 실행문은 CASE 선택문에 기술된 시그널들 중 하나를

TTAS.KO-09.0035(2000. 7.)

109

Page 127: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

받는다. 만일 받을 시그널이 메시지 값을 가지고 있으면 시그널과 함께 메시지도 받는다. 또한

받을 시그널이 하나 이상 존재하면 가장 높은 우선순위를 가지고 있는 시그널이 선택된다. 이

실행문을 수행하는 프로세스는 RECEIVE CASE 절에 주어진 시그널들 중 하나를 받았을 때

주어진 해당 실행문들을 수행되게 되며, 시그널을 받지 못했을 경우 ELSE 절이 주어지지

않았으면 주어진 시그널들 중 하나를 받을 때까지 지연되지만, ELSE 절이 주어졌을 때는

시그널을 받지 못했을 경우에도 지연되지 않고 ELSE 절 다음에 주어진 실행문들을 수행한다.

단, ELSE 절이 주어진 경우 case 레이블 절에 기술된 시그널 명세에 해당되지 않는 시그널을

이미 받았다 하더라도 그 시그널은 삭제되지 않고 계속 큐에 남아 있게 된다.

SDL 의 시그널 큐 처리 방식을 충족시키기 위해, 표준 CHILL 의 언어 정의에 다음의 구문과

어의를 갖는 non-persistent 속성의 새로운 기능을 추가하였다. 즉, NONPERSISTENT 속성이

주어진 경우, receive case절에 기술된 시그널들 중 하나를 받았을 경우 해당 실행문들을

수행하지만, 받지 못했을 경우 이미 받은 시그널들은 모두 삭제되고, 그 실행중인 프로세스는

receive case 절에 기술된 signal 들 중 하나를 받을 때까지 delay 되며, NONPERSISTENT 절과

함께 EXCEPT 절이 주어지면 이미 받은 signal 들 중 EXCEPT 절 다음에 기술된 signal 들 이외의

signal 들만 삭제하고 그 프로세스는 receive case 절에 기술된 signal 들 중 하나를 받을 때까지

delay된다. 그러나 NONPERSISTENT 절이 주어진 경우에도 ELSE 절이 주어지면 프로세스는

delay 되지 않고 ELSE 절에 기술된 실행문들을 수행하게 된다.

또한 SET 절이 주어졌을 때 그 signal 메시지를 보낸 프로세스의 instance 값이 SET 절에

주어진 인스턴스 장소에 저장된다.

[참조]

CHILL user's manual 8.5, 8.5.1, 8.5.3, 6.18.2, 6.19.2

Section 8.6, 8.6.2, 8.6.3

6.17.3 Receive-버퍼-case 실행

[구문]<receive buffer case action> ::= RECEIVE CASE [SET <instance location> ;] ( <buffer location> [IN <location name>] ) : <action statement list> {( <buffer location> [IN <location name>] ) : <action statement list>}* [ELSE <action statement list>] ESAC

[예제]DCL buf_1 BUFFER INT;DCL buf_2 BUFFER CHAR[2];DCL buf_3 BUFFER CHAR;DCL sender INSTANCE;DCL msg_1 INT;

TTAS.KO-09.0035(2000. 7.)

110

Page 128: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

DCL msg_2 CHAR[2];DCL msg_3 CHAR;

RECEIVE CASE SET sender; (buf_1 IN msg_1): /* actions if receive value from buf_1 */ (buf_2 IN msg_2): /* actions if receive value from buf_2 */ (buf_3 IN msg_3): /* actions if receive value from buf_3 */ ELSE /* actions if not receive value from buf_1, buf_2, or buf_3 */ESAC;

[어의]

버퍼에 대한 이 RECEIVE CASE 실행문은 receive case절에 주어진 buffer 장소(location)

중의 하나로부터, 또는 그 buffer 장소들에 대해 buffer 메시지를 보내기 위해 delay 되어 있는

프로세스들 중 하나로부터 buffer 메시지를 받아온다. 만일 메시지를 받아 올 buffer 장소에 하나

이상의 메시지가 존재하면 가장 높은 우선순위를 가지고 있는 메시지가 선택된다. 이 실행문을

수행하는 프로세스는 주어진 buffer 장소들 중의 하나로부터 buffer 메시지를 받았을 때 해당

buffer 에 대한 receive case 절에 주어진 실행문들을 수행하게 되며, 메시지를 받지 못했을 경우

ELSE 절이 주어지지 않았으면 주어진 buffer 장소들에 대해 각각 delay 된다. 그러나 ELSE 절이

주어졌을 때는 받을 메시지가 없어도 delay 되지 않고 ELSE 절 다음에 주어진 실행문들을

수행한다. 또한 SET 절이 주어졌을 때 그 buffer 메시지를 보낸 프로세스의 instance 값이 SET

절에 주어진 instance 장소(location)에 저장된다.

[참고사항]

IN 절에 주어지는 장소(location)의 이름은 반드시 해당 buffer 의 메시지에 대한 모드와

동일한 모드로 선언되어야 한다.

[참조]

CHILL user's manual 6.19.3

Section 8.5, 8.5.1, 8.5.2, 8.5.3

6.18 CHILL Built-in Routine 호출

(국제 표준에 의거 내용 추가 예정)

6.18.1 CHILL 단순 Built-in Routine 호출

(국제 표준에 의거 내용 추가 예정)

TTAS.KO-09.0035(2000. 7.)

111

Page 129: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

6.18.2 CHILL 장소 Built-in Routine 호출

(국제 표준에 의거 내용 추가 예정)

6.18.3 CHILL 값 Built-in Routine 호출

[구문]<객체지향 CHILL value built-in routine call> ::= NUM ( <discrete expression> ) | PRED ( <discrete expression> ) | SUCC ( <discrete expression> ) | ABS ( <integer expression> ) | SIZE ( <static location> ) | <allocate value built-in routine call>

<CHILL action built-in routine call> ::= ASM ( <variable string literal> )

| <terminate action built-in routine call>

[예제]1) NUM

NEWMODE colorMode = SET(red,blue,white,black); DCL color colorMode; DCL i, j, k INT; DCL bo BOOL;

color := white; i := NUM(color); /* i = 2 */

j := NUM('C'); /* j = 67 */

bo := FALSE; k := NUM(bo); /* k = 0 */

2) PRED 와 SUCC

NEWMODE color = SET(red,blue,white,black); DCL k CHAR; DCL m BOOL; DCL q color;

k := PRED('C'); /* k = 'B' */

m := PRED(TRUE); /* m = FALSE */

q := SUCC(white); /* q = black */

TTAS.KO-09.0035(2000. 7.)

112

Page 130: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

3) ABS

DCL i INT;

i := -7; i := ABS(i); /* i = 7 */

4) SIZE

NEWMODE stMode = STRUCT(x INT; y CHAR; z INT); DCL i, j, k INT; DCL ch CHAR; DCL st stMode;

i := SIZE(i); /* i = 4 */

j := SIZE(ch); /* j = 1 */

k := SIZE(st); /* k = 12 : memory alignment 때문 */

6) ASM

ASM("movl $10, _a");

[어의]

CHILL_value_built-in_routine 은 값을 전달하는 CHILL defined built-in루틴들 중 하나를

호출한다. 그리고 CHILL_action_built-in_routine 은 그 자체로써 실행문(action statement)이

된다.

1. NUM : set 요소, 문자(character) 혹은 boolean 의 순서 값을 산출한다. set 은 0 부터

시작하고, boolean 에서 false 는 0 이고 true 는 1 이다.

2. PRED 와 SUCC : 정수(integer), 문자, 진위 혹은 set 요소 이전(PRED) 및 이후(SUCC)

의 값을 산출한다.

3. ABS : 정수의 절대값을 산출한다.

4. SIZE : 참조할 수 있는 정적 모드를 갖는 변수의 메모리에 저장되는 바이트 수를

산출한다.

5. ASM : 컴파일시, variable_string_literal 의 내용이 어셈블리 파일의 해당 위치에

출력된다.

[참고사항]

ASM만 실행문이고, 나머지는 값으로서 반환 값이 있다. 여기서 ASM 은 고급 언어와 저급

언어의 연계성을 위한 것이므로 사용자가 객체지향 CHILL 프로그램 작성 중에 어셈블리 언어를

사용할 수 있다.

TTAS.KO-09.0035(2000. 7.)

113

Page 131: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

[참조]

6.7 장, CHILL user's manual 5.2.16

6.18.4 동적 장소 처리 built-in routines

[구문]<allocate value built-in routine call> ::=

ALLOCATE ( <mode name> [ ( [ <constructor actual parameter list> ] ) ] )

<terminate action built-in routine call> ::= TERMINTE ( <reference expression> )

[예제]5) ALLOCATE 와 TERMINATE

DCL r REF INT;

r := ALLOCATE(INT); r-> := 5;

TERMINATE(r); /* r 은 NULL 값을 갖는다. */

[어의]

객체지향 CHILL_value_built-in_routine 은 값을 전달하는 객체지향 CHILL defined built-in

루틴들 중 하나를 호출한다. 그리고 객체지향 CHILL_action_built-in_routine 은 그 자체로써

실행문(<action statement>)이 된다.

1. ALLOCATE : 지정한 모드의 변수를 생성시키고, 생성된 변수의 address 를 return 한다.

2. TERMINATE : ALLOCATE에 의해 생성된 변수를 소멸 시킨다.

ALLOCATE 함수의 형 매개인자가 모레타 모드를 가지면, 처음에 모레타 원소 안의 모든

초기화가 문맥 순서대로 실행된다. 그에 붙어있는 constructor actual parameter list 가

공란이거나 명시되어 있으면, 형 매개인자의 해당 생성자가 새로 생성된 모레타 장소에

적용된다. 만일 그 매개인자가 타스크 모드이면, 새로 생성된 장소에 속한 타스크가 구동한다.

reference expression 이 리젼 혹은 타스크 장소 L 이면, 다음 단계가 순차적으로 실행된다:

1. 장소 L 이 닫혀진다. 즉 장소가 닫혀있다면, L 안의 공유(public) 가시성을 갖는 원소

프로시듀어의 외부 호출들이 더 이상 허용되지 않는다.

2. TERMINATE 를 수행하는 쓰레드는 L 이 empty 가 될 때까지 대기(waiting)한다.

3. 장소 L 의 모드가 소멸자 원소 프로시듀어를 가지면, 그 소멸자가 장소 L 에 적용된다.

[참고사항]

TERMINATE 만 실행문이고, 나머지는 값으로서 반환 값이 있다.

TTAS.KO-09.0035(2000. 7.)

114

Page 132: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

[참조]

6.7 장, CHILL user's manual 5.2.16

TTAS.KO-09.0035(2000. 7.)

115

Page 133: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

제 7 장 입출력

7.1 개요

객체지향 CHILL 프로그래밍 환경 자체가 UNIX 에서 개발되었으며 UNIX 의 각종 S/W

도구가 많고 S/W 기능이 풍부하므로 객체지향 CHILL 프로그래밍 환경에서 UNIX/C 환경을

이용할 수 있도록 객체지향 CHILL 컴파일러를 설계하였다. 또한 객체지향 CHILL 입출력은

Z.200 에서 정의하고 있으나 입출력 개념이 복잡하고 불편한데 비하여 UNIX 입출력 개념이

간단하면서도 기능이 충분하여 UNIX 입출력 기능을 그대로 이용하여 객체지향 CHILL 의

입출력 기능을 구현하였다. UNIX 표준 입출력을 이용하기 위해 입출력에 필요한 형의 정의,

변수의 선언이나 정의, 마크로(macro) 정의, 그리고 함수의 정의에 대해서 같은 의미의 객체지향

CHILL 으로 spec module을 작성하여 인터페이스로 이용하였다. UNIX 의 표준 입출력

라이브러리를 이용할 경우 사용자는 단지 표준 입출력을 위한 spec module 을 프로그램 내에서

spec module remote 로 사용하고, 실제 UNIX 입출력 함수 라이브러리와 객체지향 CHILL

프로그램을 컴파일하는 과정에서 링크되어 수행 파일을 만든다.

7.2 입출력 라이브러리의 이용

입출력 함수를 가지는 각 프로그램 파일에서는 입출력 기능을 사용하기 위해서 먼저

프로그램이 시작하는 부분에

SPEC MODULE REMOTE unixio ;가 있어야 한다. spec module remote 다음에는 파일 이름을 꼭 명시해야 하는데 이 파일 이름을

이용하여 컴파일러는 입출력 기능에 필요한 정보를 가지는 spec 파일을 찾는다. 이때 spec

파일을 찾는 방법은 아래의 순서로 찾는다.

1. 현재 원시 프로그램이 있는 디렉토리에서 spec 파일을 찾거나 찾고자 하는 spec 파일

이름에 경로가 주어진 경우 주어진 경로를 이용하여 찾는다.

2. 사용자가 chc 명령어에서 -I 옵션으로 주어진 디렉토리에서 찾는다.

3. standard inclusion 디렉토리에서 찾는데 unixio 일 경우 현재 호스트에서는

/usr/lib/chill/include/unixio.sp 를 찾는다.

stdio.h 에서 정의된 각 프로시듀어 및 정의문은 UNIX/C 에서의 표준 입출력과 꼭 같으므로

그 기능과 사용법은 C 에서와 동일 하다.

7.3 기본 입출력 기능

TTAS.KO-09.0035(2000. 7.)

116

Page 134: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

객체지향 CHILL 입출력은 UNIX 의 표준 입출력 라이브러리를 이용하며 사용자에게는 spec

module을 이용하여 사용 가능한 입출력 기능을 정의하고 프로그램 내에서 spec module remote

로 사용할 수 있다. 현재 표준 입출력을 제공하기 위한 spec module 의 내용은 아래와 같다.

unixio : SPEC MODULE NEWMODE FILE = STRUCT( ..... ); SYN EOF = -1; fopen : SPEC PROC(*) RETURNS(REF FILE) END; fclose : SPEC PROC(*) END; fscanf : SPEC PROC(*) END; scanf : SPEC PROC(*) END; fprintf : SPEC PROC(*) END; fflush : SPEC PROC(*) END; printf : SPEC PROC(*) END; putc : SPEC PROC(*) END; getc : SPEC PROC(*) RETURNS(CHAR) END; putchar : SPEC PROC(*) END; getchar : SPEC PROC(*) RETURNS(CHAR) END; feof : SPEC PROC(*) RETURNS(INT) END; lseek : SPEC PROC(*) END; fseek : SPEC PROC(*) RETURNS(INT) END; fread : SPEC PROC(*) RETURNS(INT) END; fwrite : SPEC PROC(*) RETURNS(INT) END; fgets : SPEC PROC(*) (REF CHAR) END; fputs : SPEC PROC(*) RETURNS(INT) END; ungetc : SPEC PROC(*) RETURNS(INT) END; malloc : SPEC PROC(*) RETURNS(REF CHAR) END; calloc : SPEC PROC(*) RETURNS(REF CHAR) END; free : SPEC PROC(*) END;

grant FILE, EOF, fopen, fclose, fscanf, fprintf, printf, scanf, fflush, getc, putc, getchar, putchar, feof, lseek, fseek, fread, fwrite, fgets, fputs, ungetc, malloc, calloc, free DIRECTLY PERVASIVE;END;

DIRECTIVE PERVASIVE 는 모듈리언(MODULE 혹은 REGION)에서의 가시성을 확장하여

프로그램의 어디에서나 그 이름을 사용할 수 있으므로 그 이름을 seize 할 필요가 없다. 이를

이용한 CHILL 프로그램의 예를 들면 다음과 같다.

SPEC MODULE REMOTE unixio;

main: MODULE DCL ch CHAR; DCL f1 REF FILE; f1 := fopen("t1", "r"); DO WHILE feof(f1) = 0; fscanf(f1, "%c", ->ch); putchar(ch); OD;

TTAS.KO-09.0035(2000. 7.)

117

Page 135: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

printf("This is Test\n");END;

위의 예제에서처럼 표준 입출력의 spec module을 이용하여 사용할 수 있으며, 이외의

UNIX/C 의 라이브러리를 사용하고자 할 경우 표준 입출력처럼 사용자가 필요한 라이브러리를

정의하고, spec module 를 작성하여 사용할 수 있다.

spec module이 다른 파일로 존재할 경우 위의 예제처럼 remote spec module 을 사용하고,

spec module 이 그 프로그램 내에 존재할 경우에는 프로그램의 구조문을 spec module 을

이용하면 된다.

TTAS.KO-09.0035(2000. 7.)

118

Page 136: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

제 8 장 예외 처리

(지원 않함)

TTAS.KO-09.0035(2000. 7.)

119

Page 137: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

제 9 장 시간 관리

(국제 표준과 달리 실행문에 추가 기능으로 수록되어 있음)

TTAS.KO-09.0035(2000. 7.)

120

Page 138: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

제 10 장 프로그램 구조

10.1 개요

[구문]<group> ::= <modulion> | <block>

<modulion> ::= <module>[9.3]

| <region>[9.4]

<block> ::= <process definition> | <procedure definition>[8.1.2]

| <begin-end block>[9.5]

[예제]1 m1:2 MODULE3 DCL a INT;4 p1: 5 PROC();6 DCL b INT;7 m2: 8 MODULE9 DCL c INT;10 END;11 END;12 p1();13 END;

[어의]

프로그램의 구조는 그룹(group)으로 구성되며 그룹은 크게 modulion 과 블럭으로 분류된다.

Modulion 은 다시 모듈과 리젼으로, 블럭은 프로시듀어, 프로세스, begin-end 블럭으로 세분된다

또한, 프로그램의 구조는 이름의 가시성과 장소(location)의 존재성(lifetime)을 결정한다.

가시성은 프로그램상에서 어떤 객체(object)의 이름을 볼 수 있는 부분을 말하며 존재성은 어떤

객체의 장소가 존재하는 프로그램의 부분을 말한다. 어떤 객체에 대하여 가시성과 존재성이

모두 존재할 때 그 이름의 범위(scope)라고 말하며 이는 그 이름을 사용할 수 있음을 의미한다.

존재성은 블럭에 의해서만 결정되며 모듈리언은 가시성만을 결정한다. 위의 예에서

c 의 lifetime : 5 - 11

c 의 visibility : 8 - 10

TTAS.KO-09.0035(2000. 7.)

121

Page 139: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

[참조]

CHILL user's manual 9.1, 9.2, 9.3

10. 2 도달 및 중첩

[구문] <begin-end body> ::= <data statement list> <action statement list>

<proc body> ::= <data statement list> <action statement list>

<process body> ::= <data statement list> <action statement list>

<module body> ::= {<data statement> | <visibility statement> | <region> | <spec region> }* <action statement list>

<region body> ::= { <data statement> | <visibility statement>}*

<spec module body> ::= { <quasi data statement> | <visibility statement> | <spec module> | <spec region>}*

<spec region body> ::= { <quasi data statement> | <visibility statement>}*

<data statement> ::= <declaration statement> | <definition statement>

<definition statement> ::= <synmode definition statement> | <newmode definition statement> | <synonym definition statement> | <procedure definition statement> | <process definition statement> | <signal definition statement> | <template>

[어의] 도달(reach)은 중첩된(nested) 내부 그룹을 제외한 그 그룹의 부분을 말하며, 중첩은 그룹안에

다른 그룹이 존재하는 것을 말한다. 10.1 의 예제에서 p1 의 도달은 5, 6, 7, 11 이 된다.

블럭의 도달에 들어갈 때는 그 블럭의 생성기간-한정 초기화가 실행이 되고, 도달-한정 초기화와

실행문들이 순서대로 실행된다. 또한 모듈리언의 도달에 들어갈 때는 도달-한정 초기화와

TTAS.KO-09.0035(2000. 7.)

122

Page 140: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

실행문들이 순서대로 실행이 된다.

[정적 특성]그룹이 명세(spec) 모듈이나 명세 리젼일 경우의 도달(reach)은 가사(quasi) 도달이라 한다.

10.3 BEGIN-END 블럭

[구문]<begin-end block> ::= [<name>:] BEGIN { <declaration statement> | <definition statement> }* { <action statement> }* END [<name>] ;

[예제]test: PROC(); DCL a INT; /* action statement list */ tmp1: BEGIN DCL tmp_1 ARRAY(1:1000) INT; /* action statement list */ END; /* action statement list */ tmp2: BEGIN DCL tmp_2 ARRAY(1:20000) INT; /* action statement list */ END; /* action statement list */END test;

[어의]

Begin-end 블럭은 프로그램의 구조상 블럭의 자격이며 수행 측면에 있어서 실행문의

자격이므로 프로그램 상에서는 실행부 내에 존재하여야 한다. Begin-end 블럭은 블럭으로서

변수를 선언하거나 이름을 정의하여서 그 블럭 내에서 사용할 수 있으며 이름의 범위(scope)는

블럭의 성질을 그대로 따른다. Begin-end 블럭에서 선언한 변수나 정의된 이름은 begin-end

블럭을 만날 경우 할당 되었다가 블럭을 빠져 나올 때 회수된다. 그러나 실제에 있어서는 begin-

end 블럭에 대한 메모리는 begin-end 블럭을 둘러싸고 있는 프로시듀어나 프로세서 혹은 main

모듈이 수행 될 때 할당하는데 여러 개의 begin-end 블럭이 존재할 경우 그 중 가장 큰 메모리를

요구하는 begin-end 블럭의 메모리만큼 할당하여 그 메모리를 서로 공유하도록 되어 있으며

begin-end 블럭을 둘러싸고 있는 블럭을 빠져나갈 때 begin-end 블럭과 함께 그 블럭의

메모리가 회수된다. Begin-end 블럭은 일시적으로 많은 메모리가 필요할 때 주로 사용될 수

있다. 위의 예에서 test 프로시듀어의 메모리 크기는 SIZE(a+tmp_2)이며 tmp_1 과 tmp_2 는

TTAS.KO-09.0035(2000. 7.)

123

Page 141: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

서로 공용으로 사용된다.

[참고 사항]

객체지향 CHILL 에서 Begin-end 블럭은 지원되지 않는다.

[참조]

CHILL user's manual 9.2.1, 9.3

10.4 프로시듀어 정의문

[구문]<procedure definition statement> ::= <name> : <procedure definition> [<name>] ;

<procedure definition> ::= PROC ( <formal parameter list>[7.3] ) [ [RETURNS] (<mode>[3.3] ) ] [<procedure attribute list>] ; <procedure body> END

<procedure attribute list> ::= GENERAL | SIMPLE [<simple component procedure attribute list>] [<assertion part>]

<simple component procedure attribute list> ::= CONSTR | DESTR | INCOMPLETE | REIMPLEMENT [FINAL] | FINAL

<assertion part> ::= PRE ( <boolean expression> ) | POST ( <boolean expression> )

[예제]main:MODULE DCL i INT := 2, j INT := 3, k INT;

add:PROC(x INT, y INT) RETURNS(INT); RETURN(x+y); END add;

k := add(i,j); /* k = 5 */END main;

TTAS.KO-09.0035(2000. 7.)

124

Page 142: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

[어의]

크기가 큰 프로그램을 개발하는 효율적인 방법은 적당한 크기로 프로그램을 분리하는

것이다. 이러한 요구 조건에 부합되는 기능으로 프로그램을 top-down 방식으로 구성할 수 있는

프로시듀어가 있다. 프로시듀어는 매개인자들을 통해 호출하는 프로시듀어로부터 데이타를

받아 수행한다. 또한 그 수행 결과로서 값을 전달하기도 한다. 프로시듀어는 블럭 이므로, 전역

(global) 변수를 통해 프로시듀어 바깥과 통신할 수 있다. 프로시듀어내에서 지역 변수와 이름이

다른 모든 전역 변수에 접근할 수 있으나, 지역 변수와 같은 이름의 전역 변수는 접근 할 수 없다.

프로시듀어는 블럭이나 복합 실행문으로 구성될 수 있으며, 프로시듀어 내에서 변수의 선언부는

실행부보다 먼저 선언해야 한다.

프로시듀어가 모레타 모드안에 정의되어 있을 때, 이를 원소(component) 프로시듀어라

부른다. 모레타 모드안에 정의된 프로시듀어는 simple 속성을 가지며, 다음과 같이 명시될 수

있다:

1. CONSTR 로 명시된 생성자(constructor) 원소 프로시듀어는 모레타 장소가 정적 혹은

동적으로 생성될 때 그 장소를 자동적으로 초기화(initialization)를 하기위해 사용된다.

2. DESTR 로 명시된 소멸자(destructor) 원소 프로시듀어는 모레타 장소가 정적 혹은

동적으로 소멸될 때 그 장소를 자동적으로 최종화(finalization)를 하기위해 사용된다.

3. INCOMPLETE 로 명시된 불완전(incomplete) 원소 프로시듀어는 명세만을 갖고

본체를 갖진 않는다.

4. REIMPLEMENT 로 명시된 재구현(reimplement) 원소 프로시듀어는 새로운 본체와

가능하면 새로운 단언(assertion)을 갖는다.

5. FINAL 로 명시된 최종(final) 원소 프로시듀어는 그가 속한 모레타 모드가 파생된 하위

모레타 모드에서 재정의 혹은 재구현될 수 없다.

단언(assertion) 부분의 각기 다른 종류가 simple 속성의 원소 프로시듀어를 위해 다음과

같이 명시된다:

1. PRE 로 명시된 전위조건(precondition) 단언부는 해당 원소 프로시듀어의 본체가

수행하기 전에 자동적으로 점검된다.

2. POST 로 명시된 후위조건(postcondition) 단언부는 해당 원소 프로시듀어의 본체가

수행한 후에 그리고 원래 호출한 곳으로의 반환(return) 전에 자동적으로 점검된다.

오직 (생성자, 소멸자 속성을 갖는 원소 프로시듀어를 제외한) simple 속성과 general 속성의

프로시듀어는 재귀적(recursive)으로 정의될 수 있다.

[정적 특성]

IN 속성을 갖거나 속성이 따로 정의되어 있지 않는 형식 매개변수는 (실 매개변수의 값을

복사한) call-by-value 방식의 변수 이름이고, LOC 속성을 갖는 형식 매개변수는 (실

매개변수의 address 를 복사한) call-by-reference 방식의 매개 변수 이름이다.

TTAS.KO-09.0035(2000. 7.)

125

Page 143: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

모레타 모드 M 의 원소 프로시듀어는 다음과 같이 정의된 완전한 후위조건 CPM 을 갖는다:

1. 만약 M 이 기저 모드를 갖지 않는다면, CPM 은 단지 후위조건만을 점검한다.

2. M 이 기저 모드 B 를 갖는다면, CPM 은 CPB 를 먼저 점검하고 나중에 후위 조건 CPM

을 점검한다.

[정적 조건]

프로시듀어 정의문내에 리젼이나 타스크 장소를 선언할 수 없다.

프로시듀어 정의문내에 모레타 모드를 선언할 수 없다.

P1 과 P2 가 원소 프로시듀어 혹은 원소 프로세스 명세/정의-문이면, P1 과 P2 는 다음과

같을 때 match된다:

1. P1 과 P2 는 같은 종류이다.

2. P1 과 P2 는 같은 이름을 갖는다.

3. P1 과 P2 의 형 매개인자 리스트는 구문적으로 그리고 어의적으로 일치(equivalent)

한다.

4. P1 과 P2 의 결과 모드는 구문적으로 그리고 어의적으로 일치한다.

P 가 원소 프로시듀어 혹은 원소 프로세스일 때, 다음 조건을 만족할 때 PB는 PS와

correspond 하다고 말한다:

1. PB는 PS와 match 한다.

2. PS와 PB의 예외 리스트가 구문적으로 그리고 어의적으로 일치한다.

3. PS와 PB의 속성 리스트가 구문적으로 그리고 어의적으로 일치한다.

두 개의 프로시듀어 P1 과 P2 는 다음 조건을 만족시킬 때 conform 하다고 말한다:

1. 두 프로시듀어의 매개인자 개수가 같고, 대응하는 매개인자의 모드 이름이 서로

conform 해야 한다.

2. 그 둘은 같은 결과 모드를 갖고 결과 모드의 이름이 서로 conform 해야 한다. 그렇지

않다면, 결과 모드를 갖지 말아야 한다.

[참조]

CHILL user's manual 7.1

10.5 프로세스 정의문

[구문]SYN _syn_name = <integer literal expression> ; . . .<process definition> ::= <name> : PROCESS ( <formal parameter list> ) ; { <declaration statement> | <definition statement> }* { <action statement> }*

TTAS.KO-09.0035(2000. 7.)

126

Page 144: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

END [ <name> ] ;

[예제]SYN _assign = 10; /* 프로세스 정의 번호 = 10 */ . . .assign: PROCESS(value INT IN; loc INT LOC); DCL time INT := 0;

DO FOR EVER; IF time = 10 THEN time := 0; loc := value; CONTINUE ready; /* "ready"는 event 모드의 location 임 */ FI; time := time + 1; OD;END assign;

[어의]

가상 최외곽(Imaginary outermost) 프로세스를 제외한 객체지향 CHILL 의 모든 프로세스는

프로세스 정의문에 의해 반드시 정의되어야 한다. 프로세스 정의문은 병렬로 수행될 동작을

기술하는 일련의 실행문들의 집합으로 지역 변수들에 대한 장소(location) 및 프로시듀어 선언

등과 같은 그 프로세스 내에서만 접근 가능한 지역적인 대상물(object)들을 포함할 수 있다. 또한

매개변수의 전달은 프로시듀어의 경우와 유사하나 INOUT, 또는 OUT 의 특성을 가지는

매개변수의 전달은 허용되지 않는다.

프로세스 정의문은 BLOCK 자격을 가지며, 리젼으로 선언된 영역 내에 존재할 수 없고, 또한

imaginary outermost 프로세스 이외의 또 다른 어떠한 BLOCK 자격을 가지는 구조 내에도

존재할 수 없다. 즉 프로세스 정의문은 begin-end block, 또 다른 프로세스 정의문내에 존재할

수 없다.

[참고사항]

SYN 정의문으로 정의된 프로세스 이름 앞에 "_"를 붙인 이름은 그 프로세스 정의에 대한

고유 번호를 프로그래머가 부여할 때 사용되는 것으로 프로세스 정의에 의한 signal 전달

시에 이용되는 정보로서 분산 시스템에서는 반드시 필요한 정보이다. 일반적으로,

프로세스 정의에 대한 고유 번호 부여 문장들은 다른 하나의 파일로 구성하여 사용하는

것이 바람직하다.

프로시듀어 정의문내에 리젼이나 타스크 장소를 선언할 수 없다.

프로시듀어 정의문 내에 모레타 모드를 선언할 수 없다.

[참조]

TTAS.KO-09.0035(2000. 7.)

127

Page 145: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

CHILL user's manual 8.1.2Section 8.1.1

10.6 모듈

[구문]<module> ::= <name> : MODULE { <declaration statement> | <definition statement> | <visibility statement> }* { <action statement> }* END [<name>] ;

[예제]stackDef: MODULE /* example of data abstraction */ SEIZE element; GRANT push, pop; DCL stackTop := 1; DCL stack ARRAY(1:100) element;

push: PROC(x element); stack(stackTop) := x; stackTop := stackTop + 1; END push;

pop: PROC() RETURNS(element); stackTop := stackTop -1; RETURN(stack(stackTop)); END pop;END stackDef;

[어의]

모듈은 용도에 따라 가상 최외각(imaginary outermost) 프로세스의 실행부를 의미하는 main

모듈과 지협 모듈(local module)로 구분할 수 있다. 지협 모듈은 프로그램에 있어서 실행상의

측면으로는 실행문의 자격을 가지며 프로그램의 구조적인 측면에 있어서는 이름의 가시성을

결정한다. 이러한 모듈은 프로그램상에서 데이타 추상화(data abstraction)와 데이타 수집(data

collection) 등의 기능을 제공한다. 또한 모듈은 리젼과 함께 분리 컴파일의 단위로 사용되며 이때

파일을 둘러싸고 있는 모듈/리젼은 main 모듈과 이웃 하도록 프로그램이 구성되어야 하며

실행부를 포함해서는 안된다. 또한 모듈/리젼은 중첩 정의될 수 없다. 즉 모듈이나 리젼내에

모듈/리젼 정의를 할 수 없다.

[참조]

CHILL user's manual 9.2.2, 9.3.2

TTAS.KO-09.0035(2000. 7.)

128

Page 146: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

10.7 리젼

[구문]<region> ::= <name> : REGION { <declaration statement> | <definition statement> | <visibility statement> }* END [name] ;

[예제]boolean_semaphore: REGION GRANT acquire, release; DCL nobusy EVENT; DCL busy BOOL := FALSE;

acquire:: PROC(); DO WHILE busy; busy := TRUE; DELEY nobusy; OD; END acquire;

release: PROC(); busy := FALSE; CONTINUE nobusy; END release;END boolean_semaphore;

[어의]

리젼은 리젼으로 선언된 영역 내에서 선언된 변수들에 대한 장소(location)나 프로시듀어

등과 같은 데이타 object 들에 대한 상호 배타적인 접근(mutual exclusive access)에 대한 기능을

제공한다. 리젼은 모듈과 동일한 가시성을 가지고 있어 리젼 영역 내에서 선언된 데이타 object

들은 GRANT 되어야만 리젼 밖에서 접근할 수 있다. 리젼 영역 내에서 정의되고 그 리젼 밖으로

GRANT된 프로시듀어를 "임계 프로시듀어"라 칭하며, 이 임계 프로시듀어를 통해서만 리젼

영역 내부에서 선언된 장소(location)들에 대한 접근이 가능하다. 또한 이 임계 프로시듀어는 한

순간에 하나씩만 수행될 수 있다. 그러므로 리젼 영역 내에서 정의된 프로시듀어들 중 하나가 한

프로세스에 의해 호출되어 수행 중에 있을 때 또 다른 프로세스가 그 리젼내의 프로시듀어를

다시 호출할 경우, 그 리젼 영역이 이미 사용 중에 있으므로 그 프로세스는 수행이 일시적으로

보류되게 되며, 먼저 리젼 영역을 사용하던 프로세스가 그 리젼의 사용이 끝났을 때 수행이

보류되었던 프로세스가 다시 그 리젼을 점유하여 보류되었던 수행을 계속하게 된다.

리젼은 imaginary outermost 프로세스 이외의 다른 블럭이나 프로시듀어, 그리고 프로세스

정의문내에는 존재할 수 없다. 또한 한 임계 프로시듀어내에서 또 다른 임계 프로시듀어의

호출은 허용되지 않는다.

리젼은 여러 개의 프로세스들 사이에서 공용하는 자원에 대하여 mutual exclusion 을 만들어

TTAS.KO-09.0035(2000. 7.)

129

Page 147: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

공용 자원에 대한 비정상적인 사용을 방지한다. 프로세스들 사이에서 공용으로 사용되는 자원에

대해 한 순간에 단지 하나의 프로세스에게만 할당하고 나머지 사용하기를 원하는 다른

프로세스들은 delay 되었다가 현재 사용하고 있는 프로세스의 사용이 끝나면 delay된

프로세스들 중에서 하나의 프로세스가 선택되어 할당받게 된다. 따라서 프로세스들이 공용하는

(특히 update 하는) 자원은 리젼내에서 선언하거나 정의되어야 하며 이러한 공용 자원에 대한

사용은 리젼내에 선언된 프로시듀어를 통해서 만이 가능하다. 이외에도 리젼은 모듈의 특성을

그대로 가지므로 grant 나 seize 등의 가시성 제어와 분리 컴파일의 단위로 사용할 수 있다.

[참고사항]

임계(critical) 프로시듀어는 재귀적으로 사용할 수 없다.

임계 프로시듀어 안에서 다른 임계 프로시듀어를 호출할 수 없다.

리젼내에 모듈이나 리젼을 정의 할 수 없다.

리젼내에 프로세스를 정의 할 수 없다.

리젼은 블럭(프로시듀어, 프로세스, begin-end) 내에서 정의될 수 없다.

리젼은 데이타의 정의와 선언 및 그리고 프로시듀어의 정의만을 포함할 수 있다.

리젼내에 선언된 DCL 장소는 리젼 밖으로 grant될 수 없다.

[참조]

CHILL user's manual 8.3.1, 8.3.2

10.8 프로그램

[구문]<program> ::= <name> : MODULE { <definition statement> | <declaration statement> | <region> }* { <action statement> | <module> }* END [ <name> ] ;

[예제]Main:MODULE DCL a INT; DCL b INT;

main: PROC( ) a := a + b; END main;END Main;

[어의]

프로그램은 모듈과 리젼으로 구성된다. 프로그램의 구조가 간단한 경우, 하나의 main 모듈

TTAS.KO-09.0035(2000. 7.)

130

Page 148: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

로 구성하며 모듈의 내부는 선언부, 정의부, 실행부로 구성한다. Main 모듈내의 main

프로시듀어 실행부가 실행부를 가지는 첫번째 모듈의 실행문을 프로그램의 시작으로 보고 (

모듈 이전에 실행문이 있으면 그 실행문이 이 프로그램의 시작이 된다) 그 모듈의 실행부를

수행한 후 다음으로 실행부를 가지는 모듈의 실행부를 차례로 수행한다. 그러나, 프로그램이

main 모듈과 이웃하는 모듈을 가졌을 경우 main 모듈과 이웃하는 모듈 내에 있는 실행부는

수행되지 않으므로 이러한 모듈은 선언부나 정의부만 가져야 한다. 객체지향 CHILL 에서 main

모듈은 가상 최외곽 프로세서의 실행부로 해석한다.

[참고사항]

프로그램의 시작은 Main 모듈내의 main 프로시듀어 실행문에서 시작하므로 프로그램의

outer most 모듈에 Main 모듈과 main 프로시듀어가 반드시 존재해야 한다.

중첩 모듈이나 중첩 리젼을 정의할 수 없다.

[참조]

CHILL user's manual 9.1

10.9 장소 할당 및 생존-기간

모든 장소(location)는 각각에 대해서 존재성(lifetime)을 가진다. 블럭의 도달에서 선언된

장소의 존재성은 그 블럭 또는 그 블럭에서 호출하는 프로시듀어내에 프로그램의 제어(control)

가 존재하는 시간과 동일하다. 모듈리언(modulion)내에서 선언된 장소의 존재성은 그 modulion

을 둘러 싸고 있는 블럭의 도달에서 선언된 장소의 존재성과 동일하다. 프로그램상의 모든

이름들은 프로그램의 구조에 의해 가시성 제약을 받게 된다. 각 이름에 대해서 그 이름의 정의

혹은 선언된 곳(defining occurrence)과 사용되는 곳(applied occurrence)이 존재한다. 같은

가시성 내에서는 하나의 이름에 대해서는 오직 하나의 defining occurrence 를 가져야 한다.

그러나 구조체 모드(structure mode)의 항목(field) 이름은 예외로 취급되며 이 때에는 단지

구조체 모드를 가지는 장소 이름이 서로 다르면 된다. 가시성을 제어하는 프로그램의

구조문으로는 modulion 과 블럭이 있으며 블럭에서는 존재성과 가시성이 동일하다. 그러나

모듈리언에 있어서는 모듈리언 내외부 간에 가시성이 존재하지 않는다. 이를 위해 modulion 에

있어서는 외부와의 통신을 위해서는 grant 와 seize 문을 이용할 수 있다. Grant 문과 seize 문은

존재성이 존재하는 범위 내에서 modulion 으로 제약 되어진 가시성 만을 확장할 수 있게 하므로

블럭 상호간에는 이름의 grant 와 seize 는 할 수 없다.

[참조]

CHILL user's manual 9.3.1, 9.3.2

TTAS.KO-09.0035(2000. 7.)

131

Page 149: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

10.10 구간식 프로그래밍 구조

10.10.1 원격 구간

[구문]<remote module> ::= MODULE REMOTE <source text designator>

<remote spec module> ::= SPEC MODULE REMOTE <source text designator>

<remote region> ::= REGION REMOTE <source text designator>

<remote spec region> ::= SPEC REGION REMOTE <source text designator>

<source text designator> ::= <file name>

[예제]MODULE REMOTE stack;

SPEC MODULE REMOTE unixio;

[어의]

Remote 기능은 여러 개의 파일로 구성된 프로그램의 작성을 용이하게 해주는 프로그램

구조이며 REMOTE 모듈/리젼, REMOTE SPEC 모듈/리젼이 있다. 컴파일 단위가 파일이므로

source_text_designator 는 포함해야 할 파일명의 어두(prefix)를 지정하며, REMOTE 모듈/

리젼일 경우 주어진 파일 이름에 어미 ".ch"를 가지는 파일을 그 위치에 삽입하고 REMOTE

SPEC 모듈/리젼일 경우 주어진 파일이름에 어미 ".sp"를 가지는 파일을 그 위치에 삽입 된다.

따라서 지정된 파일의 내용을 그 위치에 그대로 작성한 것과 효과가 같다.

[참고 사항]

객체지향 CHILL 컴파일러는 REMOTE 기능과 같은 기능으로 UNIX/C 에서 사용하는

#include 기능을 포함하고 있는데 처리 속도가 REMOTE 기능보다 빠르므로 컴파일해야 할

프로그램의 크기가 클 경우 더 효율적이다.

[참조]

CHILL Z.200, 1984, 8.10.1

TTAS.KO-09.0035(2000. 7.)

132

Page 150: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

10.10.2 명세 모듈, 명세 리젼 및 문맥

[구문]<spec module> ::= [ <name> : ] SPEC MODULE <spec module body> END [<name>]

<spec region> ::= [ <name> : ] SPEC REGION <spec region body> END [<name>]

[예제]stacktop: SPEC MODULE SEIZE element; GRANT pop, push; pop: SPEC PROC( ) RETURNS (element) END; push: SPEC PROC(element) END;END;

main: MODULE GRANT element; SEIZE pop, push; SYN maxCell = 7; NEWMODE element = STRUCT(a INT; b INT); DCL e element; DCL i INT; DO FOR i := 1 TO maxCell; e := [i, i*i]; push(e); OD; DO FOR i := 1 TO maxCell; e := pop(); OD;END;

[어의]

Spec 모듈이나 spec 리젼은 piecewise 프로그래밍을 위해 필요한 이름들에 대한 정보를

제공한다. 따라서 다른 파일에 정의한 이름을 사용하고자 할 때 그 이름에 대한 컴파일 정보를

spec 모듈에서 제공해 줌으로써 파일 사이에 교환되는 이름에 대한 정보를 알 수 있도록 하는

프로그램 구조이다. Spec 모듈이나 spec 리젼에서 제공되는 이름들은 실제 정의되는 이름이

아니라 실제 정의나 선언은 다른 파일에 있어서 컴파일을 할 수 있도록 필요한 정보만을

제공한다. 예제 프로그램에서 spec 모듈 "stackop"는 main 모듈을 컴파일하기 위해 필요한

정보를 제공한다. Main 모듈에서는 push 와 pop 을 SEIZE 하여 사용하고 spec 모듈을 보고 실제

pop 과 push 는 다른 파일에 존재하고 그 이름들을 GRANT 하고 있음을 알 수 있다.

[참조]

TTAS.KO-09.0035(2000. 7.)

133

Page 151: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

CHILL Z.200, 1984, 8.10.2

10.10.3 Quasi 정의문

(지원 않함)

10.10.4 Quasi 정의 발생자와 정의 발생자 간의 매칭

(지원 않함)

10.11 포괄성

많은 알고리즘들은 원소 모드가 다른 유사한 구조의 데이타 항목들로 문제를 해결한다.

포괄성은 형 매개인자 정의에 실 매개인자 모드를 치환하는 프로그램 전략으로 그런 알고리즘을

구현하는 수단을 제공한다.

[구문]<template> ::= <generic module template> | <generic region template> | <generic procedure template> | <generic process template> | <generic module mode template> | <generic region mode template> | <generic task mode template>

<generic module template> ::= [<context list>] [<name> :] <generic part> MODULE [BODY] <module body> END [<name>] ;

<generic region template> ::= [<context list>] [<name> :] <generic part> REGION [BODY] <region body> END [<name>] ;

<generic procedure template> ::= [<name> :] <generic part> <procedure definition> [<name>] ;

<generic process template> ::= [<name> :] <generic part> <procedure definition> [<name>] ;

TTAS.KO-09.0035(2000. 7.)

134

Page 152: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

<generic module mode template> ::= <generic part> <module mode specification>

<generic region mode template> ::= <generic part> <region mode specification>

<generic task mode template> ::= <generic part> <task mode specification>

<generic part> ::= GENERIC {<seize statement>}* <formal generic parameter list>

<formal generic parameter list> ::= {<formal generic parameter>}*

<formal generic parameter> ::= SYN <formal generic synonym list> ; | MODE <formal generic mode list> ; | PROC <formal generic procedure spec> ;

<formal generic synonym list> ::= <formal generic synonym> { , <formal generic synonym> }*

<formal generic mode list> ::= <formal generic mode> { , <formal generic mode> }*

<formal generic synonym> ::= <name> = {<mode> | ANY_DISCRETE | ANY_INT | ANY_REAL}

<formal generic mode> ::= <name> = <formal generic mode indication>

<formal generic mode indication> ::= ANY | ANY_ASSIGN | ANY_DISCRETE | ANY_INT | ANY_REAL | <moreta mode name>

<formal generic procedure spec> ::= <name> ( [<formal parameter list>] ) [<result spec>]

<generic module instantiation> ::= <name> : MODULE = NEW <generic module name> <seize statement>* <actual generic parameter list> END [<name>] ;

<generic region instantiation> ::= <name> : REGION = NEW <generic region name> <seize statement>* <actual generic parameter list> END [<name>] ;

<generic procedure instantiation> ::=

TTAS.KO-09.0035(2000. 7.)

135

Page 153: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

<name> : PROC = NEW <generic procedure name> <seize statement>* <actual generic parameter list> END [<name>] ;

<generic process instantiation> ::= <name> : PROCESS = NEW <generic process name> <seize statement>* <actual generic parameter list> END [<name>] ;

<generic moreta mode instantiation> ::= NEW <generic moreta mode name> <seize statement>* <actual generic parameter list> END [<name>] ;

<actual generic parameter list> ::= <actual generic parameter> { <actual generic parameter> }*

<actual generic parameter> ::= <synonym definition statement> | <synmode definition statement> | <newmode definition statement> | <actual generic procedure>

<actual generic procedure> ::= PROC <name> = <procedure name> ;

[어의]

단어 unit 은 모듈, 리젼, 프로시듀어, 프로세스 혹은 모레타 모드를 의미한다. 포괄적 unit 은

포괄 부를 갖는 unit 이다. 포괄 unit 은 비포괄적 unit 들이 포괄적 사례화라 불리는 과정에 의해

얻어질 수 있는 형판(template)이다. 포괄 unit 은 형 포괄 매개인자를 얻을 수 있다. 포괄

사례화를 하는 동안 포괄 unit 이 복사되고 전체 unit 을 통해 형 포괄 매개인자가 실 포괄

매개인자로 대치된다. 이런 대치 후에 포괄 부가 사라지고 비포괄 부가 얻어진다.

[정적 특성]

형 포괄 synonym 은 다음의 두 가지 특성을 갖는다:

1. 포괄 unit 안에 형 포괄 매개인자를 갖는 특성

2. 대응되는 실 포괄 매개인자가 허용해야만 하는 특성

mode: 형 특성: non-value 특성을 갖지 않아야 함

실 특성: 실 포괄 매개인자의 값이 형 모드일 것

ANY_DISCRETE: 형 특성: :=, 관계 연산자, PRED,SUCC,NUM,SIZE 가 가능

실 특성: 불연속(discrete) 모드의 실 매개인자

ANY_INT: 형 특성: ANY_DISCRETE, +, -, *, /, MOD, ABS, REM 이 가능

실 특성: 정수 모드의 실 매개인자

ANY_REAL: 형 특성: ANY_ASSIGN, 관계 연산자, +, -, *, / 이 가능

TTAS.KO-09.0035(2000. 7.)

136

Page 154: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

실 특성: 실수 모드의 실 매개인자

형 포괄 모드(mode)는 다음의 두 가지 특성을 갖는다:

1. 포괄 unit 안에 형 포괄 매개인자가 갖는 특성

2. 대응하는 실 포괄 매개인자를 허용해야 하는 특성

ANY: 형 특성: SIZE; 참조 모드가 아닌 장소나 매개인자의 모드로

사용 불가

실 특성: 어떤 모드도 가능

ANY_ASSIGN: 형 특성: :=, 비교 연산자, SIZE 가 가능

실 특성: 치환 가능한 모드 가능

ANY_DISCRETE: 형 특성: :=, 관계 연산자, PRED, SUCC, NUM, SIZE

실 특성: 불연속 모드 가능

ANY_INT: 형 특성: ANY_DISCRETE, +, -, *, /, MOD, ABS, REM 이 가능

실 특성: 정수 모드의 값 기능

ANY_REAL: 형 특성: ANY_ASSIGN, 비교 연산자, +, -, *, / 가 가능

실 특성: 실수 모드의 값 가능

모레타 모드 이름: 형 특성: 모레타 모드의 이름 가능

실 특성: 모레타 모드 이름 혹은 파생된 하위 모레타 모드 이름

형 포괄 프로시듀어는 다음의 두 가지 특성을 갖는다:

1. 포괄 unit 안에서 형 포괄 매개인자가 갖는 특성

2. 대응되는 실 포괄 매개인자가 허용해야 할 다음의 특성들:

형 특성: 주어진 형 포괄 프로시듀어의 명세에 따름

실 특성: 주어진 형 포괄 프로시듀어 명세가 실 포괄

프로시듀어의 클래스와 호환적이어야 함

[정적 조건]

포괄 모레타 모드 형판을 포함한 파생에 대해 다음과 같은 제약을 갖는다: 만약 기저가

형판이면, 이의 파생 개체도 형판이어야 한다. 기저가 형판이 아니면, 그 파생 개체는 형판이 될

수도 있다.

포괄 사례화에서 사례화될 포괄 unit 의 각 형 포괄 매개인자에 대해 정확히 하나의 실 포괄

매개인자가 있어야만 한다.

형판에 대해 중첩(nesting)의 제약은 다음 표를 따른다. 형판이 발생하는 표는 어느

그룹안에서 발생할 수 있는 가를 나타낸다.

below

Group

right

Instant

module region procedure process module

mode

region

mode

task

mode

begin-end No No Yes No No No No

TTAS.KO-09.0035(2000. 7.)

137

Page 155: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

procedure No No Yes No No No No

process No No Yes No No No No

module No Yes Yes Yes Yes Yes Yes

region No No Yes No Yes No No

module mode N.A N.A Yes Yes No No No

region mode N.A N.A Yes No No No No

task mode N.A N.A Yes No No No No

program Yes Yes N.A N.A No No No

where, N.A(Not Applicable): 기존 CHILL 중첩 규칙에 위배

위의 표는 기존 CHILL 의 형판과 개체간의 다음 대응에 기반을 둔다. 왼쪽 줄(column)의

형판에 대해, 대응하는 오른쪽 줄 개체의 중첩 가능성을 나타낸다:

포괄 모듈 형판 프로시듀어 정의문

포괄 리젼 형판 리젼

포괄 프로시듀어 형판 프로시듀어 정의문

포괄 프로세스 형판 프로세스 정의문

포괄 모듈 모드 형판 프로시듀어 정의문

포괄 리젼 모드 형판 리젼

포괄 타스크 모드 형판 프로세스 정의문

TTAS.KO-09.0035(2000. 7.)

138

Page 156: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

제 11 장 병행 실행

11.1 쓰레드 및 이의 정의

프로세스 혹은 타스크를 쓰레드라 한다. 프로세스는 병행성의 기본 단위로써 프로세스 내부

의 실행은 순차성을 가지며 다른 프로세스들과 병행적으로 실행될 수 있다. 프로세스의 행위는 프로세스 정의문을 통해 서술되는데 프로세스 내부의 지역 데이타와 순차적으로 실행되는 일련

의 실행문으로 구성되어 있다.

프로세스는 start 수식/실행문에 의해 생성되는데 이때를 활성 상태라 하고 다른 프로세스들

과 같이 병행적으로 실행된다. 생성된 프로세스는 프로세스 정의문의 프로세스 이름이 가리키는 정의문의 활성을 뜻한다. 프로세스 정의문에 의한 프로세스 생성은 무한대로 생성될 수 있으며 이때 프로세스 생성의 순서는 임의적이다. 각 프로세스는 instance-장소의 값에 의해 독자적으로 식별될 수 있는데, 이 식별 값은 start 수식의 결과나 프로세스 실행문내의 this 연산자 값을 통해 얻을 수 있다. 프로세스 생성시 이 프로세스에 국한한 지역 데이타가 생성되는데 static 속성을 갖는 데이타는 전역 장소에 생성되고 이 데이타를 정의한 프로세스 정의문에 의해 생성된 여러 프로세스들이 이 static 장소를 공유할 수 있다. 프로세스들을 관장하는 가상-최외각의 프로세스

는 시스템에서 암시적으로 생성시킴을 가정한다. 프로세스 생성시 프로세스 정의문의 형-매개

인자에 start 수식의 실-매개인자 값이 전달된다.

프로세스는 stop-실행문의 수행이나 프로세스 정의문 본체의 끝에 도달하거나 프로세스 본

체내의 끝에 명시된 처리기를 수행하면서 종료된다. 가상-최외각의 프로세스는 다른 모든 프로

세스들이 종료되었을 때만 종료된다.

프로세스의 실행 상태는 활성 상태와 지연 상태로 구분된다. 활성 프로세스를 지연 프로세

스로 전환하는 것을 "지연"이라 하고, 지연 프로세스를 활성 프로세스로 전환하는 것을 "재활

성"이라 한다. 이에 대해 ITU-T 객체지향 CHILL을 이용한 예제를 살펴보면 다음과 같다[11]:

01 test:MODULE /*가상-최바깥의 프로세스에 접속*/ 02 DCL p_id INSTANCE, 03 i INT; /*전역 변수 선언*/ 04 05 p:PROCESS(j INT); /*j: 형-매개인자*/ 06 DCL k INT; 07 k := INT(THIS); 08 END p; 09 10 p_id := START p(10); /*10: 실-매개인자*/ 11 i := INT(p_id); /*모드 변환*/ 12 END main;[그림 11-1] CHILL의 프로세스 생성 및 병행 실행

TTAS.KO-09.0035(2000. 7.)

139

Page 157: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

위 [그림 11-1]의 예제에 대한 설명은 다음과 같다:

(07 : 11) - p 프로세스 내부 실행문이 먼저 실행될지 test 모듈의 치환문이 먼저 실행될지 결정될 수 없다.

(07) - THIS는 해당 프로세스 정의문에 의해 프로세스가 생성될 때 단일한 프로세스 식별 값을 제공한다.

(10) - START 실행문은 프로세스 정의문 이름을 호출하는 형태로 프로세스를 생성시킨

다.

타스크는 일련의 연속적인 문장들의 순차적인 수행인데, 이들은 다른 쓰레드들과 함께 병행

적으로 수행된다. 타스크의 행위는 타스크 모드 정의에 의해 서술된다.

타스크는 타스크 모드 장소의 생성부와 초기화에 의해 생성된다. 이들 타스크는 타스크 모

드 장소가 소멸되면 종료된다.

CHILL 언어 수준에서 하나의 쓰레드는 항상 “활성”이거나 “지연”과 같은 두 상태 중 하나이

다. 활성에서 지연으로의 천이는 쓰레드의 지연이라 말하고, 지연에서 활성으로의 천이는 쓰레

드의 재-활성이라 말한다.

11.2 상호 배제 및 임계

11.2.1 개요

리젼 및 리젼 장소는 바깥으로 가시성을 부여한 extra-임계 프로시듀어들을 통해 임계지역

내의 데이타 장소를 병행 쓰레드들이 상호-배제적으로 간접 접근하도록 하는 상호배제 동기화

접근을 제공하는 기능이다(즉 임계지역내의 데이타를 외부에서 직접 접근할 수 없음). 임계지역

내의 데이타 장소 초기화는 가상-최외각의 프로세스가 그 장소를 직접 접근하는 경우에만 해당

된다.

임계 지역내에 프로시듀어가 정의되고 그 프로시듀어가 (외부에 가시성을 보여주는) grant-

정의문에 의해 임계지역 바깥에서 접근할 수 있는 가시성을 부여받았다면, 그 프로시듀어를 extra-임계 프로시듀어라 한다. (외부의 가시성을 부여받지 못한 프로시듀어는 intra-임계 프로시

듀어라 함.)

리젼 모드내에 정의된 원소 프로시듀어가 public 가시성을 갖으면, 이를 임계 원소 프로시듀

어라 한다.

임계지역내의 병행적 실행을 방지하기 위해 다음과 같은 경우에 잠금 상태가 된다:

임계지역안에 들어갈때(즉 extra-임계 프로시듀어가 호출될때)

임계지역내에서 잠금된 지연 프로세스가 재활성될때

리젼 장소는 다음과 같을 때 (병행 실행을 방지하기 위해) 잠금 상태가 된다:

리젼 장소에 돌입(enter)했을 때

TTAS.KO-09.0035(2000. 7.)

140

Page 158: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

리젼 장소의 임계(critical) 원소 프로시듀어가 호출되었을 때

리젼 장소안의 지연된 쓰레드가 재활성될 때

리젼은 다음과 같은 경우에 해제 상태가 된다:

도달-한정(reach-bound) 초기화를 수행한 후 임계지역을 떠날 때

extra-임계 프로시듀어가 반환될 때

extra-임계 프로시듀어가 실행중인 프로세스를 지연 상태로 전환시킬 때 - 동적으로 중

첩된 임계 프로시듀어의 호출인 경우에 가장 최근의 잠금 임계지역이 해제된다.

extra-임계 프로시듀어를 수행중인 프로세스가 이를 종료했을 때 - 동적으로 중첩된 임

계 프로시듀어의 호출인 경우에 그 프로세스에 의해 잠금된 모든 임계 지역들이 해제된

다.

리젼 장소는 다음과 같을 때 (자유 상태가 되기 위해) 해제 상태가 된다:

도달-한정 초기화가 수행되고 난 후 리젼 장소가 남아 있을 때

임계 원소 프로시듀어가 반환되었을 때

임계 원소 프로시듀어가 실행중인 쓰레드를 지연 상태로 천이하는 실행문을 수행했을 때(11.3절 참조). 임계 원소 프로시듀어들을 동적으로 중첩 호출하였을 때, 가장 최근에 잠긴 리젼 장소만이 해제된다.

임계 원소 프로시듀어를 실행하는 쓰레드가 종료되었을 때. 임계 원소 프로시듀어들을 동적으로 중첩 호출하였을 때, 쓰레드에 의해 잠긴 모든 리젼 장소들은 해제될 것이다.

임계지역이 잠금 상태일 때 한 프로세스가 extra-임계 프로시듀어를 호출하거나 임계지역내

의 지연 프로시듀어가 재활성이 된다면, 그 임계지역이 해제될 때까지 그 프로세스는 지연된다.

임계지역이 해제되고 동시에 임계지역에 의해 지연된 프로세스들이나 extra-임계 프로시듀

어를 호출하려는 프로세스들이 존재한다면, 오직 한 프로세스만이 그 임계지역을 점유할 수 있

는데 이의 스케쥴링은 구현 시스템에 따른다.

임계 프로시듀어의 제약 사항은 다음과 같다:

임계지역내에서 grant되는 extra-임계 프로시듀어들은 non-general 특성을 갖는다.

intra-임계 프로시듀어들은 simple 혹은 in-line 특성만을 가질 수 있다.

여기서 general 프로시듀어란 프로시듀어 모드에 의해 생성된 프로시듀어 장소에 프로시듀

어 주소 값을 치환할 수 있는 특성을 지칭하고, simple 프로시듀어란 그 반대다.

11.2.2 임계성

임계 지역내에 선언된 (원소) 장소는 임계 (원소) 프로시듀어의 호출이나 reach-bound

초기화에 의해서만 유일하게 접근된다는 것을 정적으로 점검하기 위해서는 다음과 같은 정적

문맥 조건들을 만족해야 한다.

적당한 실행문들(치환문, 프로시듀어 호출, send-문, result-문, 등등)의 regionality

요구사항들을 만족해야 한다.

TTAS.KO-09.0035(2000. 7.)

141

Page 159: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

intra-임계 (원소) 프로시듀어는 general 특성을 가지지 않는다.

임계 (원소) 프로시듀어들은 general 특성과 recursive 특성을 갖지 않는다.

임계 원소 프로시듀어들은 inline 특성을 갖지 않는다.

임의의 장소와 프로시듀어 호출은 intra-임계성 혹은 extra-임계성과 같은 임계성을 지니고,

임의의 값은 intra-임계성, extra-임계성, nil 과 같은 임계성을 가진다.

11.3 쓰레드의 지연

활성 상태인 쓰레드는 다음과 같은 수식/실행문을 만나면 지연 상태로 전환된다:

delay 실행문 : 활성 쓰레드를 지연

delay-case 실행문 : 활성 쓰레드를 지연시킨 후 재활성시 선택적으로 일련의 실행문을 수행

receive-시그널 수식 : 외부의 시그널을 수신하여 그 속의 데이타 결과를 채택

receive-시그널-case 실행문 : 외부의 시그널을 선택적으로 수신

receive-버퍼 수식 : 외부의 버퍼를 수신하여 그 속의 데이타 결과를 채택

receive-버퍼-case 실행문 : 외부의 버퍼를 선택적으로 수신

send-버퍼 실행문 : 보내고자 할 버퍼 장소가 꽉 차 있으면 send하는 프로세스는 지연

상태로 전환

임계 장소의 원소 프로시듀어에 대한 호출 실행문

그리고 프로세스가 임계 프로시듀어에 의해 지연될 때, 그 임계지역은 다시 해제 상태가 된

다. 지연된 프로세스가 재활성화될 때 그 프로세스의 동적 문맥이 다시 복구된다. 이때 그 프로

세스가 임계지역을 점유하고자 시도하지만 다른 프로세스가 점유해버리면 다시 지연 상태로 전

환된다(중요: 조건부 동기화의 효율적 수행과 관련).

11.4 쓰레드의 재활성

프로세스는 실-시간 요구에 의해 지연되었다가 재활성이 되거나 다른 프로세스가 다음과 같

은 수식 혹은 실행문을 수행함으로써 재활성될 수 있다:

continue 실행문 : delay 실행문에 의해 지연된 프로세스를 재활성

send-시그널 실행문 : 외부로 시그널을 전송

send-버퍼 실행문 : 외부로 버퍼를 전송

receive-버퍼 수식 혹은 receive-버퍼-case 실행문 : 전송할 버퍼가 비어있을 때

임계 장소의 해제(release)

위의 첫번째 경우에서 임계지역을 점유하고 있는 한 프로세스(p)가 다른 프로세스(q)를 재활

성시킬 때, 그 시점에서 p 프로세스는 활성을 유지하지만 q 프로세스를 임계지역에서 해제하지 않는다. (즉 p 프로세스가 반환될 때에야 q 프로세스가 해제될 수 있다.)

TTAS.KO-09.0035(2000. 7.)

142

Page 160: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

11.5 시그널 정의문

[구문]SYN _<signal name> = <integer literal expression> ;

<signal definition statement> ::= SIGNAL <signal name> [= ( <mode> )] [TO <process name> | IN <processor name>] ;

[예제]SYN _ready = 10; /* "ready"에 대한 signal 번호를 10 으로 정의 */SYN _wait = 20; /* "wait"에 대한 signal 번호를 20 으로 정의 */ . . .SYN ASMP = H'001F; /* ASMP processor# : 001FHEX */ . . .NEWMODE MSG = STRUCT (b BOOL, c CHAR(5)); . . .SIGNAL ready = (INT) TO p1;SIGNAL wait = (MSG) IN ASMP;

[어의]

사용할 모든 signal 은 반드시 SIGNAL 정의문에 의해 선언되어야 한다. Signal 정의문에

기술되는 모드는 그 시그널에 의해 전송될 메시지 값의 모드를 정의하는 것이며, TO 절 다음에

기술되는 process_name 은 그 시그널을 받을 수 있는 프로세스를 명시하는 것으로 프로세스의

정의 시 주어진 프로세스에 대한 정의 명이다. 또한 IN 절 다음에 기술되는 processor_name 은

signal 을 받을 프로세서의 번호를 기술하는 것으로 분산 시스템에서 프로세서를 지정하여 해당

프로세서의 특정 프로세스 정의로 signal 을 전송하기 위해 signal 을 받을 프로세서를 정의하는

것이다. 이 프로세스 정의 명과 프로세서 번호는 signal 의 SEND 실행문을 수행할 때 사용된다.

[참고사항]

Signal 정의문에서 메시지의 모드를 기술하는 mode에는 하나의 모드만 올 수 있다.

SYN 정의문으로 정의된 signal 이름 앞에 "_"를 붙인 이름은 그 signal 정의에 대한 고유

번호를 프로그래머가 부여할 때 사용되는 것으로 signal 전달 시에 반드시 필요한 정보이다.

일반적으로, signal 정의에 대한 고유 번호 부여 문장들은 다른 하나의 파일로 구성하여

사용하는 것이 바람직하다.

[참조]

CHILL user's manual 8.5, 8.5.1, 8.5.3, 6.18.2, 6.19.2

Section 8.6, 8.6.2, 8.6.3

TTAS.KO-09.0035(2000. 7.)

143

Page 161: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

제 12 장 일반 어의 특성

12.1 모드 규칙

객체지향 CHILL 언어는 형(type)을 갖는 언어이다. 모든 객체지향 CHILL 객체(object)들은

정의된 특성을 갖고 있다. 따라서 변수들은 각 객체 특성의 모드를 가지며, 값에는 각각의

특성에 따라 클래스(class)로 분류할 수 있다. 그리고 대부분의 변수와 값의 정적인 특성은

모드와 클래스로 정의되어 진다. 그러므로 변수와 값이 프로그램에서 사용될 때 그들의 모드와

클래스에 따라 모드 검사 규칙이 적용된다.

모드와 클래스의 관점에서 볼 때, 한 연산이 가능한지는 모드-클래스 검사 규칙에 따른다.

이들의 규칙들은 명백하지만, 일부 몇 가지는 언어 설계자의 결정에 따라 확정되는 것들이 있다.

예를 들면,

DCL i INT(0:15);

i := 40;

위 예제는 언어의 표현상 적합하게 표현되어 있다. 그러나 원칙적으론 실행 시 "Out of

Range" 오류가 발생해야 하지만, ETRI/객체지향 CHILL 컴파일 시스템에서는 range 로 선언한

변수에 대해서는 위에 대해 동적 모드 점검을 하지 않는다. 다음 장에서 모드의 호환성에 대하여

자세히 보기로 하자.

12.1.1 모드와 클래스의 특성

12.1.1.1 읽기-전용 특성

(지원 않함)

12.1.1.2 매개화 모드

현재 매개화(parameterized) 모드가 적용되는 범주는 다음과 같다:

비트-스트링 모드

문자-스트링 모드 : 정적 문자-슬라이스 모드만 지원. 즉 슬라이스의 색인이 오직

상수여야 함.

12.1.1.3 참조 특성

TTAS.KO-09.0035(2000. 7.)

144

Page 162: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

한 모드가 참조 모드이거나 또는 그 모드의 구성 원소가 참조 모드이면 참조의 특성을

갖는다. 다시 말하면,

자신이 참조 모드일 때

배열 모드의 원소가 참조 모드일 때

구조체 모드의 필드 중에 적어도 하나가 참조 모드를 가질 때

참조 특성을 갖는다고 한다.

12.1.1.4 태그 매개화 특성

(지원 않함)

12.1.1.5 Non-value 특성

한 모드가 수식이나 기본 값에 적용될 수 없으면, 그 모드는 non-value 특성을 갖는다고 한다.

non-value 특성을 갖는 모드의 적용 범주는 다음과 같다:

이벤트 모드, 버퍼 모드

배열 모드의 원소 모드가 non-value 특성을 갖는 모드

구조체 모드 내의 필드 모드가 적어도 하나의 non-value 특성을 갖는 모드

not_assignable 또는 abstract 특성을 갖는 모레타 모드

적어도 하나의 non-value 특성의 원소를 갖는 모레타 모드

12.1.1.6 Root 모드

(지원 않함)

12.1.1.7 결과 클래스

12.1.2 모드와 클래스간의 관계

12.1.2.1 개요

객체지향 CHILL 프로그램에서 모드-클래스 호환성 점검은 다음과 같이 세 가지로 구분할 수

있다.

1) 두개의 장소에서 각각의 모드가 비교되는 경우

2) 하나의 장소와 하나의 값에서 각각의 모드와 클래스가 비교되는 경우

3) 두개의 값에서 각각의 클래스가 비교되는 경우

TTAS.KO-09.0035(2000. 7.)

145

Page 163: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

12.1.2.2 모드의 동치 관계

두개의 장소가 연산될 때 호환성의 조건은 두 장소의 모드의 호환성이 있고, NEWMODE 로

정의된 모드일 경우 정의된 모드의 이름이 같고 메모리상에 저장된 표현이 같아야 한다. call-by-

reference 매개 변수 전달과 같은 경우에 해당한다. 예를 들면,

SYNMODE m1 = STRUCT(a INT; b BOOL), m2 = STRUCT(a INT; b BOOL), m3 = STRUCT(a INT; b BOOL);

DCL x m1, y m2, z m3;

p1: PROC(fp m1 LOC); ... END p1;p2: PROC(fp m2 LOC); ... END p2;p3: PROC(fp m3 LOC); ... END p3;

CALL p1(x); /* 사용 가능 */CALL p1(y); /* 사용 불가능 */CALL p1(z); /* 사용 불가능 */CALL p2(x); /* 사용 불가능 */CALL p2(y); /* 사용 가능 */CALL p2(z); /* 사용 불가능 */CALL p3(x); /* 사용 가능 */CALL p3(y); /* 사용 가능 */CALL p3(z); /* 사용 가능 */

12.1.2.3 similar 관계

각 모드들은 다음 모드들과 호환성이 있다.

정수 모드는 정수 모드, 비트-스트링 모드를 기반으로 하는 range 모드, 그리고 정수

리터럴 등과 호환성이 있다. 예를 들면 INT, RANGE(0:7), INT(10:100)는 가능하지만, INT

로 선언된 변수는 4바이트이고, RANGE(0:7)이나 INT(10:100)를 모드로 갖는 변수는 1

바이트 변수 이므로, 4바이트를 1바이트에 치환할 때 truncation 오류가 발생한다.SYNMODE Byte = INT(-128:127), Short = INT(-32768:32767), Word = INT;DCL ByteData Byte, /*1 바이트*/ ShortData Short, /*2 바이트*/ WordData Word; /*4 바이트*/

ByteData := 100;ShortData := 1_000;

TTAS.KO-09.0035(2000. 7.)

146

Page 164: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

WordData := 1_000_000;WordData := WordData + WordData;ByteData := ByteData + ByteData; /*가능하나, truncation 발생*/ShortData := WordData; /*가능하나, truncation 발생*/ByteData := B'1010'; /*가능하나, ByteData 의 값은 10 으로 치환*/

진위 모드는 진위 모드, 길이가 1 인 비트-스트링 모드, 기저 모드가 진위인 range 모드,

그리고 진위 리터럴 등과 호환성이 있다.DCL BoolData BOOL := TRUE, RangeData RANGE(FALSE:TRUE) := FALSE; BoolData := RangeData;RangeData := B'1'; /*RangeData 의 값은 TRUE 임*/

문자 모드는 문자 모드, 길이가 1 인 문자-스트링 모드, 기저 모드가 문자 모드인 range

모드, 그리고 문자 리터럴 등과 호환이 가능하다.DCL CharData CHAR, RangeData RANGE('a':'z'), CharstrData CHAR(1) := 'A', CharstrData1 CHAR(8) := '1234567\0';

CharData := 'a';RangeData := CharData;CharData := CharstrData;CharstrData1(3) := CharData;

세트 모드는 이름이 같은 세트 모드, 다른 모듈에 있는 내부 표현이 같은 세트 모드를

seize 하여 볼 수 있는 경우에 호환이 가능하다.m_1: MODULE SYNMODE SetMode1 = SET (mon,tue,wed,thr,fri,sat);

m_2: MODULE SEIZE SetMode1; SYNMODE SetMode2 = SET (mon,tue,wed,thr,fri,sat); DCL SetData1 SetMode1, SetData2 SetMode2;

SetData1 := tue; SetData2 := wed; END m_2;END m_1;

범위(range) 모드는 기본 모드가 같은 모든 범위 모드와 호환이 가능하다. 범위 모드로

선언된 장소들간의 데이타 치환 시 변수의 크기에 따라 truncation 이 발생할 수 있다.DCL RangeData1 RANGE(1:100) := 50, /*1바이트 정수*/ RangeData2 RANGE(1:1000) := 500; /*2바이트 정수*/

RangeData2 := RangeData1 + RangeData2;RangeData1 := RangeData1 + RangeData2; /*truncation 발생*/

집합 모드는 같은 세트 모드에 대한 집합 모드와 호환성이 있다. 집합 멤버 값을 다른

형으로 바꾸는 모드 변환이 가능하다.

참조 모드는 모드가 같은 모든 참조 모드, NULL 등과 호환이 가능하다. 임의의 값이

TTAS.KO-09.0035(2000. 7.)

147

Page 165: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

변수에 저장될 때 참조 변수의 모드는 그 참조된 모드와 일치하여야 한다.SYNMODE RefMode1 = REF INT, RefMode2 = REF CHAR, RefMode3 = REF INT(1:127);DCL RefData1 RefMode1, RefData2 RefMode2, RefData3 RefMode3, Data INT := 1000,

RefData1 := ->Data;RefData1-> := Data;RefData2 := RefData1;

두개의 참조 값이 비교될 때, 참조되는 장소의 모드는 호환성이 있어야 한다. 참조 값이

장소에 저장될 때, 참조되는 장소의 모드와 장소의 참조된 모드와 호환성이 있어야 한다.

예를 들면,DCL a INT, b BOOL, p REF INT;

p := ->a; /* ->a 가 INT-참조 클래스를 갖고, p 의 참조된 모드가 READ INT 인 경우 사용 가능 */

프로시듀어 모드로 선언된 장소는 블럭 깊이가 0 에서 선언되고, 같은 개수의 매개인자,

같은 매개인자 모드 (및 결과 모드가 있다면 같은 결과 모드)를 갖는 프로시듀어 리터럴

또는 해당 모드로 선언된 장소와 NULL 값들이 호환 가능하다.

인스탄스 모드로 선언된 장소는 인스탄스 값이나 NULL 값과 호환이 가능하다.

이벤트 모드는 길이가 없는 이벤트 모드 또는 같은 길이를 갖는 이벤트 모드간에 호환이

가능하다.

버퍼 모드는 길이가 없는 버퍼 모드 또는 같은 길이 및 버퍼 요소 모드를 갖는 모든 버퍼

모드와 호환이 가능하다.

비트-스트링 모드는 길이가 같은 모든 비트-스트링 모드, 정수 모드와 호환이 가능하다.

그러나 길이가 같지 않을 때는 truncation 이 발생한다. 즉 비트-스트링 리터럴 혹은 비트

-스트링 모드를 가지는 변수에 대해서는 길이가 서로 다른 비트-스트링 리터럴 혹은 비트-

스트링 모드를 가지는 변수들과 연산할 수 없다. 길이가 같은 두개의 비트 슬라이스나

비트 스트링은 서로 호환이 가능하다. 길이가 같은 비트 슬라이스와 비트 스트링은 서로

호환이 가능하다. 비트 스트링을 다른 모드로 변환하는 것이 가능하다. 다른 모드를 비트-

스트링으로 변환도 가능하다.DCL Byte BIT[8], Short BIT[16];

Byte := B'11'; /*길이가 다르므로 오류 발생*/Short := Byte; /*길이가 다르므로 오류 발생*/

또한 비트 슬라이스는 장소 또는 값의 자격으로서 실행문내에서만 사용이 가능하다.

그러나 포인터를 이용해서 비트 슬라이스를 접근할 수 없다.DCL BitString BIT[10],

TTAS.KO-09.0035(2000. 7.)

148

Page 166: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

Ptr1 REF BIT[10], Ptr2 REF BIT[3];

BitString[1:3] := BitString[3:5];Ptr1 := ->BitString;Ptr2 := ->BitString[3:5]; /*사용 불가*/BitString[5:7] := Ptr1->[2:4]; /*사용 불가*/

문자-스트링 모드는 길이가 같은 모든 문자-스트링 모드와 호환이 가능하다. 문자-스트링

모드로 선언된 장소에서 각 요소의 모드는 문자 모드이므로, 문자와 호환이 가능하다.DCL CharStr1 CHAR[5], CharStr2 CHAR[8], CharStr3 CHAR[5];

CharStr1 := 'abcd\0';CharStr3 := CharStr1;CharStr2[2] := 'x';CharStr2 := CharStr1; /*길이가 다르므로 오류 발생*/

가변 길이의 문자-스트링은 C 에서의 스트링과 의미적으로 같으며, 임의의 스트링 길이를

가지는 문자-스트링에 대한 참조를 가진다. 가변 길이의 문자-스트링에 대한 호환성을

정의하면 다음과 같다. 단, 그 크기의 다름에 대한 메모리의 파괴는 사용자가 책임져야

한다.(1) 모두 가변 길이의 스트링 모드일 경우(2) 문자 모드와 가변 길이의 문자-스트링의 요소(3) 문자 모드의 1 차원 배열에 대한 참조 모드와 가변 길이의 문자-스트링 모드(4) 문자-스트링 모드의 참조 모드와 가변 길이의 문자-스트링 모드

배열 모드는 자신의 요소 모드와 같은 모든 모드와 호환이 가능하다.DCL StrData1 CHAR[5] := 'ABCD\0', StrData2 CHAR[7] := NULL, ArrayData1 ARRAY[1:100] INT, StructData1 STRUCT(d1 BOOL; d2 INT) := [TRUE, 1_000], ArrayData2 REF INT;

ArrayData1[1] := StructData1.d2;ArrayData2 := ADDR(StructData1.d2);StructData1.d2 := ArrayData2->;StrData1 := StrData2; /*길이가 같지않아 오류 발생*/

구조체의 필드들은 각각의 모드와 같은 변수들과 호환이 가능하다. 각각의 모드 검사

규칙은 위에서 열거한 바에 따른다.

두 모레타 모드가 synonymous 하다면(SYNMODE 로 연결 정의) 이들은 similar 하다. 즉

similar 하게 호환이 가능하다.

12.1.2.4 v-equivalent 관계

(지원 않함)

TTAS.KO-09.0035(2000. 7.)

149

Page 167: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

12.1.2.5 equivalent 관계

(지원 않함)

12.1.2.6 l-equivalent 관계

(지원 않함)

12.1.2.7 필드에 대한 equivalent 와 l-equivalent 관계

(지원 않함)

12.1.2.8 배치에 대한 equivalent 관계

(지원 않함)

12.1.2.9 alike 관계

(지원 않함)

12.1.2.10 필드에 대한 alike 관계

(지원 않함)

12.1.2.11 novelty bound 관계

(지원 않함)

12.1.2.12 읽기-호환성 관계

(지원 않함)

12.1.2.13 동적 equivalent 와 읽기-호환성 관계

(지원 않함)

TTAS.KO-09.0035(2000. 7.)

150

Page 168: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

12.1.2.14 restrictable 관계

(지원 않함)

12.1.2.15 모드와 클래스간의 호환성

장소와 값의 비교는 주로 값을 임의의 장소에 저장할 때 발생하며 다음과 같은 곳에서

발생한다.

1) 치환문

2) 매개변수 전달(call by value)

3) send signal

4) 반복문

5) 치환 조건이 존재하는 경우

이 경우는 두개의 장소에 대한 호환성에 비해 다소 제약성이 적은 모드 점검 규칙이

적용된다. 예를 들면,NEWMODE Dollar, Pound = INT;DCL d Dollar, p Pound;

p := 100; d := 200;p := d; /* 오류 */p := NUM(d);

12.1.2.16 클래스들간의 호환성

두개의 값들간의 비교는 주로 연산자를 갖는 수식에서 발생한다. (IF e1 = e2 THEN ....) 이

경우 치환 시 모드 점검 규칙이 적용된다.

12.1.2.17 모레타 모드 이름들간의 확증

두 모레타 모드 이름 A 와 B 가 다음의 조건을 만족할 때 서로 확증(conform)한다고 말한다:

그들이 모레타 참조 모드인 "REF MM" 형태를 가지고, 계층 구조상에서 같은 경로상에

있을 때,

혹은 A 와 B 가 SYNMODE 로 연결 정의되어 있을 때.

TTAS.KO-09.0035(2000. 7.)

151

Page 169: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

12.2 가시성 및 이름 결합

(국제 표준에 의거 내용 추가 예정)

12.2.1 가시성의 정도

(국제 표준에 의거 내용 추가 예정)

12.2.2 가시성 조건 및 이름 결합

(국제 표준에 의거 내용 추가 예정)

12.2.3 도달 안의 가시성

(국제 표준에 의거 내용 추가 예정)

12.2.3.1 개요

(국제 표준에 의거 내용 추가 예정)

12.2.3.2 가시성 정의문

(국제 표준에 의거 내용 추가 예정)

12.2.3.3 Prefix 재명칭 절

(국제 표준에 의거 내용 추가 예정)

12.2.3.4 GRANT 정의문

[구문]<grant statement> ::= GRANT <name list> ; | GRANT ALL ; | GRANT <name list> DIRECTLY PERVASIVE

[예제]m1:MODULE

TTAS.KO-09.0035(2000. 7.)

152

Page 170: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

DCL a, b INT; m2:MODULE GRANT c; DCL c, d INT; END m2; b1:BEGIN DCL g, h INT; m3:MODULE DCL i, j INT; GRANT i; END m3; b2:BEGIN DCL k, l INT; END b2; END b1;END m1;

[어의]

Grant 문에서 정의한 이름들은 현재 modulion 을 둘러싸고 있는 modulion 의 reach 에서

가시성이 존재한다. 이때 선언하지 않은 이름이나 정의하지 않은 이름을 grant할 경우, 또는

grant 한 이름과 같은 이름이 grant 하는 modulion 의 바깥에서 가시성이 존재할 경우 같은

이름이 둘이상이므로 프로그램상의 오류가 된다. GRANT ALL 은 modulion 내부에서 선언된

모든 이름들을 GRANT 하는 기능이며 [DIRECTLY] PERVASIVE 로 GRANT 하는 이름은 그

이름이 존재하는 범위 내에서 modulion 의 reach 에 관계없이 가시성을 존재하는 성질을 갖는다.

그러나 DIRECTLY PERVASIVE 일 경우 GRANT 하는 이름과 같은 이름이 국부적으로 선언되어

사용할 수 없으나 PERVASIVE 로 GRANT 할 경우 국부적으로 같은 이름이 선언될 수 있으며

국부적으로 선언된 이름이 그 이름의 존재 영역에서는 우선적으로 binding된다. 위의 예에서 각

reach 내에서 가시성이 존재하는 이름은 다음과 같다. m1 : a, b, c m2 : c, d b1 : a, b, c, g, h, i m3 : i, j b2 : a, b, c, g, h, i, k, l

[참고 사항]

DIRECTLY PERVASIVE 로 GRANT 할 경우 사용자들이 이러한 정보를 잘 알고 있어야 하고

컴파일러가 이름을 결합(binding)하기 위한 처리 시간이 많이 증가하므로 되도록 사용하지

않는 것이 좋다.

[참조]

CHILL user's manual 9.3.2.4

TTAS.KO-09.0035(2000. 7.)

153

Page 171: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

12.2.3.5 SEIZE 정의문

[구문]<seize statement> ::= SEIZE <name list> ;

[예제]m1:MODULE DCL a, b INT; m2:MODULE GRANT c; SEIZE a, b; DCL c, d INT; END m2; b1:BEGIN DCL g, h INT; m3:MODULE DCL i, j INT; GRANT i; SEIZE a, c; END m3; b2:BEGIN DCL k, l INT; END b2; END b1;END m1;

[어의]

Seize 문에서 정의된 이름들은 seize 한 modulion 에서 사용할 수 있다. 바깥 modulion 에서

seize 하고자 하는 이름이 바깥 modulion 의 reach 내에서 가시성이 존재하지 않거나 seize 한

이름과 같은 이름이 seize 하는 modulion 내에서 가시성이 존재할 경우 프로그램상의 오류가

된다. 위의 예에서 각 modulion 의 reach 내에서 가시성이 존재하는 이름들은 다음과 같다. m1 : a, b, c m2 : a, b, c, d b1 : a, b, c, g, h, i m3 : a, c, i, j b2 : a, b, c, g, h, i, k, l

[참조]

CHILL user's manual 9.3.2.4

12.2.3.6 PUBLIC 정의문

[구문]<public statement> ::=

TTAS.KO-09.0035(2000. 7.)

154

Page 172: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

PUBLIC <name list> [<friend clause>] ;

<friend clause> ::= TO <friend name list>

<friend name list> ::= <friend name> { , <friend name> }*

<friend name> ::= <modulion or moreta mode name> [ ! <friend procedure or process name> ]

<friend procedure or process name> ::= <procedure name> [ ( <parameter list> ) [[RETURNS] ( <result spec> ) ]]] | <process name>

[예제]SYNMODE m1 = MODULE SPEC DCL a, b INT; putAB: SPEC PROC(INT, INT) END; PUBLIC putAB;END m1;SYNMODE m1 = MODULE BODY putAB: PROC(x INT, y INT); a := x; b := y; END putAB;END m1;DCL ml m1;CALL ml.putAB(10, 20);/* ml.a = 10 및 ml.b = 20 이 치환됨. */

[어의]

모레타 모드 정의문내에서만 정의되는 PUBLIC 정의문에서 명시한 이름들은 현재 모레타

모드를 둘러싸고 있는 도달(reach) 내에서 가시성이 존재한다. 이때 명시하지 않은 이름을 객체

바깥에서 접근할 경우 프로그램상의 오류가 된다.

12.2.4 세트 요소 이름의 가시성

(국제 표준에 의거 내용 추가 예정)

12.2.5 필드 이름의 가시성

(국제 표준에 의거 내용 추가 예정)

12.3 CASE 선택

TTAS.KO-09.0035(2000. 7.)

155

Page 173: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

(국제 표준에 의거 내용 추가 예정)

12.4 어의 범위의 정의 및 종합

(국제 표준에 의거 내용 추가 예정)

12.4.1 이름

(국제 표준에 의거 내용 추가 예정)

12.4.2 장소

(국제 표준에 의거 내용 추가 예정)

12.4.3 수식 및 값

(국제 표준에 의거 내용 추가 예정)

12.4.4 기타 어의 범위

(국제 표준에 의거 내용 추가 예정)

TTAS.KO-09.0035(2000. 7.)

156

Page 174: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

부록.1 주요 용어 정의

영 문 용 어번호 한 글 용 어 용 어 정 의

(약어) 전문 분야abstract moreta mode 적어도 하나의 구현이 없는 원소 프로시듀어를 가진 모레타

모드 (일종의 클래스)를 지칭함. 상속할 수 있지만 이의 장소 (객체)를 만들 수는 없다.

추상적 모레타 모드객체지향 CHILLaction 수행될 수 있는 프로그램 실행, 치환 행위, 호출 행위 등이

있다.실행CHILL

applied occurrence 프로그램상에 정의된 어떤 이름이 사용되는 곳에서 나타남. 사용되는 곳에 있는 식별자 이름 혹은 그 장소.적용 출현

CHILLarray mode 배열 값을 위한 타입. 같은 종류의 값들을 모은 배열 값을

생성할 수 있는 타입.배열 모드CHILL

assertion 프로그램 단언. 진위 값을 가지는 논리적 단언. 단언

객체지향 CHILLassignment action 프로그램내의 제어에서의 치환 실행. 값을 장소에 치환하는

프로그램 행위 문장.치환 실행CHILL

binding occurrence 프로그램상에서 사용되는 이름이 정의된 곳에서 나타남. 선언문에 있는 이름. 사용되는 이름이 정의된 곳. 정의 발생(defining occurrence)이라고도 함.

결합 발생CHILL

case 프로그램에서 복수의 선택을 나타내는 구문. 선택할 수 있는 여러 행위를 기술할 수 있는 프로그램 구문.케이스

CHILLCHILL CCITT(현 ITU-T)에서 권고된 범용 프로그래밍 언어 (Ccitt

HI-Level Language)CHILL 언어CHILL

coercion 프로그램 언어에서 필요한 타입으로 강제 변환함.강제 타입 변환

CHILLCROS 병행 실시간 운영 체제 (Concurrent Real-time Operating

System)병행 실시간 운영체제CHILL

CRS 객체지향 CHILL 실행-시간 시스템(객체지향 CHILL Run-time System). 객체지향 CHILL 프로그램 실행에 필요한 모든 기능을 제공하는 시스템.

CHILL 실행-시간 시스템CHILL

call action 프로그램 호출 실행문. 프로시듀어를 호출하는 실행 문장.호출 실행

CHILLcall frame 프로시저 등의 호출을 위해 메모리에 설정되는 구조. 호출 구조

TTAS.KO-09.0035(2000. 7.)

157

Page 175: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

프로시저 수행을 위해 필요한 정보, 새로운 스택 내용, 복귀 주소 등을 저장하는 데이터 구조.

CHILL

composite mode 여러 타입의 값들로 구성된 복합 데이터의 모드. 스트링, 배열, 구조체 및 모레타 모드가 있다.복합 모드

객체지향 CHILLconcurrent processing 동시에 수행될 가능성을 가지나, 꼭 동시에 수행되는 것을

보장하지는 않음. 동시에 수행될 수도 있고, 순차적으로 수행될 수도 있고, 우선 순위가 보장되지 않고 평행적으로 수행될 수도 있음.

병행 처리CHILL

constructor 프로그램에서 정의된 모레타 모드의 장소를 생성하며 초기화하는데 사용하는 원소 프로시저.생성자

객체지향 CHILLcross debugger 목적 기계상에서 수행되는 프로그램을 호스트 기계상에

서 디버깅할 수 있는 디버거.교차 디버거CHILL

cross development environment

교차 컴파일러가 생성한 어셈블리 코드로부터 목적 코드를 생성하기 위해 필요한 목적 기계에 의존하는 도구들.

교차 개발 환경CHILL

data alignment 메모리상의 각 데이터의 시작 주소를 데이터 크기에 따라 워드 등의 경계로 잡도록 하는 것. 데이터 정렬

CHILLdeallocation 메모리의 동적 할당을 해제함. 더 이상 사용할 필요 없는

메모리의 할당을 해제함.할당 해제CHILL

destructor 더 이상 필요 없는 객체를 소멸할 때 최종화로 사용하는 원소 프로시저.소멸자

객체지향 CHILLdefining occurrence 프로그램상에서 사용되는 이름이 정의된 곳에서 나타남.

선언문에 있는 이름. 사용되는 이름이 정의된 곳. binding occurrence 라고도 부름.

정의 출현CHILL

delay queue 차례를 기다리는 대기 장소. 어떤 이벤트에 대하여 지연된 프로세스가 대기하는 대기 장소. 대기 큐

CHILLdependency graph 정보의 연관성/의존성을 나타내는 그래프. 프로그램

블럭들간에 정보의 의존성이 있는지를 나타냄.의존 그래프CHILL

derived moreta mode 상위 모레타 모드에서 파생(상속)된 하위 모레타 모드. 하위 클래스, 하위 타입, 확장 타입, 확장 모드 등으로도 부른다.파생 모드

객체지향 CHILLdynamic binding 실행 시간에 해당 모드에 따라 public 메소드를 찾아

결합함. 컴파일 시간에 이름, 장소, 속성 등이 결합되지 않고, 실행 시간에 해당 모드를 찾아 결합됨.

동적 결합객체지향 CHILL

dynamic comp. procedure 실행 시간에 해당 모레타 모드에 따라 찾아 결합되는 원소 프로시저. 객체지향 CHILL 에서는 public 원소 프로시듀어만 해당.

동적 프로시저객체지향 CHILL

embedded system 특정 용도의 여러 처리기가 내장된 시스템.내장 시스템

TTAS.KO-09.0035(2000. 7.)

158

Page 176: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

CHILLencapsulation 데이터 보호를 위해서, 데이터와 해당 프로시저를 모듈로

캡슐화 함.캡슐화객체지향 CHILLevent 프로세스가 수행 도중 어떤 이벤트에 대한 여러 수행문을

통하여 프로세스 지연과 수행을 할 수 있다.이벤트CHILL

executable file 프로그램 실행 파일. 목적 기계에서 바로 실행될 수 있도록 컴파일되고, 링크된 파일.실행 파일

CHILLexpression 평가되어 값을 생성하는 문장. 실행되어 어떤 행위를 하는

명령(command)와는 달리, 평가되어 값을 생성함.수식CHILL

first-class value 프로그램에서, 평가될 수 있고, 배정될 수 있고, 복합 값의 원소로 사용될 수 있고, 인자로 전달될 수 있는, 제한없이 사용될 수 있는 값.

일등값CHILL

function call 프로그램에서 지정된 함수를 호출함.함수 호출

CHILLgeneric 다형적인 데이터에 파라메터화 타입을 통하여 포괄적으로

이용될 수 있는 일반적인 모드 정의 가능.포괄성객체지향 CHILL

global variable 프로그램 전역에서 가시적인 변수.전역 변수

CHILLgrant 외부 모듈에 공적으로 사용 가능한 가시성을 지정해 주는

구문. seize 가 grant 에 대응된다. 가시성 허용 구문CHILL

imperative programming 저장 장소에 있는 변수를 갱신하는 명령을 기반으로 하여 프로그램을 작성하는 프로그래밍 방법. 전통적이고, 가장 오래된 프로그래밍 방법.

명령적 프로그래밍CHILL

information hiding 모듈 등으로 데이타의 가시성을 제한하여 정보를 보호함.정보 은닉

객체지향 CHILLinheritance 하위 모드(클래스)를 정의할 때, 상위 모드(클래스)로부터

속성을 물려받음.상속객체지향 CHILL

initialization 데이타 초기화. 도달-경계(reach-bound) 초기화와 실행시간-경계(lifetime-bound) 초기화가 있다.초기화

CHILLinstance 프로그램에서 해당 타입의 실제적인 값, 장소를 나타냄. 인스탄스

CHILLlifetime 프로그램상의 어떤 요소가 생존하는 시간. (예: 지역 변수의

생존시간은 그것이 정의된 프로시져의 수명과 같다.) 생존-시간CHILL

lifetime-bound initialization 장소가 생성될 때 초기값을 저장함. 블럭의 수행이 시작될 생성기간-한정 초기화

TTAS.KO-09.0035(2000. 7.)

159

Page 177: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

때 실행-시간 경계 초기화를 가지는 모든 장소에 대한 초기화가 이루어지고, 다음에 블럭 내에 있는 도달-경계 초기화를 가지는 장소에 대한 초기화가 순서적으로 수행된다.

CHILL

location declaration 이름 리스트의 이름들에 의해서 지정된 모드를 가지는 장소를 생성함. 장소선언

CHILLmode 타입. 값들의 집합. 값들과 해당 연산을 정의한 타입.모드

CHILLmode checking 프로그램에서 같은 타입인지를 점검하는 것

모드 점검CHILL

module 독립된 개체로 구현될 수 있는 이름을 가지는 프로그램 단위. 데이타 보호를 위해, 데이타와 프로시져를 모아 정의할 수 있는 구문.

모듈CHILL

module mode 모듈의 속성을 정의한 모드(객체 타입, 클래스). 하나의 모듈 모드(클래스)의 여러 모듈 실체를 생성할 수 있다.모듈 모드

객체지향 CHILLmoreta mode 모듈, 리젼, 타스크 모드의 총칭.모레타 모드

객체지향 CHILLname equivalence 같은 곳에서 정의된 타입 동치. 같은 타입 이름으로 정의된

경우.이름 동치CHILL

nested 프로그램 구조 (모듈, 모드, 프로시져 등)가 중첩된.중첩된

CHILLnewmode 프로그래밍 언어에서 정의하는 새로운 모드. 구조적 타입

동치보다, 이름 동치(name equivalence)를 지원함.뉴모드CHILL

nondeterminism 프로그램이 어떤 순서로 실행될지 미리 예측 못함.비결정성

CHILLobject 객체. 실세계의 객체를 나타내는 프로그램 구조. 데이타와

해당 인터페이스를 모은 프로그램 구조.객체객체지향 CHILL

object code format converter

목적 코드의 형식을 변환하는 도구. 목적 코드를 해당 목적 기계에 맞는 형식으로 변환하는 도구.

목적 코드 형식 변환기CHILL

object file 컴파일 후 생성되는 목적 파일. 링크하여 실행 파일로 만들 수 있음.목적 파일

CHILLObject-Oriented CHILL 객체지향 CHILL 프로그래밍 언어. ITU-T 에서 권고된

CHILL 의 객체지향적 확장 언어. 공식적인 명칭은 여전히 객체지향 CHILL 으로 부름.

객체지향 CHILL객체지향 CHILL

operator overloading

TTAS.KO-09.0035(2000. 7.)

160

Page 178: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

연산자 다중 정의. 하나의 연산자 기호를 여러 다른 의미로 정의함.

연산자 중복객체지향 CHILL

paradigm 프로그래밍 방법. 명령적, 함수적, 논리적, 객체지향적 패러다임이 있음.패러다임

객체지향 CHILLparameterized type 어떤 타입을 매개적으로 가지는 타입.

매개화 타입CHILL

parametric polymorphism 관련된 타입들에 아규먼트에 균일하게 작동하는 추상.프로그래밍 언어에서 일반적으로 generics 로 구현됨.매개적 다형성

객체지향 CHILLpolymorphism 타입 다형성. 여러 타입에 적용됨. 여러 관련된 타입 군을

가지는 하나의 추상을 만드는 성질. 매개적 다형성 (generics), ad-hoc 다형성 (중복성), 포함적 다형성 (상속에 의한 메소드 재정의) 등이 있음.

다형성객체지향 CHILL

powerset 모든 부분 집합들의 집합.집합

CHILLprimitive value 정수, 문자, 실수 등과 같은 시스템에서 기본적으로

제공하는 모드의 값. 기본 값CHILL

private 사적인 프로그램 요소. 정의된 프로그램 구조 내에서만 가시적인 요소.사적인

객체지향 CHILLprocedure 프로그램에서 명령을 추상화한 것. 필요한 명령을

순차적으로 엮어 만든 프로그램 추상.프로시져CHILL

procedure overloading 프로시져 다중 정의. 하나의 프로시져 이름을 여러 다른 명령을 수행하는 프로시져들로 중복 정의함.프로시져 중복

객체지향 CHILLprocedural programming 알고리즘이 실행되는 절차를 차례로 기술하여

프로그래밍하는 방법. 가장 전통적이고 일반적인 프로그래밍 방법.

절차적 프로그래밍CHILL

process 프로그램 실행 단위. 객체와 일련의 실행문들을 기술한 프로그램 단위.프로세스

CHILLprocess creation 프로세스 정의에 대한 해당 프로세스 생성함. 하나의

프로세스 정의에 대하여 여러개의 프로세스들이 생성될 수 있음.

프로세스 생성CHILL

internal 보호된 요소. 정의된 프로그램 구조 내부와 상속된 객체에서 가시적인 요소.내부의

객체지향 CHILLpublic 프로그램에서 공적인 요소. 정의된 프로그램구조 내부뿐만

아니라, 외부에서도 가시적인 요소.공적인객체지향 CHILL

range mode 프로그램에서 범위를 나타내는 모드.범위 모드

CHILL

TTAS.KO-09.0035(2000. 7.)

161

Page 179: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

reach-bound initialization 선언문이 수행될 때 생성된 장소에 초기값을 저장하여 초기화함. 모듈이 수행될 때 모듈 내에 있는 도달-경계 초기화를 가지는 장소에 대한 초기화가 순서적으로 이루어진다.

도달-한정 초기화CHILL

comp. proc. reimplement 상속된 클래스에서의 프로시져 재정의. 상위 클래스에서 모든 원소를 상속받지 않고 필요한 프로시져을 재정의 할 수 있음.

원소 프로시져 재정의객체지향 CHILLregion 여러 프로세스들간의 상호 배제를 보장하는 임계 영역.

임계 영역을 정의할 수 있는 프로그램 추상 구조.리젼CHILL

SDL CCITT(ITU-T) 표준 규격 및 기술 언어.(Functional Specification and Description Language)명세 및 기술 언어

CHILLsecond-class value 프로그램에서, 평가될 수 없거나, 배정될 수 없거나, 복합

값의 원소로 사용될 수 없거나, 매개변수로 전달될 수 없는, 사용에 제한이 있는 값.

이등값CHILL

semaphore 병행 프로세스들간에 공유 자원에 대한 상호 배제적인 접근을 보장하기 위하여 사용하는 프리미티브. 공유 변수와 대기, 시그널의 연산으로 구성되었음.

세머포CHILL

separate compile 여러 모듈을 분리하여 컴파일함. 분리 컴파일되는 모듈간의 타입 점검 및 인터페이스 점검을 함. 프로그램 명세의 자동생성, 이름 바인딩, 컴파일, 재컴파일의 3 단계로 이루어진다.

분리 컴파일CHILL

sequential object 객체지향 프로그램에서 순차적으로 실행되는 객체. 상호 배제가 보장 안됨.순차 객체

객체지향 CHILLset mode 프로그램에서 집합을 정의하는 타입.집합 모드

CHILLseize 가시성을 획득함. Seize 뒤에 기술된 프로그램 요소를

해당 프로그램 내에서 직접 접근 가능하게 됨.가시성 획득 구문CHILL

side-effect 프로그램에서 전역 변수 등에 대한 배정으로 다른 부분에서 기대하지 않게 발생하는 부작용.부작용

CHILLsignal 병행 프로세스들간에 통신이나 동기화를 위해 주고 받는

신호.시그널CHILL

source file 컴파일되지 않은 원래의 프로그램 파일.원시 파일

CHILLsource level debugger 목적 코드가 아닌 원시 프로그램으로, 오류 탐지, 오류

수정, 실행 등을 할 수 있는 디버거.소스 레벨 디버거CHILL

static binding 컴파일 시간에 프로그램 요소의 속성을 결정함.정적 바인딩

CHILLstructural equivalence

TTAS.KO-09.0035(2000. 7.)

162

Page 180: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

같은 값을 가지는 타입 동치. 같은 타입 구조에 같은 값을 가짐.

구조적 동치CHILL

synmode 유사한 타입을 정의함. 이때 구조적으로 같은 타입이면 동일한 타입으로 취급함.신모드

CHILLtarget system 프로그램이 실제 실행될 목적 시스템. 프로그램이

작성되거나, 컴파일되는 기계와 관련없이 실제 실행될 기계.

목적 시스템CHILL

task 타스크 모드. 병행 객체를 생성할 수 있는 병행적 객체 타입(클래스).타스크

객체지향 CHILLtuple 값들의 쌍.

(예: [‘cartesian’, ‘product’], [123, 456], 등)튜플CHILL

type 값의 집합과 해당 연산을 정의함.타입

CHILLtype derivation 상위 타입(클래스)으로부터의 하위 타입(클래스)으로의

상속을 일컬음.타입 파생객체지향 CHILL

type equivalence 같은 값을 가지는 타입 동치. 구조적 동치(structural equivalence)와 이름 동치(name equivalence)가 있음.타입 동치

CHILLtype extension 상위 타입(클래스)으로부터 하위 타입(클래스)으로의

상속을 타입 확장으로 봄.타입 확장객체지향 CHILL

untyped language 값을 사용하는데 있어서 타입을 요구하지 않는 프로그래밍 언어.타입이 없는 언어

CHILLvisibility 프로그램에서 특정 지점에서 이름을 사용할 수 있음. 해당

이름의 선언의 범위가 미침.가시성CHILL

Z.200 ITU-T 에서 권고된 전기통신용 프로그래밍 언어인 CHILL 표준.Z.200

객체지향 CHILL

TTAS.KO-09.0035(2000. 7.)

163

Page 181: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

색인

가변 구조체, 49

가변 길이, 47, 79, 161

가변 문자 스트링 요소, 67

가시성, 13, 15, 63, 73, 141, 142, 164, 167

객체, 12, 13, 14, 15, 16, 156

결합, 164, 165

고유 번호, 138, 154

고정 구조체, 49

공용 자원, 141

관계 연산자, 24, 68, 88, 89, 92

교집합, 39

구간식 프로그래밍, 16, 143

구문, 2, 19, 20, 26, 28, 29, 30, 31, 32, 33, 34,

35, 36, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48,

49, 53, 55, 58, 61, 64, 65, 66, 68, 69, 70, 71,

72, 74, 75, 76, 77, 78, 79, 80, 81, 83, 84, 85,

86, 87, 89, 90, 91, 92, 94, 95, 97, 100, 101,

104, 105, 109, 110, 111, 112, 114, 115, 116,

117, 119, 120, 122, 123, 125, 132, 133, 134,

135, 138, 139, 140, 141, 143, 144, 145, 154,

164, 166, 167

구성원 연산자, 88, 89, 92

구조체, 17, 30, 46, 48, 49, 50, 51, 52, 63, 69,

70, 73, 82, 83, 142, 157, 161

구조체 모드, 30, 46, 48, 49, 50, 51, 82, 142,

157

구조체 필드, 69, 83

그룹, 19, 132, 133

기본 모드, 50, 51, 52, 159

기저 모드, 54, 56, 58, 159

논리곱, 87

논리합, 86, 87

단일 따옴표, 79

대기 장소, 44, 115, 116, 117

데이타 추상화, 14, 15, 139

동기화, 15, 43, 44, 45, 118, 151

동기화 모드, 43

동적 장소 처리, 125

동치 관계, 158

라이브러리, 14, 16, 17, 127, 128, 129

레이블, 94, 95, 100, 101, 111

레이블 이름, 94, 95, 111

렉시컬 심볼, 20, 21, 22

리젼, 14, 15, 53, 55, 56, 57, 107, 140, 143, 144,

151

리터럴, 20, 25, 67, 73, 74, 75, 76, 77, 78, 79,

80, 81, 91, 101, 119, 120, 158, 159, 160

매개 변수, 137, 158

매개변수 전달, 82, 106, 108, 109, 163

매개인자, 41, 42, 60, 62, 81, 107, 108, 113,

150, 160

매개화 모드, 156

메시지, 41, 43, 45, 121, 154

명세, 12, 15, 16, 17, 42, 54, 55, 56, 57, 59, 144

명세 리젼, 144

TTAS.KO-09.0035(2000. 7.)

164

Page 182: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

명세 모듈, 144

모듈, 12, 14, 15, 16, 17, 53, 54, 55, 57, 59, 95,

107, 134, 139, 142, 143, 144, 145, 151, 159

모듈 모드, 14, 53, 54, 55, 57, 59, 107

모드, 14, 15, 27, 28, 29, 30, 31, 32, 33, 34, 35,

36, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,

49, 50, 51, 53, 54, 55, 56, 57, 58, 59, 60, 62,

63, 64, 65, 66, 67, 69, 70, 71, 73, 78, 79, 80,

81, 82, 83, 85, 87, 89, 97, 101, 103, 107,

110, 122, 125, 150, 151, 154, 156, 157, 158,

159, 160, 161, 163

모드 검사, 71, 156, 161

모드 규칙, 156

모드 점검, 156, 163

모드 점검 규칙, 163

모드 정의, 28, 29, 57, 59, 71

모레타, 15, 30, 40, 46, 53, 62, 63, 71, 107, 157

모레타 모드, 15, 30, 40, 46, 53, 62, 63, 71, 157

문자, 20, 21, 33, 34, 47, 50, 51, 63, 64, 66, 67,

69, 73, 74, 75, 77, 79, 83, 124, 125, 156,

159, 161

문자 리터럴, 67, 75, 77, 159

문자 모드, 33, 34, 67, 159, 161

문자 스트링 리터럴, 79

문자 스트링 요소, 66, 67

배열, 30, 34, 46, 47, 48, 50, 51, 63, 68, 69, 73,

81, 82, 97, 110, 157, 161

배열 모드, 30, 46, 47, 48, 82, 157, 161

배열 슬라이스, 69, 82

배치, 50, 51

버퍼, 15, 43, 44, 45, 62, 63, 73, 93, 119, 122,

153, 157, 160

버퍼 모드, 43, 45, 62, 157, 160

병행 실행, 150, 151

복합 모드, 30, 31, 46, 82

복합 치환문, 96

본체, 54, 55, 56, 57, 58, 59, 107, 108, 150

분리 컴파일, 14, 16, 17, 139, 141

불리안 리터럴, 77, 159

불리안 모드, 33, 67, 159

블럭, 12, 15, 53, 62, 95, 132, 134, 136, 141,

142, 160

블럭문, 95

비복합 모드, 30, 31

비트 스트링 리터럴, 80

비트 스트링 요소, 67

산술 연산자, 90, 92

상속, 54, 55, 56, 57, 58, 59

상속절, 54, 55, 56, 57, 58, 59

상수 값, 64, 72, 74, 75, 81

상수형 리터럴, 91

상호 배제, 15, 53, 151

생성자, 54, 55, 56, 57, 58, 59, 62

생존기간, 13, 62, 142

세트 리터럴, 78

세트 모드, 34, 39, 78, 82, 159

소멸자, 54, 55, 56, 57, 58, 59, 62

수식, 42, 44, 45, 63, 73, 82, 83, 84, 85, 86, 87,

93, 96, 100, 101, 109, 113, 119, 120, 150,

153, 163, 168

숫자, 20, 21, 24, 25, 104, 108

스트링 모드, 30, 46, 47, 79, 156, 158, 159, 160,

161

스트링 색인, 47

스트링 슬라이스, 63, 68, 82

스트링 요소, 63, 66, 67, 79

시그널, 15, 43, 120, 153, 154

시그널 정의문, 154

TTAS.KO-09.0035(2000. 7.)

165

Page 183: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

식별자, 25, 30, 108

실행, 12, 13, 72, 100, 107, 108, 112, 150, 151,

156

실행 화일, 13

실행문, 12, 14, 15, 30, 40, 42, 43, 44, 45, 53,

94, 95, 97, 99, 101, 102, 103, 105, 107, 113,

114, 115, 116, 117, 118, 119, 120, 121, 122,

124, 125, 126, 134, 139, 142, 150, 151, 153

어휘, 19, 20

역참조, 64, 65, 66

연산자, 20, 24, 42, 68, 73, 84, 86, 87, 88, 89,

90, 92, 96, 97, 150, 163

예약어, 20, 21, 22, 25, 31

예외, 14, 15, 130

우선순위, 44, 108, 113, 116, 117, 118, 120

원격 구간, 143

원소 프로세스, 57, 60

원소 프로시듀어, 15, 31, 55, 57, 59, 60, 71,

107, 108, 151, 153

의존 그래프, 17

이름, 2, 14, 16, 17, 20, 22, 24, 25, 34, 42, 49,

50, 57, 59, 62, 63, 64, 72, 73, 74, 94, 95,

113, 127, 138, 142, 143, 144, 154, 164, 168

이벤트, 15, 43, 44, 45, 62, 63, 157, 160

이벤트 모드, 43, 44, 62, 157, 160

이산 모드, 32, 33, 35

이산 범위 모드, 35, 36

이중 따옴표, 79

인스탄스, 160

인스턴스 모드, 42, 84

인터페이스, 15, 16, 17, 47, 54, 56, 58

임계, 140, 141, 151, 152, 153, 154

임계 지역, 152

임계성, 152, 153

입출력, 14, 127, 128

자유 참조 모드, 40

장소, 15, 41, 43, 44, 45, 53, 54, 56, 57, 58, 59,

60, 61, 62, 63, 64, 66, 70, 71, 73, 74, 78, 82,

83, 85, 93, 96, 107, 108, 115, 116, 117, 120,

121, 122, 123, 125, 132, 138, 140, 142, 150,

151, 152, 160, 163, 168

장소 변환, 70, 71

장소 선언, 61

장소 할당, 142

재귀 모드, 29

재활성, 43, 115, 150, 153

전역 변수, 80, 136, 150

접근 이름, 64

정수 리터럴, 75, 76, 158

정수 모드, 29, 30, 32, 33, 80, 158, 160

조건부 동기화, 153

존재 영역, 165

존재성, 132, 142

종료, 102, 103

중첩된, 152

지시자, 113

지연, 43, 93, 150, 151, 152, 153

집합 모드, 38, 87, 89, 159

집합 포함 연산자, 88

차집합, 90, 91

참조 모드, 29, 39, 40, 55, 57, 59, 157, 160, 161

참조 장소, 40, 65, 66, 85

참조 특성, 156, 157

초기화, 62, 63, 81, 82, 134, 152

추상 리젼 모드, 57

추상 모듈 모드, 54, 55

TTAS.KO-09.0035(2000. 7.)

166

Page 184: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

추상 모드, 55, 57, 59

치환, 24, 82, 96, 97, 159, 163

치환문, 95, 96, 163

클래스, 27, 64, 74, 81, 84, 156, 157

타스크, 16, 53, 58, 59, 60, 62, 107, 108, 151

통신, 12, 15

튜플, 73, 81, 82

파생 모드, 56, 58

포괄성, 12, 23

포인터, 47, 63, 65, 66, 73, 82, 109

표준 입출력, 127, 128, 129

프로그램, 12, 13, 15, 16, 17, 86, 102, 103, 107,

110, 111, 125, 127, 128, 129, 132, 134, 141,

143, 145

프로그램 구조, 12, 13, 15, 16, 132, 143, 145

프로세스, 15, 42, 43, 44, 45, 53, 55, 57, 60, 71,

78, 84, 93, 108, 111, 113, 114, 115, 116,

117, 118, 119, 120, 121, 122, 132, 138, 140,

141, 150, 151, 152, 153, 154

프로시듀어 리터럴, 80, 81, 160

프로시듀어 모드, 29, 35, 41, 42, 78, 152, 160

프로시듀어 정의문, 81, 110, 135

프소세스 정의문, 53, 57, 60, 71, 108, 113, 138,

141, 150, 151

피연산자_1, 86, 87

피연산자_2, 89

피연산자_3, 89, 90, 91

피연산자_4, 89, 90, 91

피연산자_5, 86, 91

한정 참조, 39, 40, 64

한정 참조 모드, 39, 40

함수 호출, 86, 107

항목, 17, 51, 52, 63, 70, 82, 85, 142

형판, 53

호출 실행, 105, 153

호출 실행문, 105, 153

후계자, 78

ABS, 22, 33, 123, 124, 125

action, 94, 95, 98, 100, 101, 102, 104, 105,

110, 111, 112, 114, 115, 116, 117, 119, 120,

122, 123, 124, 125

AFTER, 22, 112, 113, 114

ALLOCATE, 22, 78, 125, 126

AND, 22, 33, 39, 68, 86, 87, 95, 98, 99

array mode, 31, 46, 48

ASCII, 34, 83

ASM, 22, 123, 124, 125

assignment action, 94, 95

AT, 22, 112, 113

call action, 94, 95, 105

case, 22, 94, 95, 100, 101, 116, 120, 121, 122,

153

CASE-문, 95, 100, 101

composite mode, 31, 46

CONSTR, 24

constructor, 61, 125, 126

delay queue, 115, 116, 117

dependency graph, 17

TTAS.KO-09.0035(2000. 7.)

167

Page 185: 전기통신 구현용 CHILL의 표준화 - TTA Web view3.13.6 배열/구조체 모드의 배치 서술 37 Layout Description for Array/Structure Modes 3.14 동적 모드 39 Dynamic

DESTR, 24

DO-문, 95, 102, 103, 104

event, 22, 43, 44, 73, 115, 116, 117

executable file, 13

EXIT 문, 95, 103

expression, 35, 47, 66, 68, 73, 86, 92, 95, 98,

99, 100, 101, 104, 110, 112, 115, 116, 117,

119, 123, 125, 154

function call, 86

generic, 16, 24, 31, 53

GOTO-문, 95, 111

grant, 17, 23, 54, 56, 57, 59, 60, 128, 151, 152,

164, 165, 167

inheritance, 53, 54, 56, 58

initialization, 22, 61

instance, 23, 31, 42, 73, 83, 112, 113, 116, 117,

118, 119, 120, 121, 122, 150

lifetime, 13, 61, 62, 63

location declaration, 61

mode, 24, 28, 29, 30, 31, 32, 33, 34, 35, 36, 38,

39, 40, 41, 42, 44, 45, 46, 48, 49, 53, 54, 55,

56, 58, 61, 65, 71, 72, 73, 83, 101, 104, 109,

125, 154

module, 14, 16, 23, 53, 54, 56, 58, 95, 127,

128, 129

module mode, 53, 54, 56, 58

moreta mode, 31, 46, 53

newmode, 17, 23, 29, 30, 54

object, 106, 156

PUBLIC, 13, 31, 151

REMOTE, 13, 24, 65, 127, 128

RETURN 문, 107

similar 관계, 158

SYN 정의문, 138, 154

TTAS.KO-09.0035(2000. 7.)

168