Kurzusok
/
Tcl
Tcl
/
Feladatok
/
Zárójelpárosítás
Zárójelpárosítás

Zárójelpárosítás

Könnyű

Bevezetés

Lehetőséget kapsz, hogy szoftvert írj a Bracketeer™-hez, egy ősi, de nagy teljesítményű nagyszámítógéphez. A rajta futó szoftver egy saját fejlesztésű nyelven íródott. A szintaxisának nagy része ismerős, de feltűnik, hogy rengeteg szögletes zárójel, kapcsos zárójel és kerek zárójel van benne. Bár a Bracketeer™ nagy teljesítményű, rugalmasnak egyáltalán nem mondható. Ha a forráskódban akár egyetlen kiegyensúlyozatlan szögletes zárójel, kapcsos zárójel vagy kerek zárójel is akad, a Bracketeer™ összeomlik, és újra kell indítani. Hogy elkerüld ezt a helyzetet, olyan kódot kezdesz írni, amely ellenőrzi, hogy a szögletes zárójelek, a kapcsos zárójelek és a kerek zárójelek kiegyensúlyozottak-e, mielőtt megpróbálnád futtatni a Bracketeer™-en.

Utasítások

Adott egy string, amely szögletes zárójeleket ([]), kapcsos zárójeleket ({}), kerek zárójeleket (()) vagy ezek bármilyen kombinációját tartalmazza: ellenőrizd, hogy minden pár illeszkedik-e és helyesen egymásba ágyazódik-e. Minden más karaktert hagyj figyelmen kívül. Például a "{what is (42)}?" kiegyensúlyozott, a "[text}" viszont nem.

A Tcl egy nagyon egyszerű nyelv, de abban, ahogy az értelmező a kódot feldolgozza, van néhány kellemetlen határeset.

Kapcsos zárójelek

A kapcsos zárójelek a Tcl-ben egyszerűen egy szövegblokk idézésére szolgálnak. Az ilyen szöveg kódként vagy adatként is értelmezhető. A kapcsos zárójelek között egymásba ágyazott zárójelek is megjelenhetnek, de ezeknek kiegyensúlyozottnak kell lenniük. A Tcl man oldala ezt írja:

A kapcsos zárójelek egymásba ágyazódnak a szón belül: minden további nyitó kapcsos zárójelhez kell egy további csukó kapcsos zárójel (ha azonban a szón belüli nyitó vagy csukó kapcsos zárójel backslash karakterrel van idézve, akkor nem számít bele a hozzá tartozó csukó zárójel megkeresésébe).

A megfogalmazás ott meglehetősen pontos: ha nem párosított nyitó vagy csukó kapcsos zárójel karaktert szeretnél, akkor azt backslash karakterrel kell idézned. Tehát ne ezt csináld:

proc isOpenBrace {char} {
    return [expr {$char eq "{"}]
    # ......................^ will not work
}

Ezt viszont igen:

proc isOpenBrace {char} {
    return [expr {$char eq "\{"}]
    # ......................^^ will work
}

Ez problémát okozhat amiatt, hogy a Tcl másképp dolgozza fel a megjegyzéseket, mint a legtöbb nyelv. Erről bővebben a Tcl wikin olvashatsz.

Szögletes zárójelek

Hasonlóképpen, mivel a Tcl a szögletes zárójeleket a parancsbehelyettesítéshez. használja, még a dupla idézőjelbe tett szövegekben is figyelned kell a nyitó szögletes zárójelek escape-elésére.

Kerek zárójelek

Az asszociatív tömbváltozóktól eltekintve a kerek zárójelek egyszerűen közönséges karakterek.


Forrás

Ginna Baker
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Tcl Exercism

Készen állsz elkezdeni a(z) Zárójelpárosítás feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Tcl nyelvet 135 feladat segítségével, valódi emberi mentorálással, mindez ingyen.