Как се разрешават вложените if-else цикли в BASIC

Имам този наследен код, който анализирам:

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

Което има Cnt върви нагоре и надолу в зависимост от X

И се чудя дали това друго изявление действа така, както тяхното отстъпление предполага, че те мислят, че е така.

Кодът може да се тълкува по-скоро като:

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

В което Cnt достига до 4 и след това се включва/изключва, ако X е вярно.

Това е основно, компилирано с помощта на BCI51. Това е основен компилатор за 8051 от 1990 г. от Systronix.

Как вложените двойки if-else се разрешават в основния?


person Philip    schedule 18.11.2013    source източник


Отговори (1)


Спомням си как QBasic направи това и ще предположа, че този компилатор прави същото. Това наистина ме дразни паметта, така че може и да греша.

Ако IF THEN е последвано от код на същия ред, тогава той се съдържа напълно. Следователно

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

би било незаконно и трябва да поставите Cnt = Cnt + 1 на негов собствен ред, за да създадете многоредов IF оператор. Следователно ELSE се сдвоява с най-горния IF

Тъй като в оригиналния код Cnt = Cnt + 1 и Cnt = Cnt - 1 са на същите редове като IF THEN, бих интерпретирал кода, както следва:

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

Така че, да, вярвам, че кодът работи, както подсказва отстъпът.

Можете ли да промените кода и да тествате дали виждате промени?

person DrRobotNinja    schedule 18.11.2013
comment
А, не знаех за същия редов аспект на основния. И да, модифицирането на кода е лесно, но тестването му изисква чип 8051, за да го поставите. Силите не искат да ми позволят да пипна производствената им единица. Хммм, да, най-безопасният начин би бил да вземете 8051 и да тествате това. - person Philip; 19.11.2013
comment
Това е правилно, аспектът на същия ред предполага крайно ако, което означава, че работи по предназначение. Което е товар от гърдите ми. Благодаря, д-р робот нинджа. - person Philip; 19.11.2013