한국   대만   중국   일본 
파스칼 (프로그래밍 言語) - 위키百科, 우리 모두의 百科事典 本文으로 移動

파스칼 (프로그래밍 言語)

위키百科, 우리 모두의 百科事典.

파스칼
패러다임 多重 패러다임 ( 命令形 節次的 構造的 )
設計者 니클라우스 비르트
開發者 니클라우스 비르트
發表日 1970年 (54年 前) ( 1970 )
主要 具現體
UCSD , 터보
오브젝트 파스칼
影響을 받은 言語
알골
影響을 준 言語
델파이 , 크롬

파스칼 (Pascal)은 1969年에 스위스 ETH 취리히 컴퓨터 科學者 니클라우스 비르트 가 開發한 프로그래밍 言語 로, 當代의 가장 人氣있는 敎育用 言語 中 하나였으며, 1980年代와 1990年代 初盤에 걸쳐 널리 使用되었다.

파스칼은 發表 當時에는 아주 基本的인 컴퓨터 言語의 要素만을 가지고 있었으므로 시스템을 直接 다루기에는 不足하였다. 파스칼이라는 이름은 프랑스 의 數學者이자 哲學者 블레즈 파스칼 의 이름을 딴 것이다. 포인터 를 使用한 構造的 프로그래밍 데이터 構造化 (data structuring)를 그 特徵으로 한다.

科學 硏究를 目的으로 만들어진 高級言語 알골 60 의 影響을 받은 까닭에, 같은 時期에 마찬가지 影響을 받아 製作된 C 와 여러 가지 面에서 類似한 點을 갖는다. 그러나 코드를 簡潔하게 하고 버그를 더 쉽게 잡아내기 위한 目的으로 몇 가지 機能을 制限함으로써 結果的으로 C 言語에 비해 活用度가 떨어지는 言語가 되었다. 그러나 完全히 非實用的인 言語라는 뜻은 아니며, 實際로 TeX 나 初期 매킨토시 運營 體制 製作에 使用됐다. 最近 [ 언제 ?] 에는 파스칼 컴파일러 自體가 크게 改善되고 소프트웨어 開發 技術의 發展으로 이런 些少한 差異點은 거의 無視할 수 있는 短點이 되었다. 어셈블리를 直接 使用한다.

現在는 初期의 파스칼에 비해 많은 部分이 追加, 改善되고 다른 言語의 長點들을 따와 常用 파스칼 컴파일러人 델파이 는 C++과 거의 機能 差異가 없다.

컴파일러 [ 編輯 ]

많은 變種들이 存在하며, 客體 志向 프로그래밍 을 위해 機能을 追加한 變種들도 多數 存在한다. 엠바카데로 辭意 델파이 카일릭스 는 파스칼의 直系 後孫이라 할 수 있는 오브젝트 파스칼 을 使用한다. 델파이 7 버전부터는 델파이라는 말을 使用하기도 한다.

오픈 소스로 製作된 프리 파스칼 이나 GNU 파스칼 도 있다.

開發道具 [ 編輯 ]

델파이 言語로 불리는 變種 오브젝트 파스칼은 델파이, 프리 파스칼 IDE, 라자루스 等에서 開發할 수 있다. 볼랜드 파스칼이라 불리는 델파이 以前의 오브젝트 파스칼은 터보 파스칼 , 프리 파스칼 IDE에서 開發할 수 있다.

言語 構成 [ 編輯 ]

Hello world [ 編輯 ]

program
 HelloWorld
(
output
)
;

begin

  writeln
(
'Hello, World!'
)

end
.

콘솔 入出力 [ 編輯 ]

program
 WriteName
;


VAR

  Name
:
string
;
 { This declares the variable Name as a string }


BEGIN

  Write
(
'Please give your name: '
)
;

  Readln
(
Name
)
;
 { Readln reads the string printed on the screen }

  WriteLn
(
'Hello '
,
 Name
)
;

END
.

資料 構造 [ 編輯 ]

var

  r
:
 Real
;

  i
:
 Integer
;

  c
:
 Char
;

  b
:
 Boolean
;

  e
:
 (
apple
,
 pear
,
 banana
,
 orange
,
 lemon
)
;

一般 類型의 下部 範圍는 다음과 같이 짤 수 있다:

type

  fruit
=
(
apple
,
 pear
,
 banana
,
 orange
,
 lemon
)
;


var

  x
:
 1
..
10
;

  y
:
 'a'
..
'z'
;

  z
:
 pear
..
orange
;

다른 프로그래밍 言語와 달리, 파스칼은 集合 類型을 支援한다:

var

  set1
:
 set
 of
 1
..
10
;

  set2
:
 set
 of
 'a'
..
'z'
;

  set3
:
 set
 of
 pear
..
orange
;

集合은 現代 數學에 있어 基本的인 槪念이며 수많은 알고리즘이 集合을 使用하여 定義된다. 그러므로 이러한 알고리즘을 追加하는 것은 파스칼에 매우 알맞다고 볼 수 있다. 集合型 연산은 效率的이기도 하다.

많은 파스칼 컴파일러가

if
 i
 in
 [
5
..
10
]
 then

  ...

if
 (
i
>
4
)
 and
 (
i
<
11
)
 then

  ...

보다 더 빠르게 遂行한다.

兄(type)은 宣言을 통해 다른 兄으로부터 定義될 수 있다:

type

  x
 =
 Integer
;

  y
 =
 x
;

 ...

또한, 複雜한 兄은 單純한 兄으로 構成할 수 있다:

type

  a
 =
 Array
 [
1
..
10
]
 of
 Integer
;

  b
 =
 record

        x
:
 Integer
;

        y
:
 Char

      end
;

  c
 =
 File
 of
 a
;

포인터 [ 編輯 ]

파스칼은 포인터 使用을 支援한다:

 type

   a
 =
 ^
b
;

   b
 =
 record

         x
:
 Integer
;

         y
:
 Char
;

         z
:
 a

       end
;

 var

   pointer_to_b
:
 a
;

可變 pointer_to_b 가 資料型 b 레코드의 포인터이다. 포인터들은 宣言 前에 使用할 수 있다. 새로운 레코드를 만들어 값 10 A 를 레코드 안의 필드 a , b 로 割當하려면, 다음과 같은 命令語를 使用하면 된다:

   new
(
pointer_to_b
)
;

   pointer_to_b
^.
x
 :=
 10
;

   pointer_to_b
^.
y
 :=
 'A'
;

   pointer_to_b
^.
z
 :=
 nil
;

 ...

한정자를 보다 效果的으로 統制하기 위해서는 with 門을 써서 다음과 같은 方式을 使用할 수도 있다.

   new
(
pointer_to_b
)
;

   with
 pointer_to_b
^
 do

     begin

         x
 :=
 10
;

         y
 :=
 'A'
;

         z
 :=
 nil

     end
;

 ...

制御 救助 [ 編輯 ]

파스칼은 構造 프로그래밍 言語이며, 制御 흐름을 goto 門 없이 標準化할 수 있다.

 while
 a
 <>
 b
 do
 writeln
(
'Waiting'
)
;


 if
 a
 >
 b
 then

   writeln
(
'Condition met'
)

 else

   writeln
(
'Condition false'
)
;


 for
 i
 :=
 1
 to
 10
 do
 writeln
(
'Iteration: '
,
 i
:
1
)
;


 repeat
 a
 :=
 a
 +
 1
 until
 a
 =
 10
;

節次 및 函數 [ 編輯 ]

파스칼 救助는 節次와 函數로 짜여진다.

 program
 mine
(
output
)
;

   var
 i
 :
 integer
;


   procedure
 print
(
var
 j
:
 integer
)
;


     function
 next
(
k
:
 integer
)
:
 integer
;

     begin

       next
 :=
 k
 +
 1

     end
;


   begin

     writeln
(
'The total is: '
,
 j
)
;

     j
 :=
 next
(
j
)

   end
;


 begin

   i
 :=
 1
;

   while
 i
 <=
 10
 do
 print
(
i
)

 end
.

節次와 函數는 어느 깊이로든 놓일 수 있으며, 프로그램 構造는 論理 外部 블록이다.

같이 보기 [ 編輯 ]

外部 링크 [ 編輯 ]