Analisar aritmética booleana, incluindo parênteses com regex?

Existe uma única expressão regular que pode analisar uma string (em Python e / ou Javascript, não precisa ser a mesma expressão) que representa aritmética booleana simples? Por exemplo, eu quero analisar esta string:

a and (b and c) and d or e and (f or g)

Assumindo que:
* parênteses não aninham
* os termos a, b, ..., z não são sub-expressões

As capturas resultantes devem ser agrupadas primeiro por parênteses, que depois analisamos novamente com o mesmo ou com um regex mais simples.

Tive sucesso escrevendo uma regex ingênua para analisar aritmética booleana sem parênteses.

Alguma ideia?

questionAnswers(3)

yourAnswerToTheQuestion