Parserschwäche

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Frabbing
Beiträge: 160
Registriert: 15.02.2007 21:31
Kontaktdaten:

Parserschwäche

Beitrag von Frabbing »

Warum ist eigentlich...

Code: Alles auswählen

a = *mem + ((currentpos-beginpos) * 2)
char.i = PeekB(a)
...nicht das gleiche wie...

Code: Alles auswählen

char.i = PeekB(*mem + ((currentpos-beginpos) * 2))
Das zweite geht nicht richtig, das erste schon. Ist doch eindeutig ein Bug, oder? >_<
Gruß, Frank
Sirius-2337
Beiträge: 71
Registriert: 29.05.2010 20:55

Re: Parserschwäche

Beitrag von Sirius-2337 »

Also ich bekomm bei beiden das gleiche Ergebniss

Code: Alles auswählen

*mem = AllocateMemory(1024)
RandomSeed(100)
RandomData(*mem, 1024)

currentpos = 102
beginpos   = 12

a = *mem + ((currentpos-beginpos) * 2)
char.i = PeekB(a)

Debug char

; - - - - - -

*mem = AllocateMemory(1024)
RandomSeed(100)
RandomData(*mem, 1024)

currentpos = 102
beginpos   = 12

char.i = PeekB(*mem + ((currentpos-beginpos) * 2))

Debug char
Benutzeravatar
Frabbing
Beiträge: 160
Registriert: 15.02.2007 21:31
Kontaktdaten:

Re: Parserschwäche

Beitrag von Frabbing »

Jetzt geht es wieder, komisch... Bin sicher, das ich nichts verändert hab.
Werde ich auf jeden Fall im Auge behalten. Kommen solche Fehler denn ansonsten schonmal vor? Ist da was bekannt?
Gruß, Frank
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Re: Parserschwäche

Beitrag von PMV »

PB ist kein fehlerfreier Compiler. Es können immer und überall alle
möglichen (und unmögliche) Fehler auftreten, die du nicht zu
verantworten hast :wink: Das kann leider keiner ausschließen,
allerdings kann wohl keiner hier sagen, ob "genau so ein Fehler"
schon mal gemeldet wurde.

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
Regenduft
Beiträge: 574
Registriert: 25.03.2008 15:07
Wohnort: THE LÄÄÄND!

Re: Parserschwäche

Beitrag von Regenduft »

Hmmm...

das klingt zwar stark nach Tippfehler, aber es ist evtl. möglich, dass es da wirklich einen seltsamen schwer reproduzierbaren Bug gibt... Betonung: EVENTUELL! (damit ich mich im Falle eines Denkfehlers nur zu 90% anstatt 100% lächerlich mache :wink:)

Hatte gedacht, es liegt an meinem verpfuschten System und hab' das ganze nach dem Win neu draufklatschen nicht weiter zu verfolgt.

Folgender (vermutlicher) Bug ist (bei mir) reproduzierbar:

Code: Alles auswählen

EnableExplicit

Global a = 0
Global b = 1
Global c = 10

Debug a + b * ( c / 100 * 3600 + c % 100 * 60 )
; Ausgabe = 0 (Falsch!)

Debug 0 + b * ( c / 100 * 3600 + c % 100 * 60 )
; "a" durch "0" ersetzt -> Ausgabe = 600 (OK!)

Debug a + 1 * ( c / 100 * 3600 + c % 100 * 60 )
; "b" durch "1" ersetzt -> Ausgabe = 600 (OK!)

Debug a + b * ( 10 / 100 * 3600 + 10 % 100 * 60 )
; "c" durch "10" ersetzt -> Ausgabe = 600 (OK!)

Debug a + b * c / 100 * 3600 + b * c % 100 * 60
; Klammer aufgelöst -> Ausgabe = 600 (OK!)
Habe ich hier ein Grundlegendes Low-Level-Verständnisproblem oder ist das ein Bug?

Lustiger Weise war das so, dass der Bug MITTEN in einem ewig langen Code sich absolut unberechenbar verhielt! Ab und zu war die Ausgabe korrekt:

Code: Alles auswählen

Debug a + b * ( c / 100 * 3600 + c % 100 * 60 )
; Ausgabe = einmal 0 (FALSCH); einmal 600 (OK!)
Desweiteren verhielt sich (MITTEN im Code) Folgendes genau umgekehrt wie erwartet/angedacht:

Code: Alles auswählen

If #PB_MessageRequester_Yes = MessageRequester("blind", "blind", #PB_MessageRequester_YesNo)
  Debug "Yes!" ; Ausgabe bei Buttonclick "No"!  FALSCH
Else
  Debug "No!"  ; Ausgabe bei Buttonclick "Yes"! FALSCH
EndIf
Wenn ich den Code aber isoliert hatte, lief alles einwandfrei!

Deswiteren lief alles einwandfrei, wenn ich die Bedingung umgedreht hatte:

Code: Alles auswählen

If MessageRequester("blind", "blind", #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
  Debug "Yes!" ; Ausgabe bei Buttonclick "Yes"! RICHTIG
Else
  Debug "No!"  ; Ausgabe bei Buttonclick "No"!   RICHTIG
EndIf
War leider so doof und hatte das nimmer getestet. Frabbing hat mich jetzt aber dran erinnert. Ich habe leider nurnoch den ersten (isolierten) Code. Beim ersten Auftreten hatte ich noch PB 4.51 drauf, jetzt PB 4.60 beta 3.

BTW: Der Code von Sirius-2337 ergibt bei mir (wie eigentlich zu erwarten) auch korrekte Werte.
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Parserschwäche

Beitrag von Nino »

Regenduft hat geschrieben:Folgender (vermutlicher) Bug ist (bei mir) reproduzierbar:

Code: Alles auswählen

EnableExplicit

Global a = 0
Global b = 1
Global c = 10

Debug a + b * ( c / 100 * 3600 + c % 100 * 60 )
; Ausgabe = 0 (Falsch!)

Debug 0 + b * ( c / 100 * 3600 + c % 100 * 60 )
; "a" durch "0" ersetzt -> Ausgabe = 600 (OK!)

Debug a + 1 * ( c / 100 * 3600 + c % 100 * 60 )
; "b" durch "1" ersetzt -> Ausgabe = 600 (OK!)

Debug a + b * ( 10 / 100 * 3600 + 10 % 100 * 60 )
; "c" durch "10" ersetzt -> Ausgabe = 600 (OK!)

Debug a + b * c / 100 * 3600 + b * c % 100 * 60
; Klammer aufgelöst -> Ausgabe = 600 (OK!)
Habe ich hier ein Grundlegendes Low-Level-Verständnisproblem oder ist das ein Bug?
Das ist ein Bug. Auch wenn ich das a am Ende addiere oder ganz weglasse, erhalte ich das richtige Ergebnis (PB 4.51 unter Windows XP x86):

Code: Alles auswählen

EnableExplicit

Define a = 0
Define b = 1
Define c = 10

Debug a + b * ( c / 100 * 3600 + c % 100 * 60 )
; Ausgabe = 0 (falch!)

Debug b * ( c / 100 * 3600 + c % 100 * 60 ) + a
; Ausgabe = 600 (richtig)

Debug b * ( c / 100 * 3600 + c % 100 * 60 )
; Ausgabe = 600 (richtig)
Durch Addition der Variablen a mit dem Wert 0 darf sich das Ergebnis in keinem Fall ändern.

Grüße, Nino
Benutzeravatar
Frabbing
Beiträge: 160
Registriert: 15.02.2007 21:31
Kontaktdaten:

Re: Parserschwäche

Beitrag von Frabbing »

Dann bin ich ja einigermassen beruhigt, dass es nicht zwingend an mir liegt (oder eben auch nicht, weil es tatsächlich Parserbugs gibt).
das klingt zwar stark nach Tippfehler, aber es ist evtl. möglich, dass es da wirklich einen seltsamen schwer reproduzierbaren Bug gibt... Betonung: EVENTUELL!
Tippfehler schliesse ich aus. Hatte natürlich in der Variablenliste nachgesehen.
Da werde ich in Zukunft wohl Werte aufdröseln, bevor ich sie an eine Funktion schicke.
Gruß, Frank
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Parserschwäche

Beitrag von mk-soft »

Habs mal ins englische Bugforum gestellt
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Parserschwäche

Beitrag von ts-soft »

mk-soft hat geschrieben:Habs mal ins englische Bugforum gestellt
Hoffentlich merkt niemand, das falsch falsch geschrieben ist :lol:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Parserschwäche

Beitrag von mk-soft »

Für den Inhalt meiner Arbeit bin ich nicht verantwortlich... Copy and Paste :mrgreen:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten