Here is what we have:
; //////start/////////
linkargs <- linkargs-sa* linkargs-1
linkargs-1 <- BE-clause free* term links? BEhO-clause? free*
SPACE linkargs-sa <- linkargs-start (!linkargs-start (sa-word / SA-clause !linkargs-start ) )* SA-clause &linkargs-1
linkargs-start <- BE-clause
;; links <- BEI-clause free* term links?
links <- links-sa* links-1
links-1 <- BEI-clause free* term links?
; ////////end//////////
Now why links contains links-1 which again contains links?
Why recursion here?
There cannot be any branching / right-grouping here since "term" parallels "term" in "sentence" where we have:
terms-1 <- terms-2 (pehe-sa* PEhE-clause free* joik-jek terms-2)*
terms-2 <- term (cehe-sa* CEhE-clause free* term)*
Why not have something like:
links <- (links-sa* BEI-clause free* term)+
or
links <- BEI-clause free* term (links-sa* BEI-clause free* term)*
?