Printf nějak sám od sebe kontroluje překladač, ale motivací tohoto příkladu z praxe bylo kontrolování typů různých logovacích funkcí. Všechny názevy funkce jsme měli v souboru funkce.cfg
Kód: Vybrat vše
nazevFunkce pocetArgumentuKPreskoceni
log 2
printf 0
Céčko je mrcha a může mít odřádkování kdekoliv, ale jak bylo nastíněno při vyhlašování, stačilo přemýšlet a odstranit newline po čárce, uvozovce a závorkách. Potom to snad už šlo vzít sedem příjemně bez patlání newlinů (jako jsem to dělal já)
Viz nástin mého řešení:
Kód: Vybrat vše
echo 'neco neco; fce
(
"",
sasdf,
" ahoj %d %s", .........
ale znovu
fce("a", 222, "ahoj %s%, ...........
' | sed '
:start
N
s~fce[
]*(\([
]*[^,]*,\)\{2\}[
]*"~/*&*/__printf__("~
t cil
b start
:cil
' | sed '
:nav
s~__printf__("[^%]*%\([dsg]\)~__printf__\1~
'
Zadání trvalo hodinu, dvě hodiny písemka (libovolné materiály, hodinu hlídal někdo jiný) k dispozici laptop s shellem. Pak dvě hodiny pauza. Potom jsme se všichni sešli, pan doktor si postěžoval, že tenhle případ byl k naší smůle asi těžký. Že stačilo přemýšlet atd Jednička 1x, dvojka 5x, trojka s diskuzí 6x, čtyřka (nabízena diskuse) 6x. Jeden vzdal.