スクリプト読み込み

ちなみPythonでも作りました。

from string import *

def readText(f, line, param, type):
	key = "dummy"
	while True:
		while True:
			line = line.lstrip()
			nEq   = line.find("=")
			nList = line.find("[")
			eList = line.find("]")
			nMap  = line.find("{")
			eMap  = line.find("}")
			nDlm  = line.find(",")

			if(nEq == -1 and nList == -1 and eList == -1 and nMap == -1 and eMap == -1 and nDlm == -1):
				# 空行
				line = f.readline()
				if(line == ""):
					# EOF
					print "exit"
					return f, line, param
				else:
					continue
			else:
				# 先頭にある区切り文字を探す
				idxMap = {"nEq":nEq, "nList":nList, "eList":eList, "nMap":nMap, "eMap":eMap, "nDlm":nDlm}
				nMin = 256
				for k, v in idxMap.iteritems():
					if(v == -1): continue
					if(v < nMin):
						nMin = v
						minType = k
				break;
		if(minType == "nEq"):
			key = line[0:nMin]
			line = line[nMin+1:]
			continue
		elif(minType == "nList"):
			line = line[nList+1:]
			valueList = []
			f, line, valueList = readText(f, line, valueList, "list")
			if(type == "map"):
				param[key] = valueList;
			else: # type == "list"
				param.append(valueList)
			continue
		elif(minType == "eList"):
			line = line[eList+1:]
			return f, line, param
		elif(minType == "nMap"):
			line = line[nMap+1:]
			valueMap = {}
			f, line, valueMap = readText(f, line, valueMap, "map")
			if(type == "map"):
				param[key] = valueMap;
			else: # type == "list"
				param.append(valueMap)
			continue
		elif(minType == "eMap"):
			line = line[eMap+1:]
			return f, line, param
		elif(minType == "nDlm"):
			value = line[0:nDlm]
			if(value != ""):
				if(type == "map"):
					param[key] = value;
				else: # type == "list"
					param.append(value)
			line = line[nDlm+1:]
			continue
		else:
			print param
			raise "Syntax Error"

def main():
	f = open("data.txt")

	line = f.readline() # 空読み
	root = {}
	
	line = f.readline()

	f, line, root = readText(f, line, root, "map")
	
	print "---result---"
	print root
	f.close()

if(__name__ == "__main__"):
	main()

やっぱりPythonの方が簡単ですね…。
動的型付け万歳です。(´▽`;