日本語スクリプトの手抜きな発想 [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')
これがまずは
文字列「なんとか、かんとか」を表示する。
を動かせる最初のバージョンである。この程度で、とりあえず、動く。ただし、制約は大きい。たとえば、一行に文字列が二つあった場合、どうするかを考えていないし、文字列と数値と変数とを表示することにも対応していない。
コメント 0