我正在考虑如何解析以下输入:
comment =' @Class wordinfo dict<<position:int>,wordinfo:str>\n ' + \
'@Class instances dict<<word:str>,instances:atomicint> '
对于特定输出:
{'wordinfo': {'columns': [('wordinfo', 'text')],
'primary_keys': [('position', 'int')],
'type': 'StorageDict'},
'instances': {'columns': [('instances', 'counter')],
'primary_keys': [('word', 'text')],
'type': 'StorageDict'}
}
正如我们在上面看到的,我需要把字典的键作为主键,然后我可以有一个或多个值作为列,首先我总是有变量名,然后是变量类型,我问自己是否有一些基本的方法来得到我想要的结果,因为我不是pyparsing的专家。是否可行?我需要做些什么
第一步是编写一个BNF。你已经开始这样想了,当你写:我需要把字典的键作为主键,然后我可以有一个或多个值作为列,首先我总是有变量名,然后是变量类型
将此转换为更正式的内容:
嗯,
identifier : value_type
在几个地方,让我们称之为var_decl
并重写。另外,我认为通过在<>
中定义一个逗号分隔的列表,您有可能拥有复合主键,我们在几个地方使用这种列表。重写:然后自下而上用解析术语定义这些:
最后,输入结果名称,以便在解析后更容易地挑出不同的部分:
然后使用以下方法分析文本:
打印出你得到的信息:
或者更好:
这是完全未经检验,可能是一个不匹配的帕伦在那里,但这是一般的想法。但即使最后使用的不是pyparsing,也要从BNF开始。这将真正有助于澄清你的想法,和一般概念的问题
相关问题 更多 >
编程相关推荐