Fully parenthesize expressions
JavaScript (ES6), 208 197 bytes
s=>((q=x=>x.map((_,i)=>(a=[...x.slice(0,i*=2),p="("+x[i]+x[++i]+x[++i]+")",...x.slice(i+1)],x[i]?a[1]?q(a):r.push(p):0)))([...s.replace(/ /g,o="")],r=[]),r.map((l,i)=>r.indexOf(l)<i?0:o+=l+`
`),o)
Explanation
Uses a recursive function that takes an array of [ t, o, t, o, etc... ]
and parenthesises each consecutive pair of two terms together like [ (tot), o, etc... ]
and repeats this process until there is only one element in the array, then filters out the duplicate values.
s=>( // s = input string
(q=x=> // q = parenthesise array function
x.map((_,i)=>(
a=[ // a = p with parenthesised pair of terms
...x.slice(0,i*=2),
p="("+x[i]+x[++i]+x[++i]+")", // parenthesise and join 2 terms and an operator
...x.slice(i+1)
],
x[i]?a[1] // make sure the loop is not over
?q(a) // check next level of permutations
:r.push(p) // add the permutation to the results
:0
))
)([...s.replace(/ /g, // remove spaces and parenthesise all expressions
o="")], // o = output string
r=[]), // r = array of result strings
r.map( // filter out duplicates
(l,i)=>r.indexOf(l)<i?0:o+=l+`
`
),o) // return o
Test
Input = <input type="text" id="input" value="a * b|c|d" /><button onclick='results.innerHTML=(
s=>((q=x=>x.map((_,i)=>(a=[...x.slice(0,i*=2),p="("+x[i]+x[++i]+x[++i]+")",...x.slice(i+1)],x[i]?a[1]?q(a):r.push(p):0)))([...s.replace(/ /g,o="")],r=[]),r.map((l,i)=>r.indexOf(l)<i?0:o+=l+`
`),o)
)(input.value)'>Go</button><pre id="results"></pre>
Pyth, 38 bytes
L?tbsmmjj@bdk"()"*y<bdy>bhd:1lb2bjy-zd
Try it online.
It defines a recursive function that:
- returns the input if its length is 1
- takes all two-splits of the input on operators, and for each split:
- calls itself recursively on each of the halves
- takes the Cartesian product of the results of each half
- joins each result by the operator at the split
- parenthesizes the joined result
- and finally concatenates the resulting arrays.
The function is then called with the input string with spaces removed and the results are joined by newlines.