Search code examples
nested8051basic

How are nested if-else loops resolved in BASIC


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?


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?