Regulärer Ausdruck für ein String-Literal in flex / lex
Ich bin zu Experimentieren, zu lernen, flex und würde gerne match-string-Literale. Mein code momentan aussieht:
"\""([^\n\"\\]*(\\[.\n])*)*"\"" {/*matches string-literal*/;}
Ich habe gekämpft, mit Variationen für eine Stunde oder so und kann Sie nicht so funktioniert, wie es sollte. Ich bin im wesentlichen in der Hoffnung, eine übereinstimmung mit einem string-literal können nicht enthalten eine neue Zeile (es sei denn, es ist geflohen) und unterstützt Escape-Zeichen enthält.
Wahrscheinlich bin ich nur zu schreiben, einen schlechten regulären Ausdruck oder eine inkompatible mit flex. Bitte beraten!
InformationsquelleAutor der Frage Thomas | 2010-01-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Finden Sie diese links hilfreich
ANSI-C-Grammatik, Lex
Spezifikation
ANSI-C Yacc-Grammatik
InformationsquelleAutor der Antwort codaddict
Einer saite besteht aus einem Zitat mark
gefolgt von null oder mehr der entweder ein entflohener alles
oder ein nicht-Zitat-Charakter
und schließlich ein abschließendes Zitat
Setzen Sie alle zusammen, und Sie haben
Die Abgrenzung Zitate entgangen sind, weil Sie Flex-meta-Zeichen.
InformationsquelleAutor der Antwort Jonathan Feinberg
Einer einzelnen Zeile... können Sie dieses verwenden:
InformationsquelleAutor der Antwort Pete
Wie wäre es mit einem start-Zustand...
War es ähnlich, der Effekt (flex verwendet
%s
oder%x
zu zeigen, was der Staat erwartet werden würde. Wenn der flex-Eingabe erkennt ein Zitat, schaltet es zu einem anderen Zustand, fährt dann sind das sogenannte Lexing, bis es erreicht ein weiteres Zitat, in dem es kehrt zurück zu den normalen Zustand.InformationsquelleAutor der Antwort t0mm13b
Antwort kommt spät, aber die nützlich sein können für die nächsten, die es brauchen:
InformationsquelleAutor der Antwort david