Ich habe ein paar Beiträge zu den Nuancen der Verwendung von Schlüsselwort/Bezeichner in Qi-Grammatiken gesehen, aber ich kann nicht ganz nachvollziehen, wie der Ansatz in den Boost-Beispielen gezeigt wurde arbeiten soll ...boost :: spirit :: qi keywords und identifiers
Schlüsselwörter Erklärung:
qi::symbols<char> keywords;
Beispiel Stichwortsatz:
keywords.add
("foo")
("bar")
;
Identifier Regel Erklärung:
qi::rule<std::string::const_iterator, std::string(), ascii::space_type> identifier;
Hier ist, wie die Kennung der Regel in den qi berechnet und Compiler Beispiele definiert:
identifier = !keywords >> qi::raw[ qi::lexeme[ (qi::alpha | '_') >> *(qi::alnum | '_') ] ];
Vielleicht ist die Qi-Syntax falsch lese ich, aber es scheint mir, dass dies keine wörtliche annehmen würde das passt oder beginnt mit ein Schlüsselwort. Das Ablehnen einer vollständigen Keyword-Übereinstimmung ist das gewünschte Verhalten. Aber ich möchte "food" als Bezeichner akzeptieren, auch wenn es mit dem Stichwort "foo" beginnt. Dies scheint ein ziemlich normaler Anwendungsfall zu sein, aber es ist schwierig, eine Dokumentation zu finden, die das wirklich auf den Punkt bringt.
Kann jemand eine Bezeichnerregel anbieten, die nur exakte Übereinstimmungen mit Schlüsselwörtern zurückweist?
Danke!
Eigentlich verdient diese Frage einige Stimmen.Es sollte viel mehr realisiert werden und wahrscheinlich in den Spirit Tutorials angesprochen werden, da es oft übersehen wird (offensichtlich **) (http://www.boost.org/doc/libs/1_57_0/libs/spirit)/Beispiel/Qi/Compiler_Tutorial /) ** sind ok) – sehe