Пожалуй, всё-таки тема не исчерпана и надо записать то, что накопилось. Начало темы - в телеге, не хочу повторяться.

Дано:
## Код:
```
IF ((rightType IS SyntaxTree.ArrayType) & (rightType(SyntaxTree.ArrayType).staticLength # 0) OR (rightType IS SyntaxTree.MathArrayType) & (rightType(SyntaxTree.MathArrayType).staticLength # 0)) & 
(leftType(SyntaxTree.ArrayType).staticLength # 0) THEN
```


Изначально всё условие было выписано в одну строку и это вызывало проблемы.
Основной мой тезис - при чтении этого выражения нужно держать в голове структуру дерева, при этом не на что опереться в тексте. Для правильного вычисления нужно знать, где находится голова выражения, а она находится почти в конце. Остальные части разбросаны где попало и, если хоть одна связка выпадает из головы, надо начинать сначала или будет ошибка. Надо придумать технологию, чтобы выписать условие так, чтобы оно легко читалось. Возможные решения:

Развить в голове специализированную нейронную сеть, чтобы стало читать легко (Сергей Дурманов, видимо, так сделал, я так думаю по той причине, что он шахматист, а они именно это и делают; хотя, если подходить научно, то нужно не просто принять на веру заявление Сергея, что он легко прочитал данный однострочник, но и проверить, правильно ли он его прочитал).нарисовать дерево так, чтобы было видно, где у него что. Здесь моё видение, как это должно выглядеть, на данный момент.
## Код:
```
IF
       (     (rightType IS SyntaxTree.ArrayType) 
           & (rightType(SyntaxTree.ArrayType).staticLength # 0)
        OR    
             (rightType IS SyntaxTree.MathArrayType) 
           & (rightType(SyntaxTree.MathArrayType).staticLength # 0)
       )
   & 
       (leftType(SyntaxTree.ArrayType).staticLength # 0) 
   THEN
```


Хотя у других - другое видение, но третьи и ошиблись, читая другое видение. На моё видение никто не отреагировал, поэтому не могу судить о его качестве. На мой взгляд, всё ещё есть риск упустить "&" в голове выражения и ошибиться, т.к. это "&" находится слишком далеко от IF, и с этим ничего сделать в рамках данного подхода нельзя. При этом обязательно создание инструмента, который будет автоматически форматировать код в дерево по этим правилам - вручную будут ошибки.префиксная форма операторов. Такая форма в лиспе, но есть она и в Mathematica. Будет что-то вроде:
## Код:
```
[[&]](
     [[OR]](
          [[&]]((rightType IS SyntaxTree.ArrayType),
                  (rightType(SyntaxTree.ArrayType).staticLength # 0))
          ,
          [[&]]((rightType IS SyntaxTree.MathArrayType),
                  (rightType(SyntaxTree.MathArrayType).staticLength # 0)))
     ,
     (leftType(SyntaxTree.ArrayType).staticLength # 0))
```
решение из Перла - два комплекта логических операций с разными приоритетами - уменьшают количество скобок. В идеальном случае будет так:
## Код:
```
IF 
       (     rightType IS SyntaxTree.ArrayType
           [[&]] rightType(SyntaxTree.ArrayType).staticLength # 0
        [[OR]]   
             rightType IS SyntaxTree.MathArrayType
           [[&]] rightType(SyntaxTree.MathArrayType).staticLength # 0
       )
   [[&]]
       leftType(SyntaxTree.ArrayType).staticLength # 0
   THEN
```

На мой взгляд, стало лишь немногим легче.рефакторинг - завести несколько логических переменных под каждое условие, тогда сами условия упростятсяпомечать скобки разного вида, например, скобки, отграничивающие OR в выражение (a OR b) писать как ((*OR*) a OR b (*OR*)). Получится так:

## Код:
```
IF ((*OR1*)(rightType IS SyntaxTree.ArrayType) & (rightType(SyntaxTree.ArrayType).staticLength # 0) OR (rightType IS SyntaxTree.MathArrayType) & (rightType(SyntaxTree.MathArrayType).staticLength # 0)(*OR1*)) & 
(leftType(SyntaxTree.ArrayType).staticLength # 0) THEN
```


Единичка - это номер подвыражения OR, в данном случае подвыражение только одно, но в общем случае их будет много и надо будет как-то различать разные скобки. В некоторых редакторах есть раскраска скобок цветами, это тоже может помочь.
Вроде всё. Плохо, что тут нельзя править первое сообщение темы спустя большое время, можно было бы накапливать в этом посте разные новые решения.