Elección de la recursión izquierda en el parser rule of spirit x3

Actualmente estoy atascado con una regla que estoy tratando de analizar usando boost spirit x3. Aquí está el EBNF (usando el operador% de espíritu para las listas) para lo que estoy tratando de analizar:

type ::= class_type | lambda_type

lambda_type ::= more_arg_lambda | one_arg_lambda

more_arg_lambda ::= "(", type%",", ")", "=>", type

one_arg_lambda ::= type, "=>", type  <- here is the left recursion

class_type ::= identifier%"::", ["<", type%",", ">"]

usng boost spirit x3, estoy tratando de analizar la siguiente estructura / variante:

typedef x3::variant<
        nil,
        x3::forward_ast<LambdaType>,
        x3::forward_ast<ClassType>
    > Type;

struct LambdaType {
        std::vector<Type> parameters_;
        Type return_type_;
    };
struct ClassType{
        std::vector<std::string> name_; 
        std::vector<Type> template_args_;
    };

Tengo un ejemplo en vivo de lo que estoy intentando actualmenteaquí, que no funciona, también intenté cambiar el orden del analizador de variantes, lo que no ayuda, obtengo una reclusión interminable o no el comportamiento que esperaría (o desearía). ¿Alguien puede ayudarme a depurar este analizador? Creo que tengo algún tipo de recursión izquierda en el analizador, ¿hay alguna posibilidad de evitar esto o no hay posibilidad de reescribir la gramática? ¿Se puede analizar esta gramática con boost spirit x3?

EDITAR:

Logré eliminar la recursión izquierda en esta gramática. Ahora la gramática es la siguiente:

type ::= class_type | lambda_type

    lambda_type ::= more_arg_lambda | one_arg_lambda

    more_arg_lambda ::= "(", type%",", ")", "=>", type

    one_arg_lambda ::= class_type, "=>" type, A
                       | "(", type%",", ")", "=>", type, "=>", type, A

    class_type ::= identifier%"::", ["<", type%",", ">"]

    A::= "=>", type, A | eps

pero ahora está el siguiente problema, ¿cómo puedo hacer que Boost Spirit x3 analice estas reglas en las estructuras dadas? No puedo imaginar lo que elA&nbsp;o laone_arg_lambda&nbsp;los analizadores están volviendo ahora, elone_arg_lambda&nbsp;analizador debe analizar en unLambdaType&nbsp;struct, pero dependiendo de quéA&nbsp;analiza eso no es necesariamente cierto ahora. Entonces, la pregunta es ahora, ¿cómo puedo obtener un analizador recursivo no izquierdo, que analiza la gramática anterior en mis estructuras usando boost-spirit-x3?

EDITAR II:

Me gustaría=>&nbsp;para ser correcto asociativo por lofoo => bar => baz => baham
mediofoo => (bar => (baz => bahama))