Pretende-se construir uma gramática atributiva (em C++) que avalie expressões lógicas. As expressões podem ser constituídas por literais p ou q, ou por aplicações dos operadores lógicos: @ (conjunção lógica – operador binário), / (disjunção lógica inclusiva – operador binário), # (negação lógica – operador unário). Assuma que os terminais p e q têm definido o atributo booleano val (respectivamente, igual ao valor C++ true, para verdadeiro; e false, para falso). O operador unário tem precedência superior aos binários e @ tem precedência superior a /. É possível usar parênteses (curvos) para alterar as precedências.