100 lines
1.6 KiB
Rexx
100 lines
1.6 KiB
Rexx
/* REXX */
|
|
tok.=''
|
|
Do i=0 To 6
|
|
tok.i="'Payload#"i"'"
|
|
End
|
|
t1='[[[1,2],[ 3,4,1],5]]'
|
|
t2='1[[[1,6]],[[3,4[7] 0],5]3]9 [8] 9'
|
|
Call transform t1
|
|
Call transform t2
|
|
Exit
|
|
|
|
transform:
|
|
Parse Arg t 1 tt
|
|
t=space(t,0)
|
|
lvl=0
|
|
t.=0
|
|
used.=0
|
|
undefined=''
|
|
Do While t<>''
|
|
Parse Var t c +1 t
|
|
Select
|
|
When c='[' Then
|
|
lvl=lvl+1
|
|
When c=']' Then
|
|
lvl=lvl-1
|
|
When c=',' Then
|
|
Nop
|
|
Otherwise Do
|
|
t=c||t
|
|
p1=pos(']',t)
|
|
p2=pos('[',t)
|
|
Select
|
|
When p2=0 Then p=p1
|
|
When p1=0 Then p=p2
|
|
Otherwise p=min(p1,p2)
|
|
End
|
|
If p=0 Then Do
|
|
Call mem lvl': >'t'<'
|
|
t=''
|
|
End
|
|
Else Do
|
|
Call mem lvl': >'left(t,p-1)'<'
|
|
t=substr(t,p)
|
|
End
|
|
End
|
|
End
|
|
End
|
|
Call show
|
|
Return
|
|
|
|
mem:
|
|
z=t.0+1
|
|
t.z=arg(1)
|
|
t.0=z
|
|
Return
|
|
|
|
show:
|
|
Say tt
|
|
Say 'lvl Element'
|
|
Do i=1 To t.0
|
|
Parse Var t.i lvl ':' '>' cont '<'
|
|
ol=right(lvl,3) copies(' ',lvl*3)cont(cont)
|
|
Say ol
|
|
End
|
|
Do i=0 To 6
|
|
If used.i=0 Then Say 'Payload' i 'not used'
|
|
End
|
|
Do While undefined>''
|
|
Parse Var undefined i undefined
|
|
Say 'Payload' i 'is not defined'
|
|
End
|
|
Call o ' '
|
|
Return
|
|
|
|
cont: Procedure Expose tok. used. undefined
|
|
Parse Arg list
|
|
list=translate(list,' ',',')
|
|
res=''
|
|
Do while list>''
|
|
Parse Var list i list
|
|
res= res tok(i)','
|
|
End
|
|
res=strip(res)
|
|
res=strip(res,'T',',')
|
|
Return res
|
|
|
|
tok: Procedure Expose tok. used. undefined
|
|
Parse Arg i
|
|
If tok.i<>'' Then Do
|
|
used.i=1
|
|
Return tok.i
|
|
End
|
|
Else Do
|
|
If wordpos(i,undefined)=0 Then
|
|
undefined=undefined i
|
|
Return "'Payload#"i "not defined'"
|
|
End
|
|
|
|
o: Say arg(1)
|
|
Return
|