================================================================= Flex und Bison in Visual Studio einrichten - HOWTO ================================================================= {by www.c-worker.ch} Wer Rechtschreibefehler findet, darf sie behalten. [1. Einleitung] Nachdem ich selbst dafür keine Anleitung gefunden habe und selber etwas rumprobieren musste, soll dies eine kleine Anleitung sein wie man flex und bison in Visual Studio (6 oder .NET) so einrichten kann, dass .y und .l Dateien automatisch mit erstellt werden. [2. flex und bison installieren] Es gibt einige Win32 Portierungen von flex und bison. Hier die mir bekannten Porierungen und deren aktuellste Version (stand 8.1.2004) UnixUtils (http://unxutils.sourceforge.net/): bison 1.28 flex 2.5.4 Mingw (http://www.mingw.org/); bison 1.875 GnuWin32 (http://gnuwin32.sourceforge.net/): bison 1.35 flex 2.5.4 Cygwin (http://www.cygwin.com/): bison 1.875b flex 2.5.4 Die GnuWin32 und die Cygwin Varianten liefen bei mir in Visual Studio .NET problemlos und ich würde eine dieser beiden empfehlen. Die UnixUtils Variante ist zwar recht komfortabel da mann keine zusätzlichen DLL's benötigt. Mit Visual Studio 6.0 konnte ich diese auch Problemlos verwenden. Allerdings erzeugt die etwas ältere bison Version Code der in Visual Studio .NET zu einer Runtime Warnung führt was ziemlich lästig ist. Falls ihr nicht alle UnixUtils extrahieren wollt sondern nur flex und bison ist es trozdem wichtig, dass ihr all die Dateien unter usr/local/include, usr/local/lib und usr/local/share ebenfalls extrahiert, da diese von flex und bison benötigt werden. Ich habs mir einfach gemacht indem ich einfach gleich das ganze Archiv extrahiert habe. Auch bei den anderen Varianten ist es wichtig immer alle dazugehörigen Dateien zu extrahieren da bison unter anderem noch Dateien wie bison.simple, bison.hairy, ... etc benötigt. Nun muss man Visual Studio den Pfad wo sich bison.exe und flex.exe befinden bekannt machen. Visual Studio 6.0: TODO Unter Visual Studio .NET: Extras > Optionen > Projects > VC++ Verzeichnisse unter Ausführbare Dateien den Odner wo bison und flex.exe liegen ganz unten hinzufügen. [3. Benutzerdefiniertes Erstellen] Nun startet man ein neues Visual Studio Projekt. Wenn man nun eine .l oder .y Datei mit flex oder bison erstellen will muss man für diese einen Benutzerdefiniertes Erstellverhalten definieren. Visual Studio 6.0: Gehe im Menü Projekt auf Einstellungen. Dann markiert man die .l Datei und trägt in der Lasche "Benutzerdefiniertes Erstellen" im Feld "Befehle" den nachfolgenden Befehl ein: Visual Studio .NET: Man klickt man einfach Rechts auf die .l Datei und dann Eigenschaften > Befehlzeile und gibt dort folgendes ein: flex -L -otest.yy.c $(InputPath) Natürlich ist "test.yy.c" durch den eigenen Namen den man für die Ausgabedatei wünscht zu ersetzen. Achtung das "-o" ist noch nicht teil des Dateinamens. Beim Feld Ausgaben muss man nun ebenfalls den Namen der Datei die erstellt wird angeben, also bei der oberen Befehlszeile wäre dies test.yy.c. Dasselbe macht man nun auch für .y Dateien, da sieht der Befehl jedoch so aus: bison -l -d -otest.tab.c $(WkspDir)/$(InputPath) Für VS .NET sieht die letzte Zeile so aus: bison -l -d -otest.tab.c $(InputPath) Bei der UnixUtils Variante muss man vor dem "bison -l -d ..." Befehl noch die beiden Zeilen set BISON_SIMPLE=C:\unix\usr\local\share\bison.simple set BISON_HAIRY=C:\unix\usr\local\share\bison.hairy einfügen, da er sonst die beiden Dateien nicht finden kann. Bei den anderen Varianten ist dies jedoch nicht nötig. Natürlich ist auch hier auf die eigenen bison.simple und bison.hairy Dateien zu verweisen, diese sind im UnixTools Zip enthalten. Anstelle von "test.tab.c" ist ebenfalls wieder der eigens gewünschte Name der Ausgabedatei anzugeben. [4. Generierte Files hinzufügen] Erstellt man nun das ganze Projekt neu werden pro .y File ein .yy.c File generiert (den Namen konnte man ja selbst wählen) und pro .l file werden je ein .tab.c und ein .tab.h File generiert. All diese Files sollte man nun dem Projekt hinzufügen damit diese ebenfall mitkompiliert werden. Es ist empfehlenswert diese aber nicht im Editor offen zu halten weil mann sonst bei jedem Erstellen gefragt wird ob man die geänderten Dateien nachladen möchte (da sie ja beim erstellen immer frisch von flex und bison generiert werden). [5. Weiteres] Die -l bzw. -L Parameter habe ich hinzugenommen damit keine #line Zeilen in die Files generiert werden, da bei diese bei älteren flex/bison versionen immer zu Warnings führen weil der Backslash in den Dateinamen bei mir nicht mit \\ escaped wird. Der -d Parameter sorgt dafür das bison ein Header File mit allen Tokens erstellt. Falls man mit ohne die -l bzw. -L Parameter keine Warnungen erhält sollte man sie weglassen. In Visual Studio .NET ist es hilfreich Warnungen zu 64Bit portabilität auszuschalten, da sonst die von flex und bison erzeugten C sourcen für Warnungen sorgen.