自作言語のお時間です
最近寒すぎて凍死しそうです、、、、
また作りました
はい、アップデートしました。主な変更点としては、
- エラー機能/エラーも自作しました。自作しないとあんま愛着がわかないんですよね。
- class/なんちゃってですけど遂にクラスを実装しました。オブジェクト思考、万歳!
- printしたときになぜか空白が出るのを何とかして無くしました。
- ファイル数が格段に少なくなりました。
- そのおかげで実行が軽くなりました!
そんなOmega-version0.1.0はこちらから(Github)
->https://github.com/pythonmaster1027/Omega-version0.1.0
とりまコード
ファイル階層
(任意のディレクトリ)
├ main.py
└ Omega.bat
コードがめっちゃ少なくなりました。
main.py
import os
import sys
class Start:#startして欲しいので
def __init__(self):#初期化
try:
self.f = open(sys.argv[1], "r", encoding="utf_8")
except IndexError:
print("ファイル名を指定して下さい")
sys.exit()
except FileNotFoundError:
print("ファイルが見つかりません")
print("解決するには:ファイルパスをフルパスにする")
sys.exit()
self.r = self.f.readlines()
self.re = self.f.read()
self.dic1 = {}
def run(self):#runしてほしいので
if "class Main{\n" in self.r:
for line in self.r:
line = line.replace(" ", "").replace(" ", "").split("//")[0]#line = self.fから一行ずつ読み込まれたプログラム
#print
if "print" and '"' in line:
pr = line.replace("print", "").replace("{", "").replace("}", "").replace('"', "")
print(pr)
#変数の定義
elif line.startswith("int") or line.startswith("str"):
self.var = line.replace('\n', "")
varname = self.var.split("=")[0]#変数名
if line.startswith("int"):
try:
self.ele = eval(self.var.split("=")[-1].replace("int", ""))#int型の要素
except NameError:
print("Err: NameErr")
self.ele = "Not int"
elif line.startswith("str"):
self.ele = self.var.split("=")[-1].replace("str", "")#int型の要素
self.dic1[varname] = self.ele
#引数に変数を指定するprint
elif "print" in line:
line = line.replace("print", "").replace("{", "").replace("}", "").replace("\n", "")
print(self.dic1[line])
elif line in "\n":
pass
else:
print("Err: クラス[Main]が見つかりません")
sys.exit()
#実行関数の定義
def main():
s = Start()
s.run()
#実行部
if __name__ == '__main__':
main()
pythonコード、これだけです。たったの。次、Omega.bat.
Omega.bat
@echo off
main.py %1
まとめ
この言語、ファイル実質2ファイルだけで構成されてるんです。とゆーか2ファイルだけで言語作れんのってすごい。
次は関数定義も実装したいと思います。