我正在使用 pyparsing 来解析以下输入:
%FSLAX45Y67*%
我以字典形式追求的输出格式是:
{
'notation': 'absolute',
'zeros': 'leading',
'x': {
'integer': 4,
'decimal': 5
},
'y': {
'integer': 6,
'decimal': 7,
},
'gerber-command': 'FS'
}
我目前得到的输出是:
{
'notation': 'absolute',
'decimal': 6,
'zeros': 'leading',
'integer': 6,
'y': ([6, 6], {'integer': [(6, 0)], 'decimal': [(6, 1)]}),
'x': ([6, 6], {'integer': [(6, 0)], 'decimal': [(6, 1)]}),
'gerber-command': 'FS'
}
(请注意,我的问题不是关于如何使输出看起来正确,而是如何使 pyparsing 以我想要的方式排列数据。)
使用以下代码:
single_digit = pyp.Regex(r'(\d)').setParseAction(lambda t: int(t[0]))
cmd_format = pyp.Literal('FS')
cmd_format_opt_leading_zeros = pyp.Literal('L').setParseAction(pyp.replaceWith('leading'))
cmd_format_opt_trailing_zeros = pyp.Literal('T').setParseAction(pyp.replaceWith('trailing'))
format_zeros = ((cmd_format_opt_leading_zeros('zeros')) |
(cmd_format_opt_trailing_zeros('zeros')))
format_notation = ((cmd_format_opt_absolute('notation')) |
(cmd_format_opt_incremental('notation')))
format_data = (single_digit)('integer') + single_digit('decimal')
gformat = (inst_del +
cmd_format('gerber-command') +
format_zeros +
format_notation +
'X' + (format_data)('x') +
'Y' + (format_data)('y') +
inst_end +
inst_del)
(省略了一些琐碎的定义)。有什么建议么?