Question

I've got this legacy code I'm analyzing:

If (X) then
    if Cnt < 4 then Cnt = Cnt + 1 ; 4 samples
Else
    if Cnt > 0 then Cnt = Cnt-1   ; keep history
EndIf

Which has Cnt go up and down depending on X

And I'm wondering if that else statement acts like their indention implies they think it does.

The code might be interpreted more like:

If (X) then
    if Cnt < 4 then 
        Cnt = Cnt + 1 ; 4 samples
    Else
        if Cnt > 0 then 
            Cnt = Cnt-1   ; keep history
EndIf

In which Cnt get to 4 and then toggles on/off if X is true.

This is basic as compiled using BCI51. That's a basic compiler for an 8051 from back in 1990 by Systronix.

How do nested if-else pairs get resolved in basic?

Was it helpful?

Solution

I remember how QBasic did so, and I'm going to assume that this complier is doing the same. This is really tugging on my memory, so I might be wrong.

If a IF THEN is followed by code on the same line, then it is fully contained. Therefore

if Cnt < 4 then Cnt = Cnt + 1
else
   ...

would be illegal and you must place the Cnt = Cnt + 1 on it's own line to create a multi-line IF statement. Therefore, the ELSE is paired the topmost IF

Since, in the original code, the Cnt = Cnt + 1 and Cnt = Cnt - 1 are on the same lines as the IF THEN, I would interpret the code as follows:

If (X) then
    If Cnt < 4 Then
        Cnt = Cnt + 1 ; 4 samples
    EndIf
Else
    If Cnt > 0 Then
        Cnt = Cnt-1   ; keep history
    EndIf
EndIf

So, yes, I believe the code operates as the indentation implies.

Are you able to modify the code and test if you see any changes?

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top