次の入力を解析するために 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)
(いくつかの些細な定義は省略されています)。助言がありますか?