2014-12-13 12 views
5

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!

+0

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

Antwort

3

Eigentlich verdient diese Frage einige Stimmen. Es sollte viel mehr oft realisiert werden, und wahrscheinlich im Geist Tutorials angegangen werden, wie es oft übersehen wird (natürlich the compiler samples sind ok)


Vielleicht das Qi Syntax falsch lese ich, aber es scheint mir, dass dies kein Literal akzeptieren würde, das mit einem Schlüsselwort übereinstimmt oder beginnt.

Das stimmt. Für den Fall, dass Sie eine meiner eigenen Antworten gefunden haben (eine ziemlich gute Chance), tendiere ich dazu, dies schnell und einfach zu tun, um Grammatiken zu reparieren, die ursprünglich keine richtigen Schlüsselwort-Wächter hatten.

Aber ja, erfordern unterschiedliche Keywords/Identifikatoren etwas mehr Arbeit. Ich könnte einen Link zu einer Antwort finden, wo es richtig gemacht wird (es ist nicht schwer, es ist nur langweilig).

Inzwischen haben einen Blick auf die sehr relevant

Wenn Sie eine wirklich robuste Gebäude sind in allgemeiner Sprache Grammatik, dies über das ist Zeigen Sie, wo Sie einen Spirit Lexer verwenden sollten. Andererseits, meiner bescheidenen Meinung nach, zielt Spirit auf eine schnelle Entwicklung und kleine, einmalige Grammatiken ab, die prägnant mit der Expressionsvorlage eDSL von Spirit eingebettet werden. In vielen Aspekten ist das der Antipode, wenn es darauf ankommt, denke ich.

+0

Vielen Dank für Ihre Antwort. Das macht es klar. Ich war mir der eindeutigen Anweisung bewusst, dachte aber, dass ich etwas mit diesem Quick-Fix verpassen könnte. Vielen Dank! – pt3dNyc

Verwandte Themen