Home Map Index Search News Archives Links About LF
[Top bar]
[Bottom bar]
[Photo of the Author]
Brent B. Welch

글쓴이 소개:
Brent Welch씨는 www.scriptics.com웹싸이트가 만들어질때 Tcl과 관련된 URL들을 보기좋게 데이터베이스화하고 TclPro제품을 위한 전자상거래 인프라들을 만드셨습니다. 또한 Tcl/Tk를 이용한 대형 프로그램들을 많이 만들었습니다. 개발한 대표적인 프로그램으로는 현재 www.scriptics.com을 운영하는데 사용되고 있는 TclHttpd웹서버, 메일 사용자인터페이스인 Wxmh, webtk HTML편집기등이 있습니다. 그는 또 "Practical Programming in Tcl and Tk"란 책을 펴내기도 했었습니다. (한국어판도 있죠:) Welch씨는 1982년 Boulder에 있는 University of Colorado에서 항공우주공학을 전공하였으며 1986년 University of California, Berkeley에서 컴퓨터공학 석사학위를 받았으며 90년도에 박사학위를 받았습니다. Welch씨는 제록스 PARC에서 분산시스템에 관한 연구원으로 일한적이 있으며 그 후 썬 마이크로시스템즈 연구소에서 Tcl/Tk팀원으로 활동하고 있습니다. 현재 ACM과 IEEE 컴퓨터분과의 회원입니다. 홈페이지: http://www.beedub.com/

차례:

The Tcl Syntax

[Ilustration]

Abstract:

이 글에서는 Tcl언어의 기본개념과 문법에 대해 설명합니다.



 

Tcl문법 살펴보기

스크립트언어인 Tcl은 매우 간단한 문법을 가지고 있다.

명령어 인자 인자 인자
Tcl명령어들은 단어로 이루어지는데, 각 단어는 공백으로 구분된다. 첫번째 단어는 명령어이름이며, 나머지는 명령어에게 전달되는 값들이다.
$foo
달러표시($)는 변수값을 의미한다. 위의 예에서 foo는 변수명이다..
[clock seconds]
대괄호(Square bracket)는 일종의 파이프라 볼 수 있다. 예를 들자면 여러분이 어떤 명령어의 실행결과를 다른 명령의 인자로 사용할때 이 대괄호를 사용한다. 위의 예문은 결국 현재 시간의 초단위를 돌려주는 인자로 볼 수 있다.
"some stuff"
쌍따옴표는 명령어에 전달되는 여러 단어로 된 하나의 인자를 의미한다. 달러표시와 대괄호는 쌍따옴표안에서도 해석이 된다.
{some stuff}
중괄호(Curly brace) 역시 몇개의 단어들을 하나의 인자로 넘길때 사용된다. 그러나 이때는 괄호안의 문장은 해석되지 않고 그대로 전달된다.
\
백슬래시(\)는 특수문자를 나타낼때 사용된다. 예를 들어 \n은 새로운 라인을 생성하라는 의미이다. 백슬래시는 또한 달러표시, 쌍따옴표, 대괄호, 중괄호등이 가지는 특수한 의미를 끄고 단지 문자로만 사용할때 사용된다.
 

작은 예제

이래예는 현재시간을 화면에 출력하는 간단한 Tcl명령이다. 사용되는 Tcl명령어는 set, clock, puts등 세개이다. set명령은 변수를 지정한다. clock명령은 현재 시간값을 계산한다. puts명령어는 값을 출력한다.

set seconds [clock seconds] puts "The time is [clock format $seconds]"

변수를 지정할때는 $기호를 사용하지 않는다는 것을 기억해 두기 바란다. 단지 여러분이 어떤 변수의 값을 사용할 필요가 있을때 $를 붙여 사용한다. seconds변수는 사실 꼭 필요한 변수는 아니다. 여러분은 현재 시간을 다음 명령한줄로도 출력할 수 있다.:

puts "The time is [clock format [clock seconds]]"

 

그룹화(Grouping)와 대체(substitution)

Tcl파서는 다른 세단계를 거쳐 Tcl문법을 해석한다.: 인자 그룹화, 결과 대체,명령의 실행.

  1. 인자 그릅화. Tcl은 인자들을 어떻게 명령어들에게 체계화할 것인가를 결정해야 한다. 가장 간단한 경우로 공백으로 인자들을 구분하는 방법이 있다. 앞에서도 언급했지만 따옴표와 괄호는 여러개의 단어를 하나의 인자로 묶는데 사용된다. 위의 보기프로그램에서도 쌍따옴표는 하나의 인자로 그룹화되어 puts명령에서 사용되었다.

  2. 결과 대체. 인자들이 모두 그룹화되고나면 Tcl은 문자열 대체를 실행한다.간단히 말하자면 $foofoo변수의 값으로 바꾸는 것이다.즉 괄호사이의 명령어들을 그 명령의 결과로 바꾸는 것이다. 이 대체과정은 일반적으로 그룹화가 결정되고 난 다음에 수행된다. 이 순서에 따라 작업을 수행하면 이상한 값으로 명령어의 구조가 복잡해지지 않도록 해준다.

  3. 명령 실행. 대체과정이 끝나면 Tcl은 명령어들을 실행테이블의 키값으로 사용한다. 결국 테이블에서 구분된 C프로시져를 호출하게 되고, C프로시저는 명령을 수행하게 된다.여러분도 Tcl에서 명령어 프로시저를 작성할 수 있다. 이것은 인자를 전달하고 오류를 다루기 위한 간단한 관례이다.
 

또다른 예제

여기 다른 예제 하나를 살펴보자.:

set i 0 while {$i < 10} { puts "$i squared = [expr $i*$i]" incr i }

여기서 중괄호는 어떤 대체과정이 일어나지 않게 하면서 인자들을 그룹화하기 위하여 사용되었다. Tcl파서는 while명령에 대하여 특별한 동작을 필요로 하지 않는다는 것을 알고 있다.마치 다른 명령어처럼 취급된다. while명령의 실행은 단지 첫번째 인자가 표현식이며, 두번째인자가 Tcl명령어들이라는 것만 알고 있다. 괄호로 된 그룹은 두개의 인자를 가지고 있다.: 루프의 제어를 담당하는 불린표현식과 루프과정에서 동작할 명령어로 되어 있다.

우리는 두가지 수학적 표현식을 보았다.: 하나는 불린 연산이며 하나는 가감승제로 표현되는 수식이다. while명령은 자동으로 그 첫번째 인자를 수식으로 평가한다. 다른 경우에서 여러분은 반드시 특별한 수학적 계산을 수행하려면 expr명령어를 사용해야 한다.  

명령의 실행

마지막으로 Tcl은 어려운 몇가지 작업을 진행하기 위하여 몇몇을 호출한다. 우리는 이미 Tcl이 수학함수를 사용하기 위하여 expr명령을 사용하고, 출력함수를 다루기 위하여 puts함수를 사용하며, 변수값을 지정하기 위하여 set명령을 사용한다는 것을 살펴보았다. 이러한 Tcl명령어들은 Tcl에 등록되어 있는 C프로시저를 호출하여 실행된다. C명령어 프로시저는 Tcl명령행으로부터 문자열 인자를 받아서 그 값을 새로운 문자열로 돌려준다. C명령어 프로시저를 작성하는 것은 매우 쉬운 일이다. C명령어 프로시저를 이용하면 데이터베이스의 접근에서부터 그래픽한 사용자 인터페이스를 만드는 등의 일까지 모든 작업이 가능하다.언어로서의 Tcl은 실제로 그 명령이 어떤 일을 하는지 실제로 모른다. 단지 인자들을 그룹화하고, 결과를 치환하고, 명령어들을 처리할 뿐이다.  

One Last Example

다음 프로그램은 팩토리얼을 구하는 프로그램이다.:

proc fac {x} {
    if {$x < 0} {
        error "Invalid argument $x: must be a positive integer"
    } elseif {$x <= 1} {
        return 1
    } else {
        return [expr $x * [fac [expr $x-1]]]
    }
}


 

더 자세히 알고싶은 독자들은

이 기사에 사용된 소스는 여기에 있다.: Scriptics
웹페이지는 리눅스포커스의 편집팀에 의해 관리됩니다.
© Brent B. Welch
LinuxFocus 1999