Spirit Parser Framework - Spirit Parser Framework - Wikipedia
![]() | tento článek ne uvést žádný Zdroje.Listopad 2012) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
The Spirit Parser Framework je objektově orientovaný rekurzivní sestup generátor analyzátoru framework implementován pomocí šablony metaprogramování techniky. Šablony výrazů umožnit uživatelům přibližnou syntaxi souboru rozšířená forma Backus – Naur (EBNF) zcela dovnitř C ++. Analyzované objekty se skládají prostřednictvím přetížení operátora a výsledkem je ústup LL (∞) analyzátor, který je schopen analyzovat spíše dvojznačný gramatiky.
Spirit lze použít pro oba lexing a parsování, společně nebo samostatně.
Tento rámec je součástí Posilujte knihovny.
Operátoři
Z důvodu omezení jazyka C ++ byla syntaxe Spirit navržena kolem operátorových priorit C ++, přičemž je podobná oběma EBNF a regulární výrazy.
syntax | vysvětlení |
---|---|
x >> y | Shoda x následovaná y. |
x> y | Po shodě x očekávejte y. |
*X | Zápas x opakování nula nebo vícekrát. To představuje Kleene hvězda; C ++ postrádá unární postfix operátor *. |
x | y | Zápas x. Pokud x neodpovídá, zkuste najít shodu y. |
+ x | Porovnejte sérii jednoho nebo více výskytů x. |
-X | Zápas x nula nebo jednou. |
x & y | Porovnejte x a y. |
x - y | Porovnejte x, ale ne y. |
x ^ y | Porovnejte x, y nebo obojí v libovolném pořadí. |
x || y | Porovnejte x nebo y nebo x následované y. |
X [ function_expression ] | Proveďte funkci / funktor vrácenou funkcí_výraz, pokud x odpovídá. |
( X ) | Shoda x (lze použít pro prioritní seskupení) |
x% y | Porovnejte jeden nebo více výskytů x oddělených výskytem y. |
~ x | Přiřaďte cokoli kromě x (pouze s třídami znaků, jako je ch_p nebo alnum_p) |
Příklad
Tento příklad ukazuje, jak použít vložený výraz syntaktického analyzátoru se sémantickou akcí.
#zahrnout <string>#zahrnout <iostream>#zahrnout <boost/spirit/include/qi.hpp>#zahrnout <boost/spirit/include/phoenix.hpp> int hlavní(){ jmenný prostor Qi = podpora::duch::Qi; std::tětiva vstup; std::cout << "Zadejte řádek: n"; getline(std::cin, vstup); std::cout << "Mám" " << vstup << "'. n"; nepodepsaný počet = 0; /* Dále analyzujte vstup (input.c_str ()), pomocí analyzátoru konstruovaného s následující sémantikou: Nula nebo více výskytů ( doslovný řetězec "kočka" (při shodě zvýší počítadlo "počet") nebo jakýkoli znak (který bude přeskočen) ) Analyzátor je konstruován kompilátorem pomocí přetížení operátoru a porovnávání šablon, takže skutečná práce se provádí v rámci qi :: parse () a výraz začínající * pouze inicializuje objekt pravidla, který analyzuje funkce používá. */ auto pravidlo = *(Qi::svítí("kočka") [ ++Qi::_val ] | Qi::vynechat[Qi::char_]); Qi::analyzovat(vstup.začít(), vstup.konec(), pravidlo, počet); // Nakonec zobraz výsledky. std::cout << „Vstup obsahuje“ << počet << „výskyty„ kočky “ n";}
externí odkazy
- Duchový analyzátor framework SourceForge
- Dokumentace v projektu Boost
- Článek o duchu od designéra Joela de Guzmana v časopise Dr. Dobb's Journal
![]() | Tento programovací nástroj související článek je a pahýl. Wikipedii můžete pomoci pomocí rozšiřovat to. |