SSブログ

日本語スクリプトの手抜きな発想 [wython]

wythonは、本当のインタープリターでもコンパイラーでもなく、単にPythonに対する、しかもかなり機能を削ったトランスレーター、あるいは前処理プログラム、ということで考えている。つまり、単にPythonコードに書き直すだけで、解釈は一切しない。その点ですでに手抜きである。

 それだけではなく、日本語と英数字・記号とを使い分けることにより、かなりの部分で、日本語を無視して英数字・記号を抜き出すだけで、式の部分が取り出せてしまうのである。あとは、前回書いたように、文についてのキーワードを探して、それを元に処理を分岐させればいい。キーワードを除く日本語は、いわば、英数字・記号で書かれるPythonコードに対する注記として機能する。したがって、キーワードと紛らわしくならない限り、どのように書いてもいいし、書かなくてもいい。最初は詳しく書くが、慣れてくれば、段々減らしていく、ということもできる。

 機能的にもPythonの持つ、オブジェクト指向の部分は取り上げないし、例外についても導入しない方向で考えているので、かなりのサブセットである。初心者教育用の言語と割り切り、さらに慣れてくれば、直接Pythonを勉強してもらえばいい。幸いなことに、今卒論で初心者向けのPythonの教材を作っている学生がいるので、それを使ってもらえればいいだろう。

#!/usr/bin/env python
# -*- coding:euc-jp -*-
import sys, re

# 最も単純なwython。標準入力から読み込み、標準出力にPythonコードを書き出す。
# Ver.0.1: 「を表示する。」の処理だが、汎用性は考慮せず。
# とにかく動くものをつくる。

str_num = 0

def extract_string(m):
    global str_num
    str_num += 1
    str_val = '_str%d' % (str_num)
    str_text = '%s = "%s"' % (str_val, m.group(1))
    print str_text.encode('euc_jp')
    return str_val

re_jquotation = re.compile(u'.*?「(.+?)」')

print '''#!/usr/bin/env python
# -*- coding:euc-jp -*-
'''

for line in sys.stdin:
    line = line.rstrip()
    line = unicode(line, "euc_jp")
    pos = line.find(u'を表示する。')
    if pos > 0:
        str_num = 0
        line = re_jquotation.sub(extract_string, line[0:pos])
        print 'print', line.encode('euc_jp')

これがまずは

文字列「なんとか、かんとか」を表示する。

を動かせる最初のバージョンである。この程度で、とりあえず、動く。ただし、制約は大きい。たとえば、一行に文字列が二つあった場合、どうするかを考えていないし、文字列と数値と変数とを表示することにも対応していない。


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

nice! 0

コメント 0

コメントを書く

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

トラックバック 0

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