Framework Analizador Spirit
El artículo sucumbió a un borrado rápido. Ver el registro de borrado en Wikipedia
El Framework Analizador Spirit es un framework analizador de texto orientado a objetos, técnicas de metaprogramación. Las plantillas de expresiones permiten a los usuarios aproximar la sintaxis de BNF Extendido (EBNF) completamente en C++. Los objetos analizadores están compuestos por medio de la sobrecarga de operadores y el resultado es un analizador LL(∞) retrocedido que puede analizar gramáticas ambiguas.
Spirit puede ser utilizado para análisis léxico y análisis, junto o por separado.
Este framework es parte de las bibliotecas boost .
Operadores
Debido a limitaciones del lenguaje C++, la sintaxis de Spirit ha sido diseñada alrededor de las precedencias de operadores de C++, agregando parecido a ambos EBNF y expresiones regulares.
Ejemplo
Estos espectáculos de ejemplo cómo para utilizar un inline parser expresión con una acción semántica.
#include <string>
#include <iostream>
#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/phoenix.hpp>
int main()
{
namespace qi = boost::spirit::qi;
std::string input;
std::cout << "Input a line: \n";
getline(std::cin, input);
std::cout << "Got '" << input << "'.\n";
unsigned count = 0;
/*
Next, parse the input (input.c_str()),
using a parser constructed with the following semantics:
Zero or more occurrences of (
literal string "cat" (when matched, increment the counter "count")
or any character (which will be skipped)
)
The parser is constructed by the compiler using operator overloading and
template matching, so the actual work is done within qi::parse(), and the
expression starting with * only initializes the rule object that the parse
function uses.
*/
auto rule = *(qi::lit("cat") [ ++qi::_val ] | qi::omit[qi::char_]);
qi::parse(input.begin(), input.end(), rule, count);
// Finally, show results.
std::cout << "The input contained " << count << " occurrences of 'cat'\n";
}