Flex / Bison

15/04/2012 - 03:30 von Jens Kallup | Report spam
Hallo,

leider gibt es keine spezielle Newsgruppe für das Thema, abrt ich
versuche es mal hier.
Ich benutze Bison, um ein Skript abzuarbeiten,
In diesen Skript will ich Arrayunterstützung anbieten.
Aber die Frage ist Bison seitig:

ich habe zum Beispiel folgenden Ausschnitt:

_array_assign_
: exp {
{
array_stack += 4;

add_code(QString(
"fistp dword [esp+%1]"
"mov dword [esp+%2], s"
)
.arg(array_stack)
.arg(array_stack+4));

array_stack += 4;
}
}
| _array_assign_ _COMMA_ _array_assign_
;

assign_stmt
: _ID_ _OKR_ _array_assign_ _CKR_ _ASSIGN_ exp {

add_code(QString("fstp qword [esp+4]"));
add_code(QString("fld qword [_Lc%1]").arg(nvar_counter++));
add_code(QString("fistp dword [esp+12]"));

add_code(QString(
"mov dword eax, array_%1"
"mov dword [esp], eax"
"call set_array_value"
"add esp, %2"
).arg($1).arg(array_stack+16));

array_stack = 12;
}


dieser scannt im ersten Durchlauf einen Array: [1,1,1,1,1].
Ich erhalte 5 Ausgaben.
Nun im zweiten Lauf: [1,1,1], nüsste ich 3 Ausgaben erhalten.
Dem ist aber nicht so!
Der Parser/Zeilencode ([1,1,1,1,1] ) wird nicht veràndert.
Hat da Jemand eine Idee, das richtig zu machen?

Danke und Gruß
Jens
 

Lesen sie die antworten

#1 Jens Kallup
15/04/2012 - 18:00 | Warnen spam
Hallo,

jetzt geht es. hatte vergessen eine globale variable zurück zu setzen.

mfg
Jens

Ähnliche fragen