Прошу прощения, вдруг вдохновение пришло, наваял программу, которая регекспами решает большую задачу топика
http://pastebin.com/7PQQYg7AТ.е. на входе было
testStrings.append("obj1{act1[p1=v1;p2=v2]|act2[p1=v2]}|||"
"obj2{act3[p1=v1]|act2[p1=v1;p2=v2]}|||") ;
testStrings.append( "obj2{act3[p1=v1]|act2[p1=v1;p2=v2]}|||" );
testStrings.append( "obj1{act1[p1=v1]|act2[p1=v2]}|||"
"obj2{act3[p1=v1]|act2[p1=v1;p2=v2];p2=v2]}|||"
"obj3{act3[p1=v1]}|||" );
testStrings.append( "obj1{act1[p1=v1]|act2[p1=v2]}|||"
"obj2{act3[p1=v1]|act2[p1=v1;p2=v2];p2=v2]}|||"
"obj3{act3[p1=v1]}|||" );
на выходе получилось
string to process: "obj1{act1[p1=v1;p2=v2]|act2[p1=v2]}|||obj2{act3[p1=v1]|act2[
p1=v1;p2=v2]}|||"
command: "obj1{act1[p1=v1;p2=v2]|act2[p1=v2]}|||"
object name: "obj1"
all actions: "act1[p1=v1;p2=v2]|act2[p1=v2]"
action: "act1[p1=v1;p2=v2]"
action name: "act1"
all parameters: "p1=v1;p2=v2"
a pair: "p1=v1"
parameter "p1" with value "v1"
a pair: "p2=v2"
parameter "p2" with value "v2"
action: "act2[p1=v2]"
action name: "act2"
all parameters: "p1=v2"
a pair: "p1=v2"
parameter "p1" with value "v2"
command: "obj2{act3[p1=v1]|act2[p1=v1;p2=v2]}|||"
object name: "obj2"
all actions: "act3[p1=v1]|act2[p1=v1;p2=v2]"
action: "act3[p1=v1]"
action name: "act3"
all parameters: "p1=v1"
a pair: "p1=v1"
parameter "p1" with value "v1"
action: "act2[p1=v1;p2=v2]"
action name: "act2"
all parameters: "p1=v1;p2=v2"
a pair: "p1=v1"
parameter "p1" with value "v1"
a pair: "p2=v2"
parameter "p2" with value "v2"
------------------------------------------------------
string to process: "obj2{act3[p1=v1]|act2[p1=v1;p2=v2]}|||"
command: "obj2{act3[p1=v1]|act2[p1=v1;p2=v2]}|||"
object name: "obj2"
all actions: "act3[p1=v1]|act2[p1=v1;p2=v2]"
action: "act3[p1=v1]"
action name: "act3"
all parameters: "p1=v1"
a pair: "p1=v1"
parameter "p1" with value "v1"
action: "act2[p1=v1;p2=v2]"
action name: "act2"
all parameters: "p1=v1;p2=v2"
a pair: "p1=v1"
parameter "p1" with value "v1"
a pair: "p2=v2"
parameter "p2" with value "v2"
------------------------------------------------------
string to process: "obj1{act1[p1=v1]|act2[p1=v2]}|||obj2{act3[p1=v1]|act2[p1=v1;
p2=v2];p2=v2]}|||obj3{act3[p1=v1]}|||"
command: "obj1{act1[p1=v1]|act2[p1=v2]}|||"
object name: "obj1"
all actions: "act1[p1=v1]|act2[p1=v2]"
action: "act1[p1=v1]"
action name: "act1"
all parameters: "p1=v1"
a pair: "p1=v1"
parameter "p1" with value "v1"
action: "act2[p1=v2]"
action name: "act2"
all parameters: "p1=v2"
a pair: "p1=v2"
parameter "p1" with value "v2"
command: "obj2{act3[p1=v1]|act2[p1=v1;p2=v2];p2=v2]}|||"
object name: "obj2"
all actions: "act3[p1=v1]|act2[p1=v1;p2=v2];p2=v2]"
action: "act3[p1=v1]"
action name: "act3"
all parameters: "p1=v1"
a pair: "p1=v1"
parameter "p1" with value "v1"
action: "act2[p1=v1;p2=v2]"
action name: "act2"
all parameters: "p1=v1;p2=v2"
a pair: "p1=v1"
parameter "p1" with value "v1"
a pair: "p2=v2"
parameter "p2" with value "v2"
command: "obj3{act3[p1=v1]}|||"
object name: "obj3"
all actions: "act3[p1=v1]"
action: "act3[p1=v1]"
action name: "act3"
all parameters: "p1=v1"
a pair: "p1=v1"
parameter "p1" with value "v1"
------------------------------------------------------
string to process: "obj1{act1[p1=v1]|act2[p1=v2]}|||obj2{act3[p1=v1]|act2[p1=v1;
p2=v2];p2=v2]}|||obj3{act3[p1=v1]}|||"
command: "obj1{act1[p1=v1]|act2[p1=v2]}|||"
object name: "obj1"
all actions: "act1[p1=v1]|act2[p1=v2]"
action: "act1[p1=v1]"
action name: "act1"
all parameters: "p1=v1"
a pair: "p1=v1"
parameter "p1" with value "v1"
action: "act2[p1=v2]"
action name: "act2"
all parameters: "p1=v2"
a pair: "p1=v2"
parameter "p1" with value "v2"
command: "obj2{act3[p1=v1]|act2[p1=v1;p2=v2];p2=v2]}|||"
object name: "obj2"
all actions: "act3[p1=v1]|act2[p1=v1;p2=v2];p2=v2]"
action: "act3[p1=v1]"
action name: "act3"
all parameters: "p1=v1"
a pair: "p1=v1"
parameter "p1" with value "v1"
action: "act2[p1=v1;p2=v2]"
action name: "act2"
all parameters: "p1=v1;p2=v2"
a pair: "p1=v1"
parameter "p1" with value "v1"
a pair: "p2=v2"
parameter "p2" with value "v2"
command: "obj3{act3[p1=v1]}|||"
object name: "obj3"
all actions: "act3[p1=v1]"
action: "act3[p1=v1]"
action name: "act3"
all parameters: "p1=v1"
a pair: "p1=v1"
parameter "p1" with value "v1"
------------------------------------------------------
Замечания:
1) на самом деле нужно было бы разнести код по отдельным процедурам. Кроме того, там по сути все время используется два одинаковых случая (разбивка строки на кусочки и разделение строки на "имя" и "строку со списком чего-то"). Соответственно, можно было бы сделать две универсальных процедуры
2) да, теоретически можно было бы для разбивания строк использовать split()
3) отдельно интересно было бы посмотреть на производительность
4) полный контроль синтаксиса. Если на вход будет подан текст с ошибкой, ее легко будет обнаружить.
5) весь разбор -- всего около ста строк