Eliminando a recursão esquerda na regra de espírito do analisador x3

Atualmente, estou preso a uma regra que estou tentando analisar usando o boost spirit x3. Aqui está o EBNF (usando o operador% from spirit para listas) para o que estou tentando analisar:

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, estou tentando analisar a seguinte estrutura / 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_;
    };

Eu tenho um exemplo ao vivo do que estou tentando atualmenteaqui, que não está funcionando, também tentei alterar a ordem do analisador de variantes, o que não ajuda, recebo recusões sem fim ou não o comportamento que eu esperaria (ou desejaria). Alguém pode me ajudar a depurar esse analisador? Acho que tenho algum tipo de recursão à esquerda no analisador, existe uma chance de evitar isso ou não há chance de reescrever a gramática? Esse gramar é parsável com o boost spirit x3?

EDITAR:

Consegui eleminar a recursão esquerda nesta gramática. Agora, a gramática é a seguinte:

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

mas agora há o próximo problema, como posso fazer o boost spirit x3 analisar essas regras nas estruturas fornecidas? Não consigo imaginar o queA&nbsp;ou oone_arg_lambda&nbsp;analisadores estão retornando agora, oone_arg_lambda&nbsp;analisador deve analisar em umLambdaType&nbsp;estrutura, mas dependendo do queA&nbsp;analisa o que não é necessário agora. Portanto, a questão agora é: como posso obter um analisador recursivo não esquerdo, que analisa a gramática acima em minhas estruturas usando o boost-spirit-x3?

EDIÇÃO II:

eu gostaria=>&nbsp;estar certo associativo assimfoo => bar => baz => baham
significafoo => (bar => (baz => bahama))