我需要用Python解析类似下面的文本文件,构建数据的层次对象结构,然后处理它。这和我们能做的非常相似xml.etree.ElementTree以及其他XML解析器。在
然而,这些文件的语法不是XML,我想知道实现这样一个解析器的最佳方法是什么:如果试图将一个XML解析器子类化(哪一个?)并为标记识别定制其行为,编写自定义解析器等
{NETLIST topblock
{VERSION 2 0 0}
{CELL topblock
{PORT gearshift_h vpsf vphreg pwron_h vinp vref_out vcntrl_out gd meas_vref
vb vout meas_vcntrl reset_h vinm }
{INST XI21/Mdummy1=pch_18_mac {TYPE MOS} {PROP n="sctg_inv1x/pch_18_mac" Length=0.152 NFIN=8 }
{PIN vpsf=SRC gs_h=DRN vpsf=GATE vpsf=BULK }}
{INST XI21/Mdummy2=nch_18_mac {TYPE MOS} {PROP n="sctg_inv1x/nch_18_mac" Length=0.152 NFIN=5 }
{PIN gs_h=SRC gd=DRN gd=GATE gd=BULK }}
{INST XI20/Mdummy1=pch_18_mac {TYPE MOS} {PROP n="sctg_inv1x/pch_18_mac" Length=0.152 NFIN=8 }
{PIN vpsf=SRC gs_hn=DRN vpsf=GATE vpsf=BULK }}
{INST XI20/Mdummy2=nch_18_mac {TYPE MOS} {PROP n="sctg_inv1x/nch_18_mac" Length=0.152 NFIN=5 }
{PIN gs_hn=SRC gd=DRN gd=GATE gd=BULK }}
{INST XI19/Mdummy1=pch_18_mac {TYPE MOS} {PROP n="sctg_inv1x/pch_18_mac" Length=0.152 NFIN=8 }
{PIN vpsf=SRC net514=DRN vpsf=GATE vpsf=BULK }}
{INST XI19/Mdummy2=nch_18_mac {TYPE MOS} {PROP n="sctg_inv1x/nch_18_mac" Length=0.152 NFIN=5 }
{PIN net514=SRC gd=DRN gd=GATE gd=BULK }}
{INST XI21/MN0=nch_18_mac {TYPE MOS} {PROP n="sctg_inv1x/nch_18_mac" Length=0.152 NFIN=5 }
{PIN gd=SRC gs_h=DRN gs_hn=GATE gd=BULK }}
{INST XI21/MP0=pch_18_mac {TYPE MOS} {PROP n="sctg_inv1x/pch_18_mac" Length=0.152 NFIN=8 }
{PIN vpsf=SRC gs_h=DRN gs_hn=GATE vpsf=BULK }}
{INST XI20/MN0=nch_18_mac {TYPE MOS} {PROP n="sctg_inv1x/nch_18_mac" Length=0.152 NFIN=5 }
...
}
}
其他人在评论中说:使用现有的解析器。如果不存在,则使用自己的解析器库。在这里,例如使用Parcon:
结果:
^{pr2}$首先,您应该检查是否已经有一个解析器可用于您的文件格式。显然有:Python-based Verilog Parser (currently Netlist only)
如果找不到合适的库,可以使用过多的可用库之一构建解析器,例如pyparsing。将XML解析器子类化似乎不是一个好主意。在
相关问题 更多 >
编程相关推荐