Jako maly priklad jsem dostal prunik dvou spojaku.
Dnesni velky priklad byl Macroprocesor.
Mame nakej text a ten muze obsahovat mimo jine i:
&MACRO jmeno_makra(parametr1, parametr2, ...)
-telo definice makra
-muze obsahovat #parametr#
&ENDM
&jmeno_makra(neco, neco, neco, ...) - volani makra, misto toho se ma objevit telo toho makra
-Pocet maker byl nak omezen, ale telo mohlo byt dlouhe jak chtelo.
-Makro se muze predefinovat, vzdy se pouziva ta definice ktera je zrovna posledni.
-Uvnitr makra muze byt nova definice, popr. volani makra.
-Definice se uvadi v platnost v dobe, kdy probiha, tj. definice makra v definici makra se uvede v platnost po prvnim zavolani toho vnejsiho makra.
-Jako parametr muze byt makru predavano cokoliv (tj. definice, volani maker atd.)
-Musi se vychytat mozne zacykleni.
Vystup byl kupodivu soubor, ktery neobsahoval zadne definice a volani a byl strukturovan podle tech maker.
Moje reseni (rozhodne netvrdim, ze je spravne natoz optimalni):
udelal sem si striktury:
Makro - obsahuje: jmeno, pocet parametru, pozici zacatku tela v souboru, nazvy parametru, ukazatel na dalsi prvek (je to spojak)
volani - nazev, pocet parametru, pole pozic zacatku parametru, ukazatel na dalsi prvek
Zaklad tvori tri fce:
Main - otevre soubory a ve while(not(EOF)) cte ze vstupu:
-pokud nacte definici makra: nacte ho do struktury, ta se prida do spojaku, preskoci telo a jede dal
-pokud nacte volani: nacte volani do struktury, zapamatuje si momentalni pozici a spusti fci zpracujmakro, pak se vrati na pozici a smaze volani
jinak zapise do vystupu
fce zpracujmakro - nacte si pozici v souboru ze struktury makra, kterou dostane na vstupu
-cte ve while(not(&ENDM))
-pokud nacte definice, tak nacte, prida do spojaku a jede dal
-pokud volani tak se nacte, ulozi volani do struktury, ta se prida do spojaku, zavola rekurzivne zpracuj makro, pak ze spojaku odeberu to volani a nastavim pozici zpet
-pokud najde parametr tak se podiva do spojaku maker, tam najde kterej parametr to je, a podiva se do spojaku volani na pozici zacatku toho parametru, ulozi si pozici v souboru, zavola fci zpacujparametr, nacte pozici a jede dal
fce zpracujparametr dela v podstate to samy, jako zpracujmakro, ale ve whilu ceka na ','
Doufam, ze to (aspon) nekdo pochopi :) .
Mohli byste sem napsat taky naky jiny reseni at muzu na zkouseni rict i jinou alternativu :lol: