| Geest Spirit is een object-georiënteerd recursief-afkomst parser generator framework geïmplementeerd met behulp van sjabloon meta-programmeertechnieken |
Download nu |
Geest Rangschikking & Samenvatting
- Vergunning:
- Boost Software Licen...
- Naam uitgever:
- Joel de Guzman
- Uitgever website:
- http://www.boost.org/doc/libs/1_35_0/libs/spirit/index.html
Geest Tags
Geest Beschrijving
Geest is een object-georiënteerd recursief-afkomst parser generator framework geïmplementeerd met behulp van sjabloon meta-programmeertechnieken Geest is een recursief afkomst object-georiënteerd parser-generator-kader geïmplementeerd met behulp van sjabloon meta-programmeertechnieken. Met expressiesjablonen kunnen we de syntaxis van uitgebreide backus-normale vorm (EBNF) volledig in C ++ benaderen. Het GRATIS-kader kan een doelgrammatica uitsluitend in C ++ worden geschreven. Inline EBNF Grammar-specificaties kunnen vrij mengen met andere C ++ -code en dankzij het generatieve vermogen van C ++ sjablonen zijn onmiddellijk uitvoerbaar. Achteraf te retrospecteren, moeten conventionele compiler-compilers of parser-generatoren een extra vertaling uitvoeren van de bron EBNF-code naar C of C ++ Code.a Simple EBNF Grammar Snippet: Groep :: = '(' Expression ')' Factor :: = integer | Groepstermijn :: = factor (('*' factor) | ('/' factor)) * Expression :: = Term (('+' Term) | ('-' Term)) * is benaderd met behulp van de faciliteiten van Geest In dit codefragment: groep = '(' >> expressie >> ')'; factor = integer | groep; Term = factor >> * (('*' >> factor) | ('/' >> factor)); Expression = Term >> * (('+' >> Term) ('-' >> Termijn)); door de magie van expressiesjablonen is dit volkomen geldige en uitvoerbare C ++ -code. De expressie voor productieleglijn is in feite een object dat een lid van de ledenfunctie heeft die het werk doet, gezien een broncode die is geschreven in de grammatica die we net hebben verklaard. Ja, het is een rekenmachine. We zullen voor het nu vereenvoudigen door de typegegevens over te slaan en de definitie van het integer van het regel dat door factor is aangeroepen. De productieregelsuitdrukking in onze grammatica-specificatie, traditioneel het startsymbool genoemd, kan inputs herkennen zoals: 12345 -12345 +123451 + 21 * 21/2 + 3/41 + 2 + 3 + 41 * 2 * 3 * 4 (1 + 2) * (3 + 4) (-1 + 2) * (3 + -4) 1 + ((6 * 200) - 20) / 6 (1 + (2 + (3 + ( 4 + 5)))) Zeker hebben we enkele aanpassingen gedaan aan de originele EBNF-syntaxis. Dit wordt gedaan om te voldoen aan regels voor C ++ syntaxis. Met name zien we de overvloed aan Shift >> operators. Aangezien er geen 'lege' operators in C ++ zijn, is het gewoon niet mogelijk om iets te schrijven als: een BAS gezien in wiskundige syntaxis, bijvoorbeeld, bijvoorbeeld vermenigvuldiging of, in ons geval, zoals te zien in EBNF-syntaxis voor gemiddelde sequencing (B zou a moeten volgen). Het raamwerk gebruikt de Shift >> -exploitant in plaats daarvan voor dit doel. We nemen de exploitant >>, met pijlen die naar rechts wijzen, te betekenen "wordt gevolgd door". Daarom schrijven we: a >> bthe alternatieve operator | en de haakjes () blijven zoals het is. De opdrachtoperator = wordt gebruikt in plaats van EBNF's :: =. Last but not least, de Kleene Star * die vroeger een postfix-operator in EBNF was, een voorvoegsel. In plaats van: A * // ... in EBNF-syntaxis, schrijven we: * A // ... in spirit.since Er zijn geen Postfix-sterren, "*", in C / C ++. Ten slotte beëindigen we elke regel met de alomtegenwoordige semi-colon, ";". Wat is er nieuw in deze release: · Een integeroverloopbuck opgelost om te mislukken van het parseren op bepaalde grote gehele getallen. Deze bug werd gerapporteerd en vastgesteld door Michael Andersen NEX
Geest Gerelateerde software