SSブログ

IBM 製の Tcl → Python 変換ツール [Tcl]

偶然に表題の Jacl2Jython [1] というツールを見つけた。これはいままで WAS のスクリプティングに Jacl (Tcl) を使っていたのが廃止されて Jython (Python) を採用することになったのでその移行を支援するためのものらしい。Tcl の不採用がさびしい感じだけどツールとしては面白いので使ってみた。

簡単な以下のようなサンプルが、

set var "Hello"

proc greeting {msg} {
  puts $msg
}

greeting $var

for {set i 0} {$i < 10} {incr i} {
  if {$i %2 == 0} then {
    puts $i
  }
}

こう変換される。

#
#####################################################################
## NOTE: This code is PRELIMINARY, it requires MANUAL VERIFICATION ##
##                    ***********              ******************* ##
#####################################################################
#

import sys
def wsadminToList(inStr):
        outList=[]
        if (len(inStr)>0 and inStr[0]=='[' and inStr[-1]==']'):
                tmpList = inStr[1:-1].split() #splits space-separated lists,
        else:
                tmpList = inStr.split("\n")   #splits for Windows or Linux
        for item in tmpList:
                item = item.rstrip();         #removes any Windows "\r"
                if (len(item)>0):
                        outList.append(item)
        return outList
#endDef

var = "Hello"

def greeting ( msg ):
        print msg
#endDef 

greeting(var )

i = 0  #forStart
while ( i < 10 ):  #forTest
        if (i % 2 == 0):
                print i
        #endIf 
        i += 1  #forNext
#endWhile  (#endFor)

「#endDef」とか Python をはじめたばかりの頃についつい書いてしまう感じのコメント行がつくのはご愛嬌。

気になるのは明らかにダイレクトに変換できなさそうな eval とか uplevel とかはどうなるのかということだけど、

set script {puts "hello"}
eval $script

上のようなソースは

script = ["puts", "hello"]
eval ( script )

こうなってしまった。uplevel は単にサポートされていない。

あと他にもこまごまとした点で本来の Tcl の文法より制約が多くなっている。proc の引数が1つの場合は {} で囲まなくてもいいのにそれを要求してくるとか、then はキーワードでもなんでもない(Tcl に他言語でいうキーワードは一切存在しない)のに変数名に使えないとか。

しかし厳密な意味では構文木に変換することもできないし、文字列リテラルとコードブロックの区別も不可能な Tcl のプログラムを普通の他言語に変換するというのは相当にハードルの高い問題だというのは確か。Tcl 処理系自身がやっているバイトコードコンパイルは一体どんな方略を取ってるんだろうか。

[1] http://www-1.ibm.com/support/docview.wss?rs=180&uid=swg24012144


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

Scala で名前付き引数Erlang R11B-5 ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。