Boost :: Spirit compondo gramas de gramáticas
-
24-09-2019 - |
Pergunta
Eu descobri como usar o espírito - ou seja, escrevi uma gramática moderadamente complexa. Eu sempre adoto a abordagem do crescimento de um programa - um subsistema de cada vez. Escrevi as estruturas de dados para um modelo complexo que possui 4 tipos no nível mais alto.
Eu gostaria de usar o Gramática composta pela abordagem de regras Para analisar os tipos de nível superior um tipo de cada vez - por exemplo, quero escrever 4 gramáticas com uma gramática de nível superior. Se isso for possível (o que estou começando a duvidar), alguém poderia postar um snippet ou uma referência a um projeto que faça isso.
Uma gramática de nível superior com mais de 50 (mais (muito mais) regras (para o manuseio de erros adequada) não parece divertido (o código TMP é volátil / lento para compilar e fornece mensagens de erro inúteis).
Solução
simplificado de um programa real, Qi deve funcionar da mesma forma que Carma.
template<class Iter>
struct subgrammar_1
: karma::grammar<Iter, ...>
{
...
}
template<class Iter>
struct top_level_grammar
: karma::grammar<Iter, ...>
{
top_level_grammar() : top_level_grammar::base_type(start)
{
start %= r1 | r2;
}
karma::rule<Iter, ...> r1;
subgrammar_1<Iter> r2;
...
}