Код: Выделить всё
[Schedule_Step122]
m_nMaxCurrent=0
m_szAddIn=Relay OFF
m_szLabel=06 - End Charge
m_uLimitNum=2
[Schedule_Step122_Limit0]
Equation0_szCompareSign=>=
Equation0_szRight=F_05_Charge_Capacity
Equation0_szLeft=PV_CHAN_Charge_Capacity
m_bStepLimit=1
m_szGotoStep=End Test
[Schedule_Step122_Limit1]
Equation0_szCompareSign=>=
Equation0_szLeft=PV_CHAN_Voltage
Equation0_szRight=3
m_bStepLimit=1
m_szGotoStep=End Test
Мне бы хотелось, чтобы анализируемая структура выглядела примерно так:
Код: Выделить всё
"steps": [
{
"max_current": 0,
"add_in": RELAY_OFF,
"label": "09 - End Charge",
"limits": [
{
"equations": [
{
"left": PV_CHAN_CHARGE_CAPACITY,
"compare_sign": ">=",
"right": F_05_CHARGE_CAPACITY
}
],
"step_limit": 1,
"goto_step": END_TEST
},
{
"equations": [
{
"left": PV_CHAN_VOLTAGE,
"compare_sign": ">=",
"right": 6
}
],
"step_limit": 1,
"goto_step": END_TEST
}
]
}
]
Я также изучал определение контекстно-свободной грамматики и использование лексера/парсера, такого как ANTLR, PLY, pyparsing или Lark. Я знаком с чтением грамматик в документации, но раньше не писал и не использовал их с парсером. Однако я не знаю, как можно представить структуру вложенности (например, Schedule_Step122_Limit0, являющуюся членом Schedule_Step122) или отсутствие гарантированного порядка между связанными ключами (например, Equation0_szCompareSign, Equation0_szLeft). ` и т. д.).
Существует ли универсальный инструмент синтаксического анализа, для которого я мог бы написать определение, которое дало бы мне анализируемый/структурированный вывод? Или здесь лучше всего написать собственную логику синтаксического анализа?
Подробнее здесь: https://stackoverflow.com/questions/769 ... at-specifi