Skip to content

人にとって意味が分かるスクリプトをぽわみスクリプトに変換するPythonモジュールです

Notifications You must be signed in to change notification settings

HexagramNM/Pspy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Pspy

人にとって意味が分かる、Lisp風スクリプトをぽわみスクリプトに変換するPythonモジュールです。リポジトリ内のpowamiフォルダを、使用するPythonコードのあるフォルダに配置して使ってください。 サンプルコードは"powamiTranslator.py"です。

イメージ画像

やりたいことのイメージ

やりたいこと

※旬に遅れないようにということで、軽く動作チェックだけして公開しているため、バグがあるかもしれません。ご了承ください。

※公式もちゃんとぽわみスクリプトに変換する、別スクリプトを用意しているようです(ぽわみスクリプト トランスパイラ)。 好みな方をお使いください。

使用方法

このスクリプトでは1つの命令文を1つのリストとして表現し、複数の命令文(リスト)を格納するリストをPspyオブジェクトに 渡すことで実行されます。

from powami.pspy import Pspy

pst = Pspy(u"ぽ")

code = [
    ["assignment", "param0", u"?"],
    ["addParamToRight", "output", "input"],
    ["addParamToRight", "output", "param0"],
    ["addParamToLeft", "output", "param0"],
]

psResult = pst.exec(code)

Pspy(input_str)

Pspyクラスのオブジェクトを初期化し、input_strのぽわみ文字列が入力として渡されます。 ※ぽわみ文字列...ぽわ!?~ーのみから構成される文字列

Pspy.exec(code)

codeのリスト内にある命令文を実行し、さらにcodeをぽわみスクリプトに変換します。 このメソッドの処理の最後で、output変数(ぽわみスクリプトではわ~ぽ)に格納されたぽわみ文字列が出力されます。 このメソッドは変換されたぽわみスクリプトを返します。

リファレンス

変数

ぽわみスクリプトでは10個の変数が用意されていますが、このスクリプトでは以下のような名前にしております。

  • input...入力が入る変数(ぽ~わ)

  • output...出力を入れる変数(わ~ぽ)

  • paramP...初期値"ぽ"が入っている変数(ぽぽぽ)

  • paramW...初期値"わ"が入っている変数(わわわ)

  • param0 param1 param2 param3 param4 param5...その他使用できる6つの変数

命令語

基本的に[命令語, 引数1, 引数2]というように3つの要素から構成されます。引数2は命令語によって不要な場合があります。命令語に必要な数の要素が足りていれば、オーバーしている分は無視する形で動きます。

命令語                   
引数1
                  
引数2 説明
assignment 変数名 変数名 or ぽわみ文字列 引数1 に 引数2を代入する。
addParamToRight 変数名 変数名 引数1 を 引数1 の右側に 引数2 を繋げたものにする。
addParamToLeft 変数名 変数名 引数1 を 引数1 の左側に 引数2 を繋げたものにする。
splitRightCharacter 変数名 変数名 引数1 を 引数1 の右端 1 文字を削除したものにし、引数2 を削除した 1 文字にする。削除に失敗した時 引数2 は空文字列になる。
splitLeftCharacter 変数名 変数名 引数1 を 引数1 の左端 1 文字を削除したものにし、引数2 を削除した 1 文字にする。削除に失敗した時 引数2 は空文字列になる。
deleteRightCharacter 変数名 不要 引数1 を 引数1 の右端 1 文字を削除したものにする。
deleteLeftCharacter 変数名 不要 引数1 を 引数1 の左端 1 文字を削除したものにする。
powamiFlip 変数名 不要 引数1 を 引数1 の 反転 にする。
powamiAdd 変数名 変数名 引数1 を 引数1 と 引数2 の にする。
powamiOr 変数名 変数名 引数1 を 引数1 と 引数2 の にする。

powamiFlip, powamiAnd, powamiOrにある反転、積、和についての詳細はぽわみスクリプトをご覧ください

制御文

ぽわみスクリプトには分岐、繰り返しのための制御構文があり、このスクリプトでもサポートしております。Pspyでは以下のように入力します。

[制御キーワード, 変数, パターン, [命令文], [命令文], ... , [命令文]]

例.

code = [
    ["addParamToRight", "output", "input"],
    ["ifNot", "input", u"*",
        ["addParamToRight", "output", "input"],
        ["whileNot", "output", u"*",
            ["splitLeftCharacter", "output", "param1"],
            ["deleteRightCharacter", "output"],
        ]
    ]
]

パターンの後ろの命令文リストの羅列がブロックになります。変数の中身がパターンにマッチングするかしないかで、ブロック内の命令を実行するか、しないかを制御します。例のように、ブロック内にさらに制御文を書くこともできます。

制御キーワード 説明
if 変数がパターンにマッチする場合のみ、ブロック内の処理を実行する。
ifNot 変数がパターンにマッチしない場合のみ、ブロック内の処理を実行する。
while 変数がパターンにマッチする場合、ブロック内の処理を実行し、実行後も変数がパターンにマッチする場合は、繰り返し、ブロック内の処理を実行する。
whileNot 変数がパターンにマッチしない場合、ブロック内の処理を実行し、実行後も変数がパターンにマッチしない場合は、繰り返し、ブロック内の処理を実行する。

パターンとマッチ

ぽわみスクリプトでの仕様の詳細はこちらをご覧ください。

このスクリプトでもパターンは全角文字で指定しますが、元々の正規表現に少しでも近づけるために、ぽわみスクリプトから使用する 文字を変更しております。

ぽわみスクリプト→Pspy

元々の正規表現との違い

ぽわみスクリプトのパターンに使用する正規表現と元々の正規表現には一部違いがあるので、注意する必要があります。

もともとは直前の文字の0回以上の繰り返しにマッチしますが、ぽわみスクリプトではこれ以外に自身にもマッチします。

また、だけの場合は、空文字列のみとマッチングします。

もともとは直前の0文字以上1文字以下を削除した文字列にマッチしますが、ぽわみスクリプトではこれ以外に自身にもマッチします。

About

人にとって意味が分かるスクリプトをぽわみスクリプトに変換するPythonモジュールです

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages