PDA

View Full Version : Hetaqrqir xndir


Davit
Oct 26, 2003, 15:59
Unenq source fayl (orinak grvac c++ - ov) , petqe voroshel , te inch xorutyun uni ayd fayl@.
Fayli xorutyun anvanum enq nra cikleri maximal nerdrvacutyuny.
Tarberakner ?

DaNYer
Oct 26, 2003, 16:19
Originally posted by Davit
Unenq source fayl (orinak grvac c++ - ov) , petqe voroshel , te inch xorutyun uni ayd fayl@.
Fayli xorutyun anvanum enq nra cikleri maximal nerdrvacutyuny.
Tarberakner ?

just keep the count of opening and closing curly brackets .....


do you want to count only loops? or including ifs ?

Davit
Oct 26, 2003, 17:27
bayc ete cikl ka vory bacvox - pakvox pakagcer chuni ??????

orinak `
for ()
for ()
for()
;


??????????????

nm
Oct 26, 2003, 18:59
1. парсер у тебя должен быть рекурсивный (шкурой чую)
2. в случае, если обнаружил цикл без открывающей скобки, то по выходу из рекурсивно вызваной ф-ии не ищешь закрывающую скобку :)

а тебе сколькопроходный парсер, кстати, нужен?
на многопроходном можно будет сделать элегантнее, но медленней :)

Davit
Oct 26, 2003, 19:09
vabshe to ya reshil etu zadachku s pomoshyu PCLEX i PCYACC .
U menya byla grammatika C.
prosto mne nujna byla ne tol'ko glubina a obhsaya statistica programmy.
PCYACC rabotaet s odnim proxodom , i delaet eto ochen' elegantno ;)

Davit
Oct 26, 2003, 19:14
kstati , pisat' svoy parser ne tak uj legko ... dumayu nujno imet' kakoy to lexicheskiy analizator , shtob opoznavat' cikly , oni je byvayut ochen' raznymi :)

nm
Oct 26, 2003, 22:02
Originally posted by Davit
kstati , pisat' svoy parser ne tak uj legko ... dumayu nujno imet' kakoy to lexicheskiy analizator , shtob opoznavat' cikly , oni je byvayut ochen' raznymi :)


ну значит так :) свой парсер писать всегда приятно :)
особенно когда он начинает работать ;) (помолились 3 раза на DragonBook:)

для того, чтоб считать _ТОЛьКО_ циклы в C/Цпп программе достаточно одного очень простого парсера ;))) достаточно распознавать сами циклы и фигурные скобки - все оставшееся нас ведь как-то не интересует, не так-ли ? ну может еще и границы функций ...

yacc/lex/bison и все это семейство - хорошо :) но требует некоторого времени изучения :)

Davit
Oct 27, 2003, 11:14
nu ladno predpolojim , shto my raspoznovali cikly ...
a kakie varinaty u vas nashyot glubiny programmy ????
dayte algorithm

to nm
a est' u tebya elektronnaya versiya DragonBook ? kniga stoit 9500 dramov , prosto jalko deneg , no vesh stoyushaya !!

DaNYer
Oct 27, 2003, 14:51
Originally posted by nm
достаточно распознавать сами циклы и фигурные скобки - все оставшееся нас ведь как-то не интересует, не так-ли ? ну может еще и границы функций ...



for()
for()
for()
{
---
---
---
for()
for()
for()
}
for()


kakaya tut glubina? 5?

Davit
Oct 27, 2003, 15:28
ya ne ponyal shto ty imeesh v vidu napisav `

for()
for()
for()
{
---
---
---
for()
for()
for()
}
for()


no glubina etovo koda 5

for()
for()
for()
{
---
---
---
for() ;

for()
for() ;

}
for();

DaNYer
Oct 27, 2003, 16:23
thanx

nm
Oct 27, 2003, 19:30
Originally posted by Davit
nu ladno predpolojim , shto my raspoznovali cikly ...
a kakie varinaty u vas nashyot glubiny programmy ????
dayte algorithm

to nm
a est' u tebya elektronnaya versiya DragonBook ? kniga stoit 9500 dramov , prosto jalko deneg , no vesh stoyushaya !!

эта книга стоит того, чтоб заработать 9500 драм (только не надо мне говорить, что это не возможно :) о ее купить ;) а во-вторых -- пойди запишись в AUA library и просто ее возьми почитать ;)

nm
Oct 27, 2003, 19:41
алгоритм же прост до опупения :)))


int glubina_cikla() {
int max_glubina = 0;

esli netu otkrywajushej operatornoj skobki {
perwaja zhe komanda _NE_FOR_ , to return 0;
/* perwaja komanda for */
propustit' kruglyys skobki;
return glubina_cikla(tekushaja pozicija);
}

while (ne konec fajla) {

while (ne_wstretili_for) {
idem dal'\she po textu
esli wsttretili zakrywajushie skobki, return max_glubina;
}

/* nashli for */
sdwinutsja za kruglye skobki for-a /* t.e. na poziciju posle for (i=0, i<foo; i+=bar) */
max_glubina = max(max_glubina, glubina_cikla (tekushaja pozicija));
propustit' wes' cikl /* mozhno kakoj-to global'nyj pointer eshe ponjat' po rekursii wwerh-wniz s poziciej w texte ( kak i delaet yacc :) */

} /* end while ne konec fajla */
return max_glubina;
} /* end function */




более детально, имхо, не надо расписывать код, а то это уже получится что я за кого-то :) курсовик делаю ;))))



пс/2. задание - посчитать количество смайликов в посте :)
пс/3. код подлежит оптимизации :) просто лень переписывать ;)

Davit
Oct 27, 2003, 19:44
nuu vabshe to ya toje znayu , shto mojno ZARABOTAT' i KUPIT' knigu , i pover' ya regulyarno tak i delayu na moyu zarplatu (nu konechno ne na vsyu zarplatu :)) , prosto mne kajetsa esli est' elektronnaya versiya kakoy to knigi , mojno i ne kupit' eyo , a prosto chitat' na komputere. ne tak li ?

a v AUA tochno est' eta kniga ?

nm
Oct 27, 2003, 19:57
Originally posted by Davit
nuu vabshe to ya toje znayu , shto mojno ZARABOTAT' i KUPIT' knigu , i pover' ya regulyarno tak i delayu na moyu zarplatu (nu konechno ne na vsyu zarplatu :))


вот хороший повод иметь несколько зарплат :) на одну из них полностью можно закупаться книжками :)))) . скажем зарплату лектора аспиранта в политехе - 5.000 драм :) оч весело :)

Originally posted by Davit
prosto mne kajetsa esli est' elektronnaya versiya kakoy to knigi , mojno i ne kupit' eyo , a prosto chitat' na komputere. ne tak li ?


не так ли :) бумажная версия, стоящая на полке рядом, приятно греет душу и приятно читается лежа на диване :)))

Originally posted by Davit
a v AUA tochno est' eta kniga ?

лично по ней учился ;) v.2 кажется
вобщем не принципиально который revision книжки :)

еще - "Р.И. Компаниец, Маньков, Филатов, Системное программирование - основы построения трансляторов, СПб.Корона принт, 2000, 254 стр.
довольно приличная книжка

W_z_rd
Oct 27, 2003, 20:08
Chto ponimaem pod glubinoy programmi ? Esli idet rekursivniy vizov - kakova ego glubina ??

nm
Oct 27, 2003, 20:17
Originally posted by W_z_rd
Chto ponimaem pod glubinoy programmi ? Esli idet rekursivniy vizov - kakova ego glubina ??

шшшшшшшш.а вот туда не надо :))) а то будем искать рекурсивный Грааль :)
сказали же -по количеству вложенных циклов, значит по количеству вложенных циклов ;)

Davit
Oct 27, 2003, 20:58
Posmotriv na vopros , pervaya shto mojet pridti v golovu, eto TAKAYA JE REKURSIA kakuyu ty napisal (temi je principami).
a principy takie - esli 'for' togda return glubina_cikla() + 1; (shto u tebya vobshe netu , navernee pozabyl ;))

A vot s takim (kak u tebya ) realizaciem algorithma , u tebya konechno je budut problemy.


Prosto IMXO , tebe nujno vnimatel'no posmotret' kod , i esli ne len' perepisyvat' , delay eto eshyo raz , no xot' shtob algorithm rabotal na tvoix TESTov , kotorye ya dumayu ty ne sdelal ;)

Ponimaesh , dlya menya problema ne v tom , shtob , nu grubo govorya , prosto schityvat' glubinu , menya interesuet - mojno li sobrat' statistiku v proge , ne ispol'zuya grammatiku etovo jazyka , ili vabshe - stoit li etovo sdelat' ? Mojno li izbejat' vse vozmojnye oshibki?
Schityvat' Glubinu cikla prishla mne v golovu pervim , i vot eto ya i sprosil :)

kstati pro kursovuyu rabotu , tebe shto , tak slojno sdelat' komu to dobro ? :))) eto ne K. Rabota , po krayney mere ne MOYA:)

Davit
Oct 27, 2003, 21:12
to W_z_rd
a shto zanchit - kakova ego glubina ??

pod glubinoy progi ya imel v vidu maksimal'naya glubina vlojennyx ciklov.

nm
Oct 27, 2003, 21:34
Originally posted by Davit
Posmotriv na vopros , pervaya shto mojet pridti v golovu, eto TAKAYA JE REKURSIA kakuyu ty napisal (temi je principami).
a principy takie - esli 'for' togda return glubina_cikla() + 1; (shto u tebya vobshe netu , navernee pozabyl ;))

A vot s takim (kak u tebya ) realizaciem algorithma , u tebya konechno je budut problemy.


Prosto IMXO , tebe nujno vnimatel'no posmotret' kod , i esli ne len' perepisyvat' , delay eto eshyo raz , no xot' shtob algorithm rabotal na tvoix TESTov , kotorye ya dumayu ty ne sdelal ;)

Ponimaesh , dlya menya problema ne v tom , shtob , nu grubo govorya , prosto schityvat' glubinu , menya interesuet - mojno li sobrat' statistiku v proge , ne ispol'zuya grammatiku etovo jazyka , ili vabshe - stoit li etovo sdelat' ? Mojno li izbejat' vse vozmojnye oshibki?
Schityvat' Glubinu cikla prishla mne v golovu pervim , i vot eto ya i sprosil :)

kstati pro kursovuyu rabotu , tebe shto , tak slojno sdelat' komu to dobro ? :))) eto ne K. Rabota , po krayney mere ne MOYA:)

bzz ;) eto bylo perwoe chto prishlo w golowu .... naschet +1 zabyl ;)))
statistiku ...zachem sobirat' statistiku ?
dlja proverki progi est' takaja wesh' kak `lint` ;)
chto eshe nado dlja c/c++ program ?
optimizacija po proizwoditel'nosti ? est' ujma profajlerow ... i po ishodnomu kodu ty nikogda w zhizni /* ili pochti nikogda */ ne skazhesh, gde imenno budet tormozit' proga :)
a tak - my ushli kazhetsja w glubokij oftop .... perehodim obratno - konkretnyj wopros plz :)

Davit
Oct 28, 2003, 08:21
statistika mne nujna dlya moey diplomnoy , nu statistika vrodi etogo -

1. maximal'naya glubina ciklov , i skol'ko est' takix ciklov , imeyushix takuyu glubinu
2. skol'ko procentov zanimayut tesno vlojyonnye cikly , vrodi takix -
for ()
for ()
for ()
{
;
}
kodga tol'ko posledniy cikl imeet bolee odnovo "statement"-a
3. skol'ko procentov zanimayut cikly imeyushie pobochnyj vyxod ("break" ," return", mojet byt' "goto")

i t. p.


vopros -
Mojno li sobrat' statistiku v proge , ne ispol'zuya GRAMMATIKU etovo jazyka , ili vabshe - stoit li etovo sdelat' ? Mojno li izbejat' vse vozmojnye oshibki?


nu a algorithm pro GLUBINU PROGRAMMY VSYO ESHYO AKTUALEN :))) tak - kak pravilnix resheniy ne bylo

nm
Oct 28, 2003, 08:33
Originally posted by Davit
statistika mne nujna dlya moey diplomnoy , nu statistika vrodi etogo -

1. maximal'naya glubina ciklov , i skol'ko est' takix ciklov , imeyushix takuyu glubinu
2. skol'ko procentov zanimayut tesno vlojyonnye cikly , vrodi takix -
for ()
for ()
for ()
{
;
}
kodga tol'ko posledniy cikl imeet bolee odnovo "statement"-a
3. skol'ko procentov zanimayut cikly imeyushie pobochnyj vyxod ("break" ," return", mojet byt' "goto")

i t. p.

nu, wse reshabel'no, imho
Originally posted by Davit

vopros -
Mojno li sobrat' statistiku v proge , ne ispol'zuya GRAMMATIKU etovo jazyka , ili vabshe - stoit li etovo sdelat' ? Mojno li izbejat' vse vozmojnye oshibki?


NET :))) smotri prawilo programmirowanija N1 :)
oshibki budut wsegda .
a uprostit' grammatiku do bezobrazija - mozhno ....
skazhem tebja washe ne interesuet razbot arifmeticheskih wyrazhenij, tak? sledowtel'no moizhno ego wykinut' i prosto s'edat wse kuski koda tipa
VARIABLE = chto-to tam ;

Originally posted by Davit

nu a algorithm pro GLUBINU PROGRAMMY VSYO ESHYO AKTUALEN :))) tak - kak pravilnix resheniy ne bylo

ee, chto imenno ne ponravilos' ?
pokazhi kog na C, kotoryj ty napisal i testowyj primer, na kotorm on sletaet i schitaet neprawil'no ...

Davit
Oct 28, 2003, 10:36
a shto nado obyazatel'no kod pisat' shtob videt' shto algorithm ne rabotaet ?
naprimer vot testik


main() /*metka 1*/
{
for (true)
{
a = b; /*metka 2*/
for (true)
;
if (true)
{
} /*metka 3*/
}

for (true) /*metka 4*/
for (true)
for (true)
;
}


vyzyvim tvoyu funkciyu `
glubina_cikla(nachalnaya_poziciya); //nachalnaya_poziciya "main"

nachnyom -->

esli netu otkrywajushej operatornoj skobki {
perwaja zhe komanda _NE_FOR_ , to return 0;
/* perwaja komanda for */
propustit' kruglyys skobki;
return glubina_cikla(tekushaja pozicija);
}


vot uje ne srabotala . ladno dopustim eto mojno uladit'. // return 0;


/* nashli for */
sdwinutsja za kruglye skobki for-a /* t.e. na poziciju posle for (i=0, i<foo; i+=bar) */
max_glubina = max(max_glubina, glubina_cikla (tekushaja pozicija) + 1);


proshli metku 2 ...

/* nashli for */
sdwinutsja za kruglye skobki for-a /* t.e. na poziciju posle for (i=0, i<foo; i+=bar) */
max_glubina = max(max_glubina, glubina_cikla (tekushaja pozicija) + 1);



esli netu otkrywajushej operatornoj skobki {
perwaja zhe komanda _NE_FOR_ , to return 0;
// srabotala , return 0; max_glubina = 1;

/* perwaja komanda for */
propustit' kruglyys skobki;
return glubina_cikla(tekushaja pozicija);
}

while (ne_wstretili_for) {
idem dal'\she po textu
esli wsttretili zakrywajushie skobki, return max_glubina;
}


doshli do "metki 3" , i vot uvideli zakrywajushiyu skobku i sdelali
return max_glubina ;

i snova


while (ne_wstretili_for) {
idem dal'\she po textu
esli wsttretili zakrywajushie skobki, return max_glubina;
}


i vot uvideli eshyo odnu zakrywajushiyu skobku i sdelali
return max_glubina ; // max_glubina = 2;

algorithm okonchen .
max_glubina = 2 ; /* no doljna byla byt' 3*/
i do metki 4 my vabshe ne doshli.

vyvod - esli tam budut neskol'ko zakrywajushix skobok , to algorithm ne budet rabotat' .
vyvod - zakrywajushie skobki nel'zya ****at' okanchaniem cikla .
vopros - a shto mojno ****at' okanchaniem cikla? schitat' otkryvayushie i zakrywajushie skobki, i esli zakryvayushie i otkryvajushie rovny , togda sdelat' shto-to ...

vobshem mojno podumat' , no takie oshibki po-moemu budut snova i snova ...

Davit
Oct 28, 2003, 10:39
nu, wse reshabel'no, imho

vsyo eto ya uje sdelal

a uprostit' grammatiku do bezobrazija - mozhno ....
skazhem tebja washe ne interesuet razbot arifmeticheskih wyrazhenij, tak? sledowtel'no moizhno ego wykinut' i prosto s'edat wse kuski koda tipa
VARIABLE = chto-to tam ;


imenno tak i sdelal ;)