also ich habe folgendes Problem. Ich versuche gerade ein Tutorial zum Thema (Compiler-)/Interpreterbau durchzuarbeiten. Das hat bis jetzt auch ganz gut funktioniert nur leider habe ich ein Problem beim Erstellen des Lexers mit flex++. Die loopwhile_lexic.lex sieht wie folgt aus:
Code:
%name CloopWhileScanner
%define LEX_PARAM YY_CloopWhileParserBase_STYPE *val, YY_CloopWhileParserBase_LTYPE *loc %define MEMBERS public: int m_line,m_col; %define CONSTRUCTOR_INIT : m_line(1),m_col(1) %define IOSTREAM
%header{ #include <loopwhile_grammar.h> using namespace std; %}
jedoch meckert flex++ an das der Parameter h keine weiteren Anweisung bekommt (schließlich steht -h ja auch für Hilfe) und den Parameter -g kennt flex++ erst gar nicht. Nun habe ich versucht das ganze mit:
Code:
flex++ -oloopwhile_lexic.cpp loopwhile_lexic.lex
zu übersetzen. Allerdings bekomme ich dann folgende Fehler:
Code:
loopwhile_lexic.lex:1: ungültiges Zeichen: % loopwhile_lexic.lex:1: unbekannter Fehler beim Bearbeiten von Abschnitt 1 loopwhile_lexic.lex:1: unbekannter Fehler beim Bearbeiten von Abschnitt 1 loopwhile_lexic.lex:1: unbekannter Fehler beim Bearbeiten von Abschnitt 1 loopwhile_lexic.lex:3: nicht erkannte '%'-Direktive loopwhile_lexic.lex:4: nicht erkannte '%'-Direktive loopwhile_lexic.lex:5: nicht erkannte '%'-Direktive loopwhile_lexic.lex:6: nicht erkannte '%'-Direktive loopwhile_lexic.lex:8: nicht erkannte '%'-Direktive loopwhile_lexic.lex:9: ungültiges Zeichen: # loopwhile_lexic.lex:9: unbekannter Fehler beim Bearbeiten von Abschnitt 1 loopwhile_lexic.lex:9: ungültiges Zeichen: < loopwhile_lexic.lex:9: unbekannter Fehler beim Bearbeiten von Abschnitt 1 loopwhile_lexic.lex:9: ungültiges Zeichen: . loopwhile_lexic.lex:9: unbekannter Fehler beim Bearbeiten von Abschnitt 1 loopwhile_lexic.lex:9: ungültiges Zeichen: > loopwhile_lexic.lex:11: ungültiges Zeichen: % loopwhile_lexic.lex:11: ungültiges Zeichen: }
Gibt es da noch irgendeinen Parameter den ich flex++ übergeben muss?
ist das C++ oder irgendeine andere Sprache? -- "Zwei Dinge sind unendlich: Das Universum und die menschliche Dummheit. Aber beim Universum bin ich mir nicht ganz sicher." - Albert Einstein www.blue-xenon.de.vu
Schrieb er doch, eine Sprache um einen Interpreter/Compiler zu bauen. Dafür gibt es bereits dutzende fertige Tools, unter anderem Lex -- perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'