テキストから Node Graph 作成
Node Graph のデータをテキストにしてみます。
テキストデータ
各行でノードを定義する。 左辺に名前、右辺に定義を書く。 右辺がリストとして解釈された場合、第一要素には型名、第二要素には接続元のリストを記述する。 リスト型で解釈されない場合は値を保持するだけのノードとみなす。
a="月日は" b="百代の過客にして" c="行かふ年も" d="又旅人也" e=["Add",["a","b"]] f=["Add",["c","d"]] g=["Add",["e","f"]] h=0.1 i=1 j=["Add",["h","i"]]
Python
テキストデータを読み込んでノードに変換する。
# conding: utf-8 import json,codecs # 値を保持するだけのノード class Value: def __init__(self, in_value): self.value = in_value def __call__(self): return self.value # 加算ノード class Add: def __init__(self, in_x, in_y): self.x = in_x self.y = in_y def __call__(self): return self.x() + self.y() # ファイル読み込み def load(path): nodes = {} # 右辺評価 def _rhs(exp): x = json.loads(exp) if isinstance(x, list): node, args = x return (globals()[node])(*[nodes[a] for a in args]) else: return Value(x) # 一行ずつ解釈 with codecs.open(path, 'rb', 'utf-8-sig') as f: for s in f.readlines(): k, v = [x.strip() for x in s.split('=',1)] nodes[ k ] = _rhs(v) return nodes # ファイルを読み込んでグラフ作成 graph = load('data.txt') # ノードを評価 print(graph["g"]()) print(graph["j"]())
実行結果
月日は百代の過客にして行かふ年も又旅人也 1.1
パーサー書くの面倒くさい。