我为evice配置文件编写了一个解析器。接口有很多部分,它们包含一些配置命令。并且由于不同的设备(固件版本)可能具有不同的默认值,而且此时我不知道所有可能的命令---在这种情况下如何编写解析器?
当我写:
# for cisco:
iface = header \
+ iftype + ifname \
+ descr \
+ switchport_options \
+ SkipTo(comment).suppress() \
+ comment.suppress()
ifaces = Group(OneOrMore(iface))
---在这种情况下,我在ip address
令牌之前错过了descr
的所有接口。好的,我知道这一点,我可以对每个可能的命令使用Optional
,但是到目前为止我可能还有其他配置命令。
我得到一个接口列表,没有那些没有用我的语言定义解析过的接口。
我想我可以两次通过。首先,让所有ifaces
将其定义为“从interface
到comment
的所有内容”,然后尝试逐个解析它们。可能的例外情况将帮助我微调我的定义。
这是正确的方法吗?
我该怎么做?