Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » flex++ Anweisung

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
26.12.2006, 12:23 Uhr
~LaMaLa
Gast


Hi,

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;
%}

%{
%}

SPACES [ \t]+
LF (\r\n)|(\r)|(\n)|(\x0c)

%%

("#"|"//").*{LF} {}
"LOOP"        { m_col+=strlen(yytext); return CloopWhileParserBase::T_LOOP; }
"WHILE"        { m_col+=strlen(yytext); return CloopWhileParserBase::T_WHILE; }
"BEGIN"        { m_col+=strlen(yytext); return CloopWhileParserBase::T_BEGIN; }
"END"        { m_col+=strlen(yytext); return CloopWhileParserBase::T_END; }
":="        { m_col+=strlen(yytext); return CloopWhileParserBase::T_GLEICH; }
"!="        { m_col+=strlen(yytext); return CloopWhileParserBase::T_UNGLEICH; }
[Xx]([1-9][0-9]*) { m_col+=strlen(yytext); val->u_uint = atoi(&yytext[1]);
    return CloopWhileParserBase::T_VARIABLE; }
{SPACES}    { m_col+=strlen(yytext); }
{LF}        { m_line++; m_col=!; }
.             { m_col++; return (int)yytext[0]; }
"/*"        {
    int c;
    
    for(;;)
    {
        while((c = input()) != '*' && c != EOF );
        
        if(c == '*')
        {
            while((c=input())=='*');
            
            if(c== '/') break;
        }
        
        if(c == EOF)
            break;
    }
}

%%



aus. Nun ist im Tutorial jedoch gesagt das man die Datei mit folgender Anweisung übersetzen soll:


Code:
flex++ -oloopwhile_lexic.cpp -hloopwhile_lexic.h -gloopwhile_lexic.h loopwhile_lexic.lex



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?

Gruß
LaMaLa
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
26.12.2006, 14:30 Uhr
BoBtheREapER
kein job für nen BoB


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
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
26.12.2006, 18:03 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)


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"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: