Adventi naptár

Czirkos Zoltán · 2021.08.24.

Egy fura állapotgép

Adott az alábbi programocska. Ez egy C kommentszűrő: a szabványos bemenetéről olvasott szövegből kiszűri a /* és */ közötti részeket.

#include <stdio.h>

int main(void) {
    int c;
    
  start:
    c = getchar();
    if (c == EOF) goto vege;
    if (c == '/') goto pervolt;
    putchar(c);
    goto start;

  pervolt:
    c = getchar();
    if (c == EOF) goto vege;
    if (c == '*') goto komment;
    putchar('/');
    if (c == '/') goto pervolt;
    putchar(c);
    goto start;

  komment:
    c = getchar();
    if (c == EOF) goto vege;
    if (c == '*') goto csillag;
    goto komment;

  csillag:
    c = getchar();
    if (c == '/') goto start;
    if (c == '*') goto csillag;
    goto komment;

  vege:
    return 0;
}

A kérdések:

  • Hova lett a ciklus?
  • Hova lett az állapotváltozó?
  • Egyáltalán: ez így egy állapotgépes szemlélettel megírt program, vagy valami egész más?