import re, sys, json def tokenize(s): tok=[]; i=0; n=len(s) while i2 and isinstance(f[2],str) else '' props={} for p in find(c,'property'): nm=first(p,'name')[1]; v=first(p,'value'); props[nm]=v[1] if v else '' comps[ref]=dict(value=val, fp=fp, fields=fields, props=props, dnp=bool(find(c,'dnp')) or props.get('dnp') is not None) nets={} for nt in find(first(tree,'nets'),'net'): name=first(nt,'name')[1] nodes=[] for nd in find(nt,'node'): ref=first(nd,'ref')[1]; pin=first(nd,'pin')[1]; pf=first(nd,'pinfunction',[None,''])[1]; pt=first(nd,'pintype',[None,''])[1] nodes.append((ref,pin,pf,pt)) nets[name]=nodes # pin->net map pinnet={} for name,nodes in nets.items(): for ref,pin,pf,pt in nodes: pinnet[(ref,pin)]=name return comps,nets,pinnet if __name__=="__main__": comps,nets,pinnet=load(sys.argv[1]) print(len(comps),"components,",len(nets),"nets")