unknown.106alexa,
-> #104, fric > Treba na uradim program koji je u suštini interpreter - čita red
> po red iz text fajla, analizira, radi razne radnje. Kako bi
> se pisanje takvog programa moglo olakšati/ubrzati pomoću flexa
> ?
Ako je stvarno u pitanju interpreter, najviše bi ti odgovarala
kombinacija bison-flex odnosno yacc-lex. Posao oko analize ulaznog
teksta se značajno smanjuje, čini se sistematičnijim pa se smanjuje
i mogućnost greške itd. Istina, u početku je potrebno potrošiti
dosta vremena na upoznavanje sa 'mašinerijom'. Obično se kao primer
daje realizacija nekog kalkulatora pomoću yacc-a i lex-a. Nažalost,
nemam ovaj primer u obliku datoteke.
Inače, mogu da ti garantujem da Microsoft C za sintaksnu analizu -
parsing koristi analizator generisan pomoću yacc-a, a uveren sam
da je i leksički analizator generisan pomoću lex-a.
unknown.107beki,
Sad kada imamo LEX, logicni nastavak: Ima li neko YACC ?
Beki
unknown.108nkbog,
-> #107, beki> Sad kad imamo LEX, logicni nastavak: Ima li neko YACC
1001. put: imas bison (sto je u stvari YACC) u UNIX dir-u, a imas i
Brekli YACC u PC.SOFT:unix (su .EXE verzijom za ms.dos) pa biraj.
NB.
unknown.109dejanr,
Za ljubitelje Borland C-ova: izašao je novi C++ (3.0) i par drugih alatki. Više
o tome u NOVOSTI/bix 5.43 i 5.44
unknown.110dlozic,
Evo jednog programcica sa sourceom u c-u. Najbolja ideja!
dont.zipunknown.111andra,
-> #110, dlozicNisi valjda ???
:)))))))))))))))))))))
unknown.112ppekovic,
-> #110, dlozic>> Evo jednog programcica sa sourceom u c-u. Najbolja ideja!
Ovo je verovatno trebalo ići u viceve jer je ovo program koji ne
radi ništa, uostalom, pogledajte DOC fajl:
Pre nekoliko meseci (godinu dana) dobio sam program Don't i
odusevio sam se idejom. S obzirom da sam ga SLUCAJNO izbrisao, napisao
sam ga ponovo (sa izvinjenjem autoru). U ovoj arhivi imate source, izvrsnu
verziju i ovaj doc. file. Evo ga uputstvo kakvog ga se secam:
Da li ste umorni od dugih programa i uputstava? Ako jeste Don't je
prava stvar! Samo napisite sta netreba da se radi i on to nece uraditi.
Primer:
A:\>dont format my hard disk
nece formatirati vas hard disk! Ovo je prva i konacna verzija
(100% bug free). Program je shareware i ako ga koristite posaljite
$1000000 autoru.
Evo ga source u c-u:
#include <stdio.h>
main(argc,argv)
char *argv[];
int argc;
{
int i;
printf("Ok. I won't");
if (!--argc) printf(" do anything!\n");
else {
for (i=1;i<argc+1;i+=1) printf(" %s",*++argv);
printf(".\n"); }
}
Paya
unknown.113bojanp,
-> #110, dlozic> Evo jednog programcica sa sourceom u c-u. Najbolja ideja!
Imam ja jos bolju: Don't buy computer!
unknown.114zocha,
Zna li neko u cemu je razlika izmedju:
1. char a;
2. char *a;
3. char * a;
4. char* a;
- Zocha@Rista -
unknown.115zocha,
Imam problem koji ne mogu nikako da resim. Naime, otvorim datoteku za citanje,
procitam prvi slog u datoteci, kad ono sadrzaj prvog polja ne odgovara stvarnom
sadrzaju tog polja. Razlika je u tome, sto mi program (compajler?) na
neobjasnjiv nacin u sredinu polja doda ascii znake 239 i 001 (dekadno).
Pokusavao sam da pre otvaranja datoteke polja resetujem (popunim)
znacima blanko, ali ne vredi, ovi "fantomski znaci" se uvek javljaju i to
na istim mestima u polju (slogu). Ima li neko ideju o cemu se radi??
- Zocha@Rista -
unknown.118dlozic,
-> #111, andraaaaaaaaaaaaaaahaaaaaaaaaaa!
unknown.119dlozic,
-> #112, ppekovicPa, moglo je i u viceve, ali mozda nekome bude korista...
Tek da ga kasnije ne premestam :)
a mogu i u viceve da ga stavim (ako ljudi pokazu interesovanje...)
unknown.120mjova,
-> #114, zocha> 1. char a;
definicija promenljive a kao char.
> 2. char *a;
> 3. char * a;
> 4. char* a;
definicaj pointera na niz char, sve ima isti smisao.
unknown.121ppekovic,
-> #115, zocha>> Imam problem koji ne mogu nikako da resim. Naime, otvorim datoteku za
>> citanje, procitam prvi slog u datoteci, kad ono sadrzaj prvog polja ne
>> odgovara stvarnom sadrzaju tog polja. Razlika je u tome, sto mi program
>> (compajler?) na neobjasnjiv nacin u sredinu polja doda ascii znake 239 i 001
>> (dekadno).
Bilo bi korisno kada bi napisao kako ti izgleda deo programa koji
pravi probleme.
Paya
unknown.122zocha,
-> #121, ppekovic#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define Imenik "TELEFONI.DAT"
#define DuzinaIzlaznogSloga 55
#define MaxBrojPolja 2
typedef struct { char Ime[40];
char Telefon[15];
} Slog;
void main()
{
FILE *UlDat;
Slog *IzlazniSlog;
strcpy (IzlazniSlog->Ime, " ");
strcpy (IzlazniSlog->Telefon, " ");
UlDat = fopen (Imenik, "r+");
fread (IzlazniSlog, DuzinaIzlaznogSloga, 1, UlDat);
/* -----------------------------------------------------------------------
kada na ovom mestu pogledate sadrzaj sloga, u IzlazniSlog.Ime se nalaze
pomenuti fantomski znaci
----------------------------------------------------------------------- */
fclose (UlDat);
}
unknown.123zzivotic,
-> #122, zocha> void main()
> {
> FILE *UlDat;
> Slog *IzlazniSlog;
>
> strcpy (IzlazniSlog->Ime, " ");
> strcpy (IzlazniSlog->Telefon, " ");
>
> UlDat = fopen (Imenik, "r+");
> fread (IzlazniSlog, DuzinaIzlaznogSloga, 1, UlDat);
Imao si sreće - posledica ovakvog programa je češće zaglavljivanje računara ;)
Promenjiva IzlazniSlog je *pointer* - na šta on pokazuje to nigde nije
definisano. Dakle, treba ili prethodno:
IzlazniSlog = malloc( DuzinaIzlaznogSloga );
ili jednostavno, umesto pointera koristiti promenjivu, dakle
Slog IzlazniSlog;
pa zatim:
fread (&IzlazniSlog, DuzinaIzlaznogSloga, 1, UlDat);
Pozdrav, zz
unknown.125ddjj,
-> #110, dlozic==> (100% bug free). Program je shareware i ako ga koristite
==> posaljite $1000000 autoru.
^^^^^^^^
Pošto mi se program strašno dopao i intenzivni ga koristim šaljem
autoru (koji je program napisao po sećanju) ono što je tražio.
Nastavak je u datoteci money.arj.
Dejan
money.arjunknown.126mjova,
ovako,
otvorim file kao text, učitam sa fread i normalno da se sekvenca CR-LF
pretvara u LF. ovim je stvarna dužina niza (char) manja za broj redova
(tj. sekvenci CR-LF). kako odrediti tu, novu dužinu. da li možda
postoji neka bolja fora za učitavanje u memoriju char datoteke?
SY
unknown.127zocha,
-> #123, zzivotic> Promenjiva IzlazniSlog je *pointer* - na sta on pokazuje
> to nigde nije definisano. Dakle, treba ili prethodno:
>
> IzlazniSlog = malloc( DuzinaIzlaznogSloga );
>
> ili jednostavno, umesto pointera koristiti promenjivu,
> dakle
>
> Slog IzlazniSlog;
>
> pa zatim:
>
> fread (&IzlazniSlog, DuzinaIzlaznogSloga, 1, UlDat);
Aleluja! Mojoj sreci nigde kraja. Nemam reci zahvalnosti, stvarno. Samo cu
da kazem da sam srecan isto onoliko, koliko me je ova zavrzlama dovodila
do ludila (znaci puno).
Primenio sam prvi predlog, jer u originalu programa, procitan slog
prosledjujem funkciji za dalju obradu, a posto ne znam bolji nacin, to radim
tako sto joj prosledim pointer na slog. Ili moze i bolje?
- zocha@rista -
unknown.128zzivotic,
-> #127, zocha> Primenio sam prvi predlog, jer u originalu programa, procitan slog
> prosledjujem funkciji za dalju obradu, a posto ne znam bolji nacin, to
> radim tako sto joj prosledim pointer na slog. Ili moze i bolje?
Pa sve jedno, i ako je struktura statički deklarisana možeš da proslediš adresu
& operatorom tako da tvoja funkcija za obradu ostaje ista, recimo:
obradi( &IzlaziSlog );
Odluka da li dinamička ili statička alokacija je najčešće pitanje ukupnog
dizajna programa.
Pozdrav, zz
unknown.129bearboy,
-> #102, bojt> Nemam ja to, samo u principu znam kako rade kompajleri pod
> Pharom.
Thanx
unknown.130vpetrovic,
Našao sam na TRICKLE-u program za simulaciju buba švabe sa
source-om u C. To je neka vrsta simulacije neuro-mreže. Ako nekog zanima
UL-ovaću. Sem toga, baš me zanima da li još nekog zanimaju slične teme (mislim
na neuro-mreže, a ne na bubašvabe)
unknown.131mjova,
-> #126, mjova> otvorim file kao text, učitam sa fread i normalno da se
> sekvenca CR-LF pretvara u LF. ovim je stvarna dužina niza
nema veze, rešio sam problem.
SY
unknown.132dlozic,
-> #130, vpetrovicuploaduj! zanima me sve u vezi neuronskih mreza i sl. mogu ti
uploadovati i demo mog programa za dizajniranje&simulaciju. imam i
jednu lepu knjigu samo o n.mr.
(knj. je 550 str)
unknown.133djelovic,
Upravo sam sa Trickla dobio par casopisa CNEWS, i samo hocu da vas
obavestim da se ne trudite da ih DL-jete, jer su totalno sranje. Usput, ako
nekog zanima mala klasa (C++) za rad sa DXF (Autocad) fajlovima, javite se.
unknown.134dlozic,
-> #125, ddjjNisam stigao da se zahvalim do sada (morao sam da prebrojim)...
Sada imas i pismenu potvrdu autora da mozes da ga koristis!
Potpis: JA
unknown.135vpetrovic,
-> #132, dlozic Evo stiže. Nego imam (opet sa trickle-a) i program za dizajniranj &
simulaciju. Mogu ja i to da ul. Nego ajd'mi pozajmi tu lepu knjigu za jedan
kratak vremenski period, ako nije neki problem.
Vlada
nerves.zipunknown.136dragan.juric,
-> #126, mjovaProcitao sam da si resio, ali mozda ce ti ovo pomoci za svetlu buducnost.
Prvo, pitanje je sta ucitavas : tekst ili podatke ?
ako je tekst, predlog ti je niz pointera ( char **) pa ucitavaj svaki red
zasebno u jedan od njih.
ako su neki podaci, probaj C++ -
imas kontejnerske klase (tj podatke koji sadrze podatke) i koji imaju
procedure za snimanje onoga sto sadrze, a mozes i sam dopisati
( za ozbiljniji rad i moras). Rezultat je verovatno najelegantniji program
koji na tu temu moze da se sastavi
unknown.137mjova,
-> #136, dragan.juric> Prvo, pitanje je sta ucitavas : tekst ili podatke ?
text, neodređenog formata.
> ako je tekst, predlog ti je niz pointera ( char **) pa
> ucitavaj svaki red zasebno u jedan od njih.
to sam i mislio, ali nisam probao jer sam imao neke gotove stvari koje
nisam hteo da menjam. kad sam o tome razmišljao, primetio sam da je to
najbolje rešenje, ali ja program uvek pišem od kraja :) pa sam tako
sad došao na težu opciju, koju sam nekako rešio (CR preskačem, a LF
tretiram kao kraj reda).
teško zaboravljam način razmišljanja spektrumovog asemblera, i to me
užasno nervira. koliko sam uz njega naučio toliko me sad davi.
> ako su neki podaci, probaj C++ -
što se tiče onog ++, trenutno mi je dosta daleko jer nemam vremena da
sednem i pročitam još neke stvari.
hvala na savetu, možda se i predomislim.
mjova
unknown.138miljko,
Pitanje u vezi kompajlera TC2.0. Kako da ga nateram da mi u program
koji se kompajlira u SMALL modelu, naprimer, ulinkuje recimo strcpy ili
neku drugu funkciju iz recimo COMPACT modela?
Ovaj problem mi se javlja, relativno često kad alociram memorju sa
farmalloc ili sl. Stvar se naravno da rešiti tako što se elegantno sve
kompajlira u COMPACT modelu, ali avaj.
Za neki program koji radim pokupio sam PD biblioteku (sa TRICKLE-a)
a ona ima podrsku samo za SMALL.
U većini situacija se može snaći nekako (koristiti se mem f-jama,
itd.), ali ja bih ipak voleo da znam elegantno rešenje.
Miljko
P.S. Biblioteka je PGRAF110 i sa njom se moze po stampacu crtati
f-jama koje podsecaju na BGI interfejs. Ako ima interesenata...
unknown.139mjova,
-> #138, miljko> farmalloc ili sl. Stvar se naravno da rešiti tako što se
> elegantno sve kompajlira u COMPACT modelu, ali avaj.
> Za neki program koji radim pokupio sam PD biblioteku (sa
> TRICKLE-a) a ona ima podrsku samo za SMALL.
pa, ako hoćeš u nekom drugom modelu, onda treba platiti?
nisam siguran da ima neko jednostavno rešenje...
unknown.140ndragan,
-> #139, mjova/ nisam siguran da ima neko jednostavno rešenje...
motorola?
unknown.141lazo,
VOZDRA C narode!!!
Htio bih se počet bavit C-om, pa pitam da li neko zna nešto o MC20 - C
kompajleru koji se nalazi na Sezamu. Da li je dovoljan za početak, da li ima
nekih velikih razlika s ostalim vrstama C-jezika (mada su u biti svi isti,
ili bi bar trebalo da je tako) i sl.
Nadam se da će te mi pomoći i da ću onda znati da li treba da DL-jem tih
190K ili ne.
Pozdrav Mickey.
unknown.142ppekovic,
-> #141, lazo>> Htio bih se počet bavit C-om, pa pitam da li neko zna nešto o MC20 - C
>> kompajleru koji se nalazi na Sezamu. Da li je dovoljan za početak, da li ima
>> nekih velikih razlika s ostalim vrstama C-jezika (mada su u biti svi isti,
>> ili bi bar trebalo da je tako) i sl.
>> Nadam se da će te mi pomoći i da ću onda znati da li treba da DL-jem tih
>> 190K ili ne.
*** MICRO-C Features ***
- Very easy to port, not tied to any processor architecture.
- Lots of documentation (>200 pages) and example programs.
Includes detailed information on porting the compiler.
- Includes built-in and external pre-processors.
- Includes post-processor optimizer for even better performance.
- Over 130 library functions supplied (IBM PC version).
- All source code for compiler, libraries and utilities is included.
- Includes code generators for: 8080/8085/Z80, 80x86, 6809, 68HC11
- 80x86 implementation is MASM compatible and supports both the TINY
and SMALL memory models.
- More complete implementation, more efficent code produced,
and faster compilation than most other "SMALL-C" compilers.
*** MICRO-C Language Summary ***
It does support:
- All 'C' statements:
if/else while do/while for break continue
return goto switch/case/default šć ;
- All 'C' operators:
(Except structure reference: . and ->)
+ - * / % & đ ž << >> > < == č
+= -= *= /= %= &= đ= ž= <<= >>= >= <= != !
++ -- ?: , () ŠĆ
(++ and -- may be pre or post)
( * and & also perform INDIRECTION and ADDRESS OF)
- The following data types (with no restrictions):
int char unsigned (incl: unsigned char)
extern static register
- pointers to any type (including pointers)
- Arrays of any type (including pointers)
- Function can return any type (incl. pointers)
- Typecast of value to above types
- Multi-dimensional arrays.
- Decimal, Octal and Hex constants
eg: 127, 0177, 0x7f
- Inline assembly code
- Full support for strings and character constants: ('' "")
Including: Đn Newline
Đr Carriage return
Đt Horizontal tab
Đb Backspace
Đf Formfeed
Đ177 Octal constants
Đx7f Hexidecimal constants
(16 bit character constants are supported. eg: 'ab')
- Fairly complete preprocessor
- Integral pre-processor is very FAST and supports
#define (non-parameterized)
#include
#ifdef/#ifndef/#else/#endif (single level)
#asm/#endasm
- External pre-processor supports:
#define (fully parameterized)
#undef
#forget (multi undef -similar to forth forget)
#include (with <> library support)
#ifdef/#ifndef/#else/#endif (fully nested)
#asm/#endasm (passed through & handled by integral)
It does not support:
- Structures and Unions, Typedef, Long / Double / Float and
Enumerated data types, Bit fields.
Paya
unknown.143lazo,
-> #142, ppekovicHvala, DL-vaću :))))))).
unknown.144dgrbic,
-> #141, lazo:: Htio bih se pocet bavit C-om, pa pitam da li neko zna
:: nesto o MC20 - C
Ono sto ti je odgovorio PPekovic, stoji - pod uslovom da narucis
MC20 od proizvodjaca.
U fajlu koji je na Sezamu nedostaje source kompajlera (sto mislim
da ti i nije mnogo bitno), i dat je generator koda SAMO za 8088,
i biblioteke za IBM PC.
Znaci, iz Payinog odgovora "izbaci" tih par pasusa, i to ti je.
Inace, najveca mana mu je sto ne podrzava strukture.
U conf. ORKA, tema PD.SOFT imas i Small C prikacen uz neku poruku
(Bulaja nikako da ga prebaci u Dir).
Prilozen je i kompletan source kompajlera i biblioteka, ali za
njegovu upotrebu moras imati i assembler (ne prevodi direktno u
.OBJ, nego pravi .ASM source).
Jedan assembler imas u \IBMPC\PROG (cini mi se da se tako zove
dir?)
Takav postupak (.c -> .ASM -> .OBJ) je, cini mi se, dobar nacin
da se ponesto nauci.
Srecno ucenje!
unknown.145bulaja,
-> #144, dgrbic│U conf. ORKA, tema PD.SOFT imas i Small C prikacen uz neku poruku
│(Bulaja nikako da ga prebaci u Dir).
└───
Prebaceno ;).
\IBMPC\PROGRAM\sc88.zip
Zahvaljujem dvidovic-u koji je svojevremeno poslao sc88.zip na prilogu.
unknown.146mjova,
he, ne radim dugo u C-u, ali me zanimeju neke stvari :)
krenuo sam nešto da uradi i primetio sam blagu nelogičnost. u pitanju
je struktura ftime:
FTIME (struct)
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
A file's time and date.
struct ftime {
unsigned ft_tsec : 5;
unsigned ft_min : 6;
unsigned ft_hour : 5;
unsigned ft_day : 5;
unsigned ft_month : 4;
unsigned ft_year : 7;
};
Defined in io.h
ovim je definisano 5 bit-a za sekunde, a svima je dobro poznato da
sekundi ima 60 (a ne 32 koliko je 2^5). da li je ovourađeno namerno
ili ne nije mi jasno.
ima li načina da se izbegne ova struktura ili ne? (da li dos diktira
uslove?)
ovo je struktura koja je definisana u BC++, kako izgleda u MSC?
SY
unknown.147nandi,
-> #146, mjova> ovim je definisano 5 bit-a za sekunde, a svima je dobro poznato da
> sekundi ima 60 (a ne 32 koliko je 2^5). da li je ovourađeno namerno
> ili ne nije mi jasno.
>
> ima li načina da se izbegne ova struktura ili ne? (da li dos diktira
> uslove?)
vrednost u tih pet bitova treba pomnoziti sa dva da bi se dobile
sekunde. tu je dos ućario bit, da bi sve moglo da stane u ceo broj
bajtova. pogledaj vremena kad lupis time, sve sekunde su parne.
pozdrav nandi
unknown.148andra,
Jel neko probao da compilira onaj UNARJ.C koji se nalazi na sezamu
(ibmpc\archiver\unarj221.exe)? Ja sam probao ali mi nesto ne radi. Ako neko
ima neko iskustvo sa ovim, bio bih mu zahvalan na odgovoru!
Pozdrav, !Andra!
unknown.149ppekovic,
-> #146, mjova>> ovo je struktura koja je definisana u BC++, kako izgleda u MSC?
Ovako:
Include: <sysĐtimeb.h>
Structure:
struct timeb
š
time_t time;
unsigned short millitm;
short timezone;
short dstflag;
ć;
Type: time_t
Include: <time.h>
Summary: Type for representing calendar time in seconds.
typedef long time_t;
Paya
unknown.151dgrbic,
-> #149, ppekovic::>> ovo je struktura koja je definisana u BC++, kako
:: izgleda u MSC?
::
:: Ovako:
::
:: Include: <sysDtimeb.h>
Ne bih rekao, struktura FTIME u BC++ se koristi za citanje
vremena kreiranja/pisanja datoteke funkcijom... ne secam se vise
imena funkcije, sad sam presao na MSC, u njemu za tu svrhu sluzi
funkcija
_dos_getftime (int handle, unsigned *date, unsigned *time);
:: struct ftime {
:: unsigned ft_tsec : 5; \
:: unsigned ft_min : 6; > unsigned *time
:: unsigned ft_hour : 5; /
:: unsigned ft_day : 5; \
:: unsigned ft_month : 4; > unsigned *date
:: unsigned ft_year : 7; /
:: } ;
Velicine se potpuno slazu. A da bi sve stalo u unsigned long,
vreme je skraceno na parne sekunde, sto i nije neka greska, jer
je vreme zapisivanja fajla "proces koji traje"
Funkcija ftime u MSC (a verovatno i u BC), vraca tekuce vreme u
strukturi timeb:
void ftime (struct timeb *time);
description:
ftime returns the current time.
time is a pointer to a structure of type timeb defined in
the include file timeb.h as follows:
...
iz knjige MICROSOFT C RUN TIME LIBRARY, Kris James,
Microsoft Press
ftime je System V kompatibilna funkcija, i trebalo bi da je ima i
BC.
unknown.152lanik,
-> #148, andra
Kako bre ne radi? Pa radi i na Atariju ST a da ne radi na PC-ju???
;))
--> A nanosecond here, a nanosecond there,
--> next thing you know you've got real time.
unknown.153gww.,
-> #104, fric>Treba na uradim program koji je u suštini interpreter - čita red po
>red iz text fajla, analizira, radi razne radnje. Kako bi se pisanje
>takvog programa moglo olakšati/ubrzati pomoću flexa ?
Pošto je tema ineteresantna i za mene evo sledećih zaklučaka do kojih sam
došao tragajući za rešenjem.
Baterija lex-yacc ima veliku filozofsku manu a to je da kao rezultat
dobiješ prevod tvog jezika u C, znači translator. Za konačno rešenje treba
ti C compiler.
E pa lepo, a gde je tu onda interpretator. Koliko sam shvatio baterriju
lex-yacc treba nekako preseliti u memoriju tako da, ako se dobro sećam
termina, sintaksni teror obaviš u memoriji i odmah izvršiš odgovarajuće
funkcije.
Video sam takav primer na PL-1 interpretatoru sličnom starim borlandovim
kompajlerima. Nažalost izvor tih informacija (Toza) preselio se u
Australiju pa ga je nemoguće pitati za detalje. Imam ovde na disketama neke
primere korišćenja takve baterije i otprilike mi je jasno šta se tu dešava.
Ono što mi je otprilike jasno jeste:
1. da LEX otprilike radi tzv. tokenizaciju t.j. odvaja objekt od objekta
(funkcije, promenljive, konstante, operacije) i ono što dobiješ ulaz je za
YACC odnosno header fajla za include u konačni C kod
2. da YACC radi sintaksnu analizu (koji objekt stoji ispred, iza i izmedju
čega) i izlaz mu je prevod tvog programa u tvom jeziku u obliku c source-a
3. Oba formiraju svojevrsne tabele (lex - kodova, yacc jedan veeeeeliki
switch)
Dakle uvek i uvek dobijaš transliran tvoj jezik u C. Filozofija je: "šta će
tu opet neki novi jezik kad je C dovoljan" i prilično mi se ne svidja
odnosno ne rešava ni moj ni tvoj problem. Jedini paket koji je čini mi se
dao slobodan pristup svojoj sintaksnoj analizi je Actor (pod windows-ima)
ali sumnjam da će ti to mnogo pomoći. Izgleda da nam se prespektiva smeši
verovatno kada situacija bude zrela (čitaj: kada ne budu imali više šta da
dodaju na ionako megabajte kompajlera, neko će se setiti da dodaju i ove
alate kao neke vrste funkcija). U C-ovim bibliotekama imaš neke rudimente
analizatora u okviru str... funkcija sve ostalo je tvoj (moj) posao. Voleo
bih da vidim šta si uradio kad uradiš.
Dobro razmisli o sledećim mogućnostima:
1. LEX + YACC u sorce-u (da bi mogao da ih ugradiš u tvoj program)
2. Da sam napišeš nešto poput takve baterije, to se zove proći sintaksni
teror, ne treba mnogo samo je strašno zamorno sa dosta fizičkog i mentalnog
posla (crtanje pomaže).
3. Da pitaš ZZ-a kako je rešio komandnu liniju u svojim programima
Nadam se da sam problem bar osvetlio.
Pozdrav GWW.
P.S. mislim da je ovo zaista interesantna tema za postavljanje na
rapravljački sto. Ako je to suviše za ovu konferenciju, rado bih učestvovao
u grupi koja bi se bavila/rapravila ovo pitanje.
unknown.154gww.,
-> #96, bojtIma li preporuka za DOS-extender ?
unknown.155djelovic,
-> #153, gww. Zapravo gresis! Lex + Yacc pravi od ulaznog teksta kostur programa u C-u
zapravo onda ti nadogradjujes i pravis compiler ili interpreter. Moze se
napraviti interpreter pomocu L+Y, ali zavisno od strukture jezika odluci sam da
li se to isplati. Rescimo, za 6502 assembler ti to sigurno ne treba.
unknown.156djelovic,
-> #154, gww. Phar Lap DE. Najvise ga ljudi koristi, pa pretpostavljam da za to ima
razloga. Inace, objavljen je jedan i u DDJ-u, pa ako te zanima da ga dovuces u
izv. kodu sa trickle-a...
unknown.157bulaja,
-> #148, andra│Jel neko probao da compilira onaj UNARJ.C koji se nalazi na sezamu
│(ibmpc\archiver\unarj221.exe)? Ja sam probao ali mi nesto ne radi.
│Ako neko ima neko iskustvo sa ovim, bio bih mu zahvalan na odgovoru!
└───
Da, meni radi odlicno sa Borland C++2.0. Koji C koristis i da li si
koristio MAKE il' samo kopajlirao unarj.c (a trebas i jos ona dva
odvojena modula, ne znam im ime).
unknown.158ppekovic,
-> #157, bulaja>> Da, meni radi odlicno sa Borland C++2.0. Koji C koristis i da li si
>> koristio MAKE il' samo kopajlirao unarj.c (a trebas i jos ona dva
>> odvojena modula, ne znam im ime).
Nevolja je sto verovatno koristi MSC a za msc nije ukljucen make fajl u
ovoj arhivi. U stvari, postoji, ali za OS/2. E sad, sve to lepo radi i sa
MSC-om i, koliko se secam, treba jednostavno da prevedes svaki od datih modula
sa:
CL /c /AS <ime>.c
pa onda da ih ulinkujes sa:
LINK ime1 ime2 ime3,,,
i to je to. Jedino se ne secam koliko je bilo ovih modula (3-4 cini mi se).
Paya
unknown.159mjova,
-> #153, gww.> rapravljački sto. Ako je to suviše za ovu konferenciju,
> rado bih učestvovao u grupi koja bi se bavila/rapravila
> ovo pitanje.
zašto u grupi? ovde može ladno da se piše o tome! odavno ovde očekujem
jače tekstove o C-u i ostalom stvarima.
SY
unknown.160miro,
-> #153, gww.■■> Baterija lex-yacc ima veliku filozofsku manu a to je da
■■> kao rezultat dobijes prevod tvog jezika u C, znaci
■■> translator. Za konacno resenje treba ti C compiler.
Ovo nije tacno. Ni filozofski :), a logicki da i ne govorimo.
Rezultat nije prevod jezika u C, nego generisanje prevodioca u
C-u.
■■> 1. da LEX otprilike radi tzv. tokenizaciju t.j. odvaja
■■> objekt od objekta (funkcije, promenljive, konstante,
■■> operacije) i ono sto dobijes ulaz je za YACC odnosno
■■> header fajla za include u konacni C kod
Leksicki analizator nije tesko napraviti pjeske, ali poslije petog
put postaje DOSADNO :(( LEX pravi pristojan kod koji se onda kompajlira
sa CC i koristi kao takav.
■■> 2. da YACC radi sintaksnu analizu (koji objekt stoji
■■> ispred, iza i izmedju cega) i izlaz mu je prevod tvog
■■> programa u tvom jeziku u obliku c source-a
YACC generise kod za sintaksno upravljanu kompilaciju (otprilike tako
nesto). To znaci da generisani kod (procedure) obavlja analizu i u
kod za analizu inkorporira i neke akcije koje kod jednostavnih jezika
mogu sasvim udovoljiti.
■■> 3. Oba formiraju svojevrsne tabele (lex - kodova, yacc
■■> jedan veeeeeliki switch)
Tabele koje oni formiraju su njihova stvar. Veza sa njima se ostvaruje
kroz procedure koje LEX i YACC naprave.
Inace, sami program su dosta mocni i priznati u praksi. Trenutno citam
"Compilers, Principles, Techniques and Tools" od Aho-a, Sethi-a i
Ullman-a i autori u dva poglavlja, "Lexical Analysis" i "Syntax
Analysis", preporucuju koristenje LEXa i YACCa za razvoj odgovarajucih
dijelova kompajlera. Kvalitet leks.analizatora i parsera je slabiji
nego sto se moze postici rucnim kodiranjem, ali je odnos
upotrebljivost/vrijeme razvoja MAKSIMALAN.
Dragisa
unknown.161gww.,
-> #155, djelovic> Zapravo gresis! Lex + Yacc pravi od ulaznog teksta kostur programa u
C-u zapravo onda ti nadogradjujes i pravis compiler ili interpreter.
Moze se napraviti interpreter pomocu L+Y, ali zavisno od strukture
jezika odluci sam da
well meni je jasno da on daje C source u izlazu, ako si na to mislio
upotrebom "pravi od ulaznog teksta kostur programa u C-u" samo pitanje
glasi šta je taj kostur? t.j. šta je produkt L&Y bez intervencija
translator ili interpretator. Nema problema dobiću neki SWITCH da razbacane
tokene nekako izvršim (po sintaksnim pravilima) ali koji deo generisanog
kod će mi uraditi leksičku/sintaksnu analizu?
Ne bi bilo loše od tebe ili od mira da napravite jedan primer u obliku
kalkulatora i to sledećeg:
brojevi, operacija sabiranja i oduzimanja
da ne bi bilo komplikovano ne treba da radi unarni minus.
dakle samo 3 tokena, broj i dve operacije.....
znači čita datoteku
1+2
2+3
3-4
5-2
i posle svakog reda ispise rezultat
pa bi na osnovu tog primera imali o čemu da raspravljamo. Objašnjenja o L&Y
sistemu koja imam ispričao mi je čovek koji nije ovde (u Jugi) pa sam
sretan kada imam nekog da pitam, s tim da volim da postavljam nezgodna
pitanja. Vrlo rado volim da se razuverim dobrim argumentima, onda sam nešto
saznao, ovako ....
pozdrav GWW.
unknown.162gww.,
-> #160, miro> Rezultat nije prevod jezika u C, nego generisanje prevodioca u
> C-u.
da. generisanje prevodioca koji prevodi vaš jezik u C, to sam i rekao ako
se ne varam.
'i izlaz mu je prevod tvog programa u tvom jeziku u obliku c source-a
da varam se rekao sam ovo, a mislio na sledeće:
+------#include----+
: :
leksička pravila ---> lex -----: :
sintaksna pravila ---:---> YACC --+-> prevodilac.c --->
--->prevodilac.c---->prevodilac.exe----:
program u 'jezik'-u--+---> program.c ----> program.exe
rekoh, crtanje pomaže
> YACC generise kod za sintaksno upravljanu kompilaciju (otprilike tako
> nesto). To znaci da generisani kod (procedure) obavlja analizu i u
> kod za analizu inkorporira i neke akcije koje kod jednostavnih jezika
> mogu sasvim udovoljiti.
Ovo bih još mogao da progutam kao politički govor, ukratko ne znači mi
ništa (bez uvrede). Da li bi moglo ovo da se malo narodskije objasni?
> Inace, sami program su dosta mocni i priznati u praksi. Trenutno citam
> "Compilers, Principles, Techniques and Tools" od Aho-a, Sethi-a i
baš lepo, to je kao da imam rols-rojs a ne znam da ga vozim, samo znam da
je strašno moćan i priznat (i skup) :))) Bez šale voleo bih da pogledam tu
knjigu. Ima li u njoj some source u C-u, onako upotrebljiv, na primer kao u
"Data structures, an advanced approach using C" gde je dat mali lisp
interpreter.
unknown.163gww.,
-> #159, mjovaNemam ništa protiv da se o ovome razgovara u conf, naravno da nemam,
samo sam mislio da se priča neće dopasti ostalima.
unknown.164djelovic,
-> #161, gww.> Ne bi bilo loše od tebe ili od mira da napravite jedan primer
> u obliku kalkulatora i to sledećeg:
Nije meni tesko da ti napravim primer, ali evo da se odlucimo za laksu
varjantu: Uz Turbo C++ dobijas i spreadsheet TCALC. Posto sam ja to davno
obrisao sa HD-a i ne znam ime datoteke, potrazi malo - matematika u TCALC-u je
napravljena pomocu YACC-a.
unknown.165djelovic,
-> #162, gww. Nemoj da budes u zabludi da prevodilac napravljen Y+L-om pravi od datoteke
na jeziku X obavezno C source. Mozes ti da nabudzis bilo koji izlazni format
(recimo OBJ).
unknown.166gww.,
-> #156, djelovic> Phar Lap DE. Najvise ga ljudi koristi, pa pretpostavljam
> da za to ima razloga. Inace, objavljen je jedan i u DDJ-u,
> pa ako te zanima da ga dovuces u izv. kodu sa trickle-a...
imaš li ddj-ove ? zanima me tekst o btree, source je ovde
negde na Sezamu, znam šta radi ali bih voleo da pročitam i
članak.
Naravno zanima me i taj DOS-extender. Znaš li kako se zove
datoteka? Za skidanje možda će pomoći MJOVA.
MJOVO hoćeš li ?
unknown.167gww.,
-> #164, djelovic> Nije meni tesko da ti napravim primer, ali evo da se
> odlucimo za laksu varjantu: Uz Turbo C++ dobijas i
> spreadsheet TCALC. Posto sam ja to davno obrisao sa HD-a i
> ne znam ime datoteke, potrazi malo - matematika u TCALC-u
> je napravljena pomocu YACC-a.
Well, nisam ni mislio da je teško nego je to podloga za raspravu.
što se tiče calc-a u tc-u ili u tp-u znam da je napravljen pomoću YACC-a
tako bar piše u dokumentaciji, ali složićeš se sa mnom yacc source nije ni
dat uz malu napomenu da je dat samo minimalni deo opisa sintakse od 10-tak
redova i to za četiri osnovne računske radnje, ali pravi source nije dat.
Štaviše ostatak je mogao biti i sigurno jeste doterivan ručno. Slažeš li
se?? Pored toga tcalc-ovi imaju brdo tokena sa kojim barataju, tekst, slova
funkcije ... i to još raznih osobina. Ne! to je mnogo komplikovano za
raspravu, baš zato sam i poželeo onakav minimalan primer. "3 tokena a
interpretator"
unknown.168gww.,
-> #165, djelovic> Nemoj da budes u zabludi da prevodilac napravljen Y+L-om
> pravi od datoteke na jeziku X obavezno C source. Mozes ti
> da nabudzis bilo koji izlazni format (recimo OBJ).
Da da u pravu si uvek je u pitanju translacije jezika X u jezik Y s tim što
je uobičajeno jezik Y = C. Mada to i nije problem, problem je u kao što
rekoh u filozofskoj postavci. Nema dela programa koji rade L&Y posao,
tokenizaciju i sintaksnu analizu, odnosno L&Y moraš imati u okviru
interpretatora da bi mogao da uz pomoć njih napraviš analizu pa
interpretaciju.
Sve mi se čini da razgovaramo na rusko kineskoj granici, razgovaramo o
granici ali ja pričam kineski i rešavam kineski problem a ti ruski i ruski
problem, hoću reći jedno je translator a drugo interpretator.
P.S. znaš li zašto se zove baš YACC ?
unknown.169djelovic,
-> #166, gww.> imaš li ddj-ove ? zanima me tekst o btree, source je ovde
> negde na Sezamu, znam šta radi ali bih voleo da pročitam
> i
> članak.
>
> Naravno zanima me i taj DOS-extender. Znaš li kako se zove
> datoteka? Za skidanje možda će pomoći MJOVA.
DDJ-ove imam, nije problem da ti ih pozajmim. Reci samo broj ili bar opseg
brojeva koji ti trebaju.
Sto se tice datoteka, na trickle-u se nalaze kompletni listinzi iz DDJ-a,
pa potrazi malo u onoj datoteci sto je Bulaja poslao. Ako ti treba, dacu ti ja
racun na BUEF78-ici pa ti to narucuj.
P.S. Extender se zove PROT i izasao je u Oktobru i Novembru 1990-te.
unknown.170djelovic,
-> #168, gww.> P.S. znaš li zašto se zove baš YACC ?
YACC = Yet Another Compiler Compiler.
Sacekaj sa raspravom, u nekim od sledecih racunara (mozda i ovi, decembraski)
igor.mil treba da napise tekst o L+Y. Onda napadaj :).
> odnosno L&Y moraš imati u okviru
> interpretatora da bi mogao da uz pomoć njih napraviš analizu
> pa interpretaciju.
NE! Tu zaista ima neko fiksno parce koda koje se ubacuje u svaki program
napravljen sa njima, ali to nisu kompletni L+Y.
unknown.171igor.mil,
-> #161, gww.> Ne bi bilo lose od tebe ili od mira da napravite jedan primer u obliku
> kalkulatora
Evo trazenog primera (tesko onome ko ima JUS standard za nasa slova,
ali takvi valjda i ne koriste C ):
=== file: first.l ===================================================
number [0-9]+\.?|[0-9]*\.[0-9]+
%%
[ \t]+
{number} { sscanf(yytext, "%lf", &yylval);
return NUMBER; }
\n|. return yytext[0];
=== file: second.y ==================================================
%{
#include <ctype.h>
#include <stdio.h>
#define YYSTYPE double
%}
%token NUMBER
%left '+' '-'
%left '*' '/'
%right UMINUS
%%
lines : lines expr '\n' { printf ("%g\n", $2); }
| lines '\n'
|
;
expr : expr '+' expr { $$ = $1 + $3; }
| expr '-' expr { $$ = $1 - $3; }
| expr '*' expr { $$ = $1 * $3; }
| expr '/' expr { $$ = $1 / $3; }
| '(' expr ')' { $$ = $2; }
| '-' expr %prec UMINUS { $$ = - $2; }
| NUMBER
;
%%
#ifdef MYLEX
yylex() { /* ovo je leksicki analizator */
int c;
while ( ( c = getchar() ) == ' ' );
if ( (c == '.') || isdigit(c) ) {
ungetc(c, stdin);
scanf("%lf", &yylval);
return NUMBER;
}
return c;
}
#else
#include "lexyy.c"
#endif
yyerror(char *msg)
{
}
main()
{
yyparse();
}
=====================================================================
Primeri su iz knjige Aho, Sethi, Ullman "Compilers - Principles,
Techniques, and Tools", s tim sto sam ih u nekim sitnicama izmenio.
Pretpostavlja se da imate *izvrsne* oblike lex&yacc programa, koje se
u mom slucaju zovu "flex.exe" i "byacc.exe". Kalkulator se pravi na
jedan od sledeca dva nacina (ne obracajte na paznju na compiler
warning-e tipa "unreachable code" i druge, koje cete dobiti od Turbo
C-a):
[varijanta 1]
flex first.l ! rezultat -> "lexyy.c"
byacc second.y ! rezultat -> "y_tab.c"
tcc y_tab.c ! rezultat -> "y_tab.exe"
[varijanta 2]
byacc second.y ! rezultat -> "y_tab.c"
tcc -DMYLEX y_tab.c ! rezultat -> "y_tab.exe"
Kalkulator cita aritmeticke izraze terminisane karakterom '\n' sa
standardnog ulaza i pise rezlutat na stand. izlaz. Poziva se, naravno
sa "y_tab".
Izrazi se sastoje iz operatora ( ) + - * / i unarni minus, a operandi
su C "double" konstante. Na primer:
3e-2/(6 - .45) (ne bojte se, 3e-2 ga nece zbuniti)
Znaci blanko i tab nisu bitni (leksicki analizator ih "pojede").
Program ispisuje rezultat izraza posle ucitavanja karaktera '\n'.
U varijanti 1, parser generisan yacc-om koristi leksicki analizator
generisan lex-om. U varijanti 2 je funkcija "yylex" koja obavlja
leks. analizu napravljena rucno i inkorporirana u "user code" sekciju
yacc specifikacije (fajl "second.y"). Parametar MYLEX odredjuje da li
ce se koristiti ovaj kod, ili includovati kod generisan lex-om (fajl
lexyy.c) po specifikaciji u fajlu "first.l".
I jos nesto, u izvrsnoj verziji dobijenoj var. 1 i var. 2 postoje
funkcionalna razlika kada se kao ulaz koristi tastatura (t.j. bez
redirekcije), jer leksicki analizator dobijen lex-om radi baferovanje
(tamponazzu :)) ulaza. Zbog ovoga u var. 1, udarac na "enter" na
kraju izraza nece odmah prouzrokovati ispis rezultata, nego tek drugi
udarac na pomenuti taster (kada se unese sledeci izraz, koji moze biti
i prazan), a u var. 2 se ulaz ne baferuje. Ako je ulaz preusmeren iz
fajla ponasanje porograma dobijenih u obe varijante je identicno.
Inace, "flex" ima opciju za proizvodnju leks. analizatora bez
baferovanja ulaza, koju je neophodno koristiti ako se planira ulaz sa
tastature.
unknown.172igor.mil,
-> #167, gww.> Stavise ostatak je mogao biti i sigurno jeste doterivan rucno. Slazes li
> se??
Ja se ne slazem. Yacc generise C kod u obliku funkcije koja se zove
"yyparse" i ona se jednostavno pozove uz prosledjivanje izraza i
izracuna rezultat. Nikakva rucna doterivanja koda generisanog yacc-om
ili lex-om nisu potrebna, a duboko sumnjam i da su moguca. Pogledaj C
source generisan yacc-om iz primera koji sam naveo u prethodnoj
poruci. Videces da je ogroman deo koda deklaracije tipa:
yytable[] = {3,6,7,0,0,0,5,6,7,0,0,0,0,4,5,6,7,8,... /* i.t.d. */
unknown.173igor.mil,
-> #162, gww.>---> prevodilac.c---->prevodilac.exe----:
> program u 'jezik'-u--+---> program.c ----> program.exe
Ovo sto si ti nacrtao je pravljenje translatora iz nekog programskog
jezika u C. Taj prevodilac se moze praviti lex&yacc alatima, ali to im
nije jedina namena. Naprotiv, oni se koriste da olaksaju dizajn bilo
kakvog kompajlera/interpretera/translatora.
Ja sam recimo, iz zezanja, za kratko vreme napravio jedan BASIC
interpreter koji je imao INPUT, PRINT, LET i IF naredbe. Naravno,
nema nikakvu upotrebnu vrednost (mrzelo me da resavam grananje), ali
recimo, slozenost izraza (broj postojecih operatora) ili liste
agrumenata PRINT naredbe nije nikakav problem. Ako nekog interesuje
kako to izgleda, mogu da stavim ovde lex i yacc programe (t.j. lex i
yacc specifikacije).
unknown.174igor.mil,
-> #168, gww.> Da da u pravu si uvek je u pitanju translacije jezika X u jezik Y s tim
> sto je uobicajeno jezik Y = C.
Daleko bilo! Uobicajeno je da je Y == OBJ, dok je ovo sto si ti naveo
prilicno neuobicajeno.
unknown.175bulaja,
-> #169, djelovic│DDJ-ove imam, nije problem da ti ih pozajmim. Reci samo broj ili bar
│opseg brojeva koji ti trebaju.
│Sto se tice datoteka, na trickle-u se nalaze kompletni listinzi iz
│DDJ-a, pa potrazi malo u onoj datoteci sto je Bulaja poslao. Ako ti
│treba, dacu ti ja racun na BUEF78-ici pa ti to narucuj.
└───
Sad ste me ovog diskusijom naterali da malo ispitam "trziste" ;) za
ono sto planiram da uradim prilicno dugo.
Dakle, koliko vas je zainteresovano da se na Sezamu redovno (tj.
svakog meseca) pojavljuju listinzi iz DDJ-a? Ako ne znate sta se tamo
moze naci, poslacu ovih dana neki od svezijih paketa, a imate npr. i
dflat5.zip u \pc\prg koji je takodje iz jednog od takvih paketa.
Molim sve koji su za ovo, da mi jave na private mail.
Pozdrav,
Bulaja
unknown.176mjova,
-> #166, gww.> MJOVO hoćeš li ?
moze, moze ;)
unknown.177ppekovic,
-> #173, igor.mil>> Ako nekog interesuje
>> kako to izgleda, mogu da stavim ovde lex i yacc programe (t.j. lex i
>> yacc specifikacije).
Interesuje mene i to veoma!
Paya
unknown.178ppekovic,
-> #175, bulaja>> Dakle, koliko vas je zainteresovano da se na Sezamu redovno (tj.
>> svakog meseca) pojavljuju listinzi iz DDJ-a? Ako ne znate sta se tamo
>> moze naci, poslacu ovih dana neki od svezijih paketa, a imate npr. i
Samo napred bulaja, mnoge će zanimati, a ostalima neće smetati
jer ćeš te listinge kačiti kao fajl uz poruke i svi srećni svi
zadovoljni.
Paya
unknown.179igor.mil,
-> #177, ppekovic>>> Ako nekog interesuje
>>> kako to izgleda, mogu da stavim ovde lex i yacc programe (t.j. lex i
>>> yacc specifikacije).
>
> Interesuje mene i to veoma!
Evo Payo, specijalno za tebe sam doterao komentare, i napisao
dokumentaciju, radio sam do 2h nocas, nadam se da ces to umeti da
cenis :)). Ne trazim nista vise nego da budes umeren sa kritikama,
mnogo sam sujetan covek :).
--- Izvod iz dokumentacije ----------------------------------------
MicroBASIC
==========
Ovo je interpreter za MicroBASIC napravljen uz pomoc lex&yacc alata.
Prilozeni su izvorni fajlovi za L&Y i izvrsna verzija MB.EXE. Osim
toga prilozen je i MAKEFILE za pravljenje izvrsne verzije MAKE
programom iz Turbo C paketa.
--------------------------------------------------------------------
mbasic.zipunknown.180igor.mil,
-> #171, igor.mil> I jos nesto, u izvrsnoj verziji dobijenoj var. 1 i var. 2 postoje
> funkcionalna razlika
Postoji i jos jedna razlika, koja se tice formata numerickih
konstanti. U varijanti 1 (lex-om generisan skaner) po ovome sto stoji
u "first.l", nije dozvoljen oblik sa eksponentom (na primer 4.3e-7), a
u varijanti 2 jeste. Za domaci zadatak vam zadajem da odredite zasto
je tako, i da promenite "flex.l" tako da i u var. 1 to bude podrzano.
unknown.181ppekovic,
-> #179, igor.mil>> Evo Payo, specijalno za tebe sam doterao komentare, i napisao
>> dokumentaciju, radio sam do 2h nocas, nadam se da ces to umeti da
>> cenis :)). Ne trazim nista vise nego da budes umeren sa kritikama,
>> mnogo sam sujetan covek :).
Odma cu da DL-ujem a onda moje omiljeno: hassan seckati :))))
Primedbe i komentari slede ...
Paya
P.S. Hvala!!!
unknown.182ivujanic,
U kom časopisu je bilo poređenje C++ kompajlera za DOS?
Mislim na malo ozbiljnije članke...
Ivica
unknown.183predragd,
Zna li neko za na kom kompajleru je pisan protokol ZMODEM (nalazi
se na SEZAM-u u \com\zmodemc.zip fajlu). Ja sam pokusao da ga
kompajliram sa BC++ 2.0 i TSC i nisam uspeo.
Pozdrav, Pedja.
unknown.184mjova,
borland c++, funkcija mktime(), koja proračunava na osnovu datuma
ostale parametre (rb. broj dana u godini i nedelji, sređuje nepravilne
datume npr 39-04-91 itd) ima jedan mali bagić :)
ako se u strukturu upiše datum 29-02 i to za prestupnu godinu, onda
dolazi do blokiranja komp-a. malo sam to sve muvao i mislim da je u
pitanju samo prestupna godina i to 29 feb.
kako sam postao "ovisan" :) o ovoj funkciji, dopisao sam par redova:
"mktime()" je definisana u "time.h"
time_t _mktime(struct tm *tc){
time_t t;
if(tc->tm_mon==1 && tc->tm_mday==29 &&
(tc->tm_year%4==0 && tc->tm_year%100!=0 || tc->tm_year%400==0)) {
tc->tm_mday--;
t= mktime(tc)+86400;
tc->tm_mday++;
tc->tm_yday++;
tc->tm_wday= ++tc->tm_wday%7;
return(t);}
return(mktime(tc));}
SY
unknown.185lazo,
Hajde da mi neko objasni kako se u C-u šalje string na štampač. Recimo
da hoću da napišem Hello na štampaču. Da li za ovo postoji neka
funkcija unutar C-a koja bi trebala da je standardna za sve C
kompajlere ili se način razlikuje od kompajlera do kompajlera? Ovo
pitam, jer nisam ništa slično našao (može bit da sam preskočio, jer
sam po nazivu funk.-naredbe pokušao da prepoznam nešto što bi ličilo
na izlaz na štampač).
Pozdrav, Mickey.
unknown.186ppekovic,
-> #185, lazo>>Hajde da mi neko objasni kako se u C-u šalje string na štampač. Recimo
>>da hoću da napišem Hello na štampaču. Da li za ovo postoji neka
Mislim da je najednostavnije koristiti fopen i fputs ili fprintf funkcije,
tj. uradis nesto ovako:
FILE *stampac
stampac=fopen("PRN","w")
fputs("Hello!",stampac)
Paya
unknown.187ppekovic,
Imam problema sa FLEX-om i MSC 6.0 compiler-om. Naime, pravio sam
neki programcic uz pomoc Flex-a i sve je bilo lepo dok nije doslo na
red kompajliranje programa generisanog pomocu Flex-a. Pri
kompjaliranju evo sta se desilo:
d:\flex>cl lexyy.c
Microsoft (R) C Optimizing Compiler Version 6.00
Copyright (c) Microsoft Corp 1984-1990. All rights reserved.
lexyy.c
proba.l(239) : fatal error C1001: Internal Compiler Error
(compiler file '@(#)regMD.c:1.100', line 3837)
Contact Microsoft Product Support Services
Naravno odmah sam probao sa sledecim jednostavnim primerom da
proverim u kome je greska:
%{
int bra=0;
%}
%%
[aA] ++bra;
%%
main()
{
yylex();
printf("Slova A ima %d.\n",bra);
}
I opet se pojavila ista greska (uostalom, zar se ne desava redovno
da kako pipnem C kompajler, odma nadjem neki bug :(((( )!
Jel ima neko objasnjenje?
Jel mi se to cini ili flex generise source prilagodjen za
Borlandov C kompajler?
Paya
unknown.188ppekovic,
-> #187, ppekovic>>proba.l(239) : fatal error C1001: Internal Compiler Error
>> (compiler file '@(#)regMD.c:1.100', line 3837)
>> Contact Microsoft Product Support Services
E da, zaboravio sam da pomenem da kada zadam opciju /qc pri kompajliranju,
sve radi bez greske.
Paya
unknown.189bulaja,
-> #187, ppekovic│Jel mi se to cini ili flex generise source prilagodjen za
│Borlandov C kompajler?
└───
Ne bih rekao da je u tome stvar, cim javlja "Internal Compiler Error"
onda je to bug Microsoft C-a ;) (nije sto mi je drago, nego je smiley
tek onako). Kad sam testirao FLEX pre stvaljanja u dir, takodje sam
imao takvih problema sa MSC dok je sa BC radio odlicno. Na kraju je
valjda igor.mil sve resio, ali ne mogu nikako da se setim sta je bilo,
valjda nista strano (tj. nikakav grozni bug MSC-a ;).
unknown.190ppekovic,
-> #189, bulaja>> Ne bih rekao da je u tome stvar, cim javlja "Internal Compiler Error"
>> onda je to bug Microsoft C-a ;) (nije sto mi je drago, nego je smiley
Ne, ono za prilagodjenost BC-u sam pitao nevezano za onaj
internal error.
Paya
unknown.191braca,
-> #185, lazo
U Borland/Turbo C-u imaš funkciju biosprint, sa njom čak možeš malo
bolje da kontrolišeš štampač, tj. da očitaš status i sl.
unknown.192mjova,
e, ovako, ovo je jedna zanmimljiva PD biblioteka za funkcije spawn..
ima dosta toga što donosi kao poboljšanje,a upotreba je jednostavna.
ko ne može bez ovih fn, nek dl ovo. ima i za bc++ i za msc.
mjova
unknown.193igor.mil,
-> #187, ppekovic> Imam problema sa FLEX-om i MSC 6.0 compiler-om. Naime, pravio sam
> neki programcic uz pomoc Flex-a i sve je bilo lepo dok nije doslo na
> red kompajliranje programa generisanog pomocu Flex-a. Pri
Cuo sam i od Bulaje da je imao problema sa MSC-om i Flex-om. Ja sam
problem "resio" tako sto sam sa neke disikete iskopao MSC 5.x i
probao. Sve je radilo kako treba. MSC 6.0 nemam, tako da zaista ne
mogu da pomognem.
Vidim u tvojoj sledecoj poruci da sa nekakvom opcijom (/qc ?) radi.
Sta znaci ta opcija? Ako nije strasno nepovoljno koristiti je, onda
je to valjda resenje?
Sto se tice "prilagodjenosti" Borland-ovom C-u, moguce da je Turbo C
blizi (nekakvom) standardnom C-u od MSC. Istina?
> proba.l(239) : fatal error C1001: Internal Compiler Error
> (compiler file '@(#)regMD.c:1.100', line 3837) <-+
> Contact Microsoft Product Support Services |
|
Sta znaci ovo ? -------------------------------------+
Koliko vidim (iz sekvence "@(#)") to je deo komentara. Ovakve
sekvence koristi neki Unix utility (ne znam tacno koji) za definisanje
standardnih zaglavlja sa imenom, verzijom i tome slicno, nevezano za
programski jezik.
Da li ova poruka prikazuje deo "naseg" fajla, ili je deo izvornog koda
samog kompajlera?
unknown.194djnsnd,
Da li neko moze da mi preporuci nakakav toolkit za Turbo C ili
Turbo C++ nalik na Turbo Vision za Turbo Pascal 6.0. (prozori,
meni, maske za unos i sl.).
Dejan
unknown.195ppekovic,
-> #194, djnsnd>>Da li neko moze da mi preporuci nakakav toolkit za Turbo C ili
>>Turbo C++ nalik na Turbo Vision za Turbo Pascal 6.0. (prozori,
>>meni, maske za unos i sl.).
H
Za pocetak, pogledaj:
dflat5 zip 119820 C biblioteka za korisnicki interfejs (DDJ)
u direktorijumu:
IBMPC/PROGRAM
Paya
unknown.196alexa,
-> #140, ndragan > / nisam siguran da ima neko jednostavno rešenje...
>
> motorola?
386 ? (ko je rekao DOS???)
unknown.197alexa,
-> #187, ppekovic > Jel ima neko objasnjenje?
> Jel mi se to cini ili flex generise source prilagodjen
> za Borlandov C kompajler?
žini ti se, flex generiše source za UNIX C (bože, naravno).
Problem je (naravno) u Microsoft-ovom kompajleru. A onaj compiler
file je naziv source modula samog kompajlera - onaj 'č(#)' je
marker koji u source-u ostavlja SCCS (source code control system),
inače komplet programa na UNIX-u (vidi, vidi, ma nije valjda da
ni Microsoft ne koristi DOS? :)))
A pošto se modul zove regMD, probaj onako, za početak, da iz generisanog
source-a ukloniš pojavu reči 'register' - može biti da se komajler
zablesavi kad pokuša da rasporedi registre na register promenljive.
Ili, drastičnije rešenje, stavi na početak
#define register
pa da vidimo šta će biti.
Inače, ja sam silne muke imao pri kompilaciji sa MS C-om (istina,
pod XENIX-om) raznih UNIX programa, jer MS C (bar za XENIX) ima
silnih problema pri pretprocesiranju ako se pretera sa gomilom definisanih
makroa; da i ne spominjem neku, ne tako staru, verziju koja je nazive makroa
razlikovala samo na prvih 8 znakova (bljak!).
unknown.198mjova,
-> #194, djnsnd> Da li neko moze da mi preporuci nakakav toolkit za Turbo C
> ili Turbo C++ nalik na Turbo Vision za Turbo Pascal 6.0.
> (prozori, meni, maske za unos i sl.).
imaš jedan na sezamu, mislim da je dflat ili tako nešto.
ja imam neke stvari koje se bave prozorima i radom sa njima (sve što
možeš da pomisliš) ali samo za small model. imam i neke dodatne stvari
za turboc, sa divnom help bazom za NG.
sve to ima poliko kb, da me stvarno mrzi da pošaljem...
mjova
unknown.199fric,
-> #195, ppekovic> Za pocetak, pogledaj:
>
> dflat5 zip 119820 C biblioteka za korisnicki interfejs (DDJ)
Ali uputstvo (.doc) uz dflat je nekako sakato - bez detaljnijeg opisa
funkcija, koncepcije, načina korišćenja, primera...
fric
unknown.200nkbog,
-> #199, fric>> Ali uputstvo (.doc) uz dflat je nekako sakato - bez detaljnijeg opisa
>> funkcija, koncepcije, načina korišćenja, primera...
Pogledaj članke o Windows programiranju u računarima. Knjige o IBM-ovom
SAA standardu bi bile još bolje. Naime i Windows-i i PM i DFLAT koriste
taj standard na nivou sors koda.
NB.
unknown.201bulaja,
-> #194, djnsnd│Da li neko moze da mi preporuci nakakav toolkit za Turbo C ili
│Turbo C++ nalik na Turbo Vision za Turbo Pascal 6.0. (prozori,
│meni, maske za unos i sl.).
└───
Postoji i Turbo Vision za Turbo C++ (i BC++).
unknown.202ppekovic,
-> #197, alexa>>Ili, drastičnije rešenje, stavi na početak
>>#define register
>>pa da vidimo šta će biti.
BINGO! Svaka čast Alexa! Proradilo je bez problema. Ako imaš vremena, voleo
bi da znam suštinu, zašto nije radilo bez #define registar?
Paya
unknown.203dgrbic,
-> #202, ppekovic:: BINGO! Svaka čast Alexa! Proradilo je bez problema. Ako imaš
:: vremena, voleo bi da znam suštinu, zašto nije radilo bez #define
:: registar?
Kolko sam ja video kod koji flex napravi, on skoro sve gurne u registar
promenljive.
Takođe, kolko se sećam, ZZ je jednom prilikom pisao o greškama koje MSC
pravi prilikom optimizacije i tu je pomenuo i to da mu se dešava da
"zaboravi" koja mu je promenljiva trenutno u registru :)
Mislim da je moglo da se reši i isključivanjem neke optimizacije, možda bi
ZZ mogao da kaže nešto detaljnije, on se, verovatno, od svih nas na Sezamu
najviše patio sa MSC kompajlerom.
Usput, zna li neko, koliko MSC 5.1 zauzima mesta na disku? Imam mali disk,
a MSC 6.0 je veeeelik (a treba mi C).
unknown.204alexa,
-> #202, ppekovic > zašto nije radilo bez #define registar?
Pa, glupi MS C ima neku bubu u raspoređivanju register varijabli.
Ne znam detalje, ovo sam zaključio na osnovu naziva modula u kompajleru;
#define je drastičnije rešenje jer 'uništava' i moguće register deklaracije
u header datotekama.
unknown.205dnikolic,
-> #201, bulaja>> Postoji i Turbo Vision za Turbo C++ (i BC++).
Postoji, ali jos nije stigao do nas. Ili mozda jeste?
dn
unknown.207jpiri,
-> #205, dnikolic
>> Postoji i Turbo Vision za Turbo C++ (i BC++).
>Postoji, ali jos nije stigao do nas. Ili mozda jeste?
Jeste.
Problem sa njim je samo to sto je zamisljen za programe poput IDE
verzije kompajlera (zapravo, Borlandov IDE je i napravljen uz pomoc
Turbo Vision-a). Totalno je nepogodan za form-oriented aplikacije
(baze podataka i sl.). Moram priznati da je, medjutim, odlicno
zamisljen i izveden potpuno u duhu objektnog programiranja.
Ako si zainteresovan mogu ti mailovati neki demo (mrzi me da saljem
100-ak Kb u konferenciju tek tako).
P.S. Uzgred, postoji i ObjectWindows sto je u stvari Turbo Vision za
Windows. Mana mu je sto source 'bas i nije' kompatibilan sa TV.
unknown.208djnsnd,
-> #205, dnikolic
Ovo je odgovor na poruke 195, 198, 200, 201 i 205.
Zahvaljujem se svima na sugestijama. Pogledao sam dflat
sa sezama i u pravu ste - nije nesto... I mene interesuje Turbo
Vision za Turbo C++ (ili Borland C++) pa ce valjda doci i do mene.
Dejan (DjnSnd)
unknown.209igor.mil,
Danas sam, sasvim slucajno, otkrio jedan vrlo interesantan feature
MSDOS-a. Radi se o obradi parametara prosledjenih preko komandne
linije.
Na primer, ako napisemo program PROBA koji samo ispisuje argumente
koji su mu prosledjeni na komandnoj liniji, i startujemo ga sa:
proba 1 +2 +4 "aa bb"-4
Dobicemo izlaz:
1
+2
+4
aa bb
-4
Znaci, blanko znaci se ignorisu, osim ako se ne nalaze u okviru
polja uokvirenog navodnicima.
Jos jedna interesantna stvar: 4DOS vrsi kontrolu ispravnosti
parametara komandne linije (!), i to ne pitajuci nas da li je zelimo
ili ne (mozda se to i moze iskljuciti, ali ko ce da gleda ono ogromno
uputstvo?).
To znaci da nece hteti da izvrsi program koji se startuje komandom
koja ima neizbalansirane navodnike. Probajte da izvrsite:
command "take that!
i dobicete poruku:
No closing quote
"Obican" COMMAND.COM ne pravi pitanje od ovoga, i ako jedan navodnik
fali on podrazumava da postoji iza poslednjeg ne-blanko znaka u
komandnoj liniji. Znaci, ako radimo sa standardnim DOS shell-om,
rezultat naredbe:
proba "Ha!" "take that!
ce biti:
Ha!
take that!
Takodje, kod 4DOS-a treba obratiti paznju na upotrebu znaka '%' u
komandnoj liniji. Na primer kod programa CAL (racunjanje aritm.
izraza, autor S.Markovic) operator modulo je kao i kod C-a, znak '%'.
Ako izvrsite:
cal 10%5
dobicete rezultat 10 a ne 0, posto je %5 shvacen kao parameter 5 i
zamenjen njegovom vrednoscu, to jest praznim stringom, pre
prosledjivanja parametara programu CAL.
Ovo se izbegava koriscenjem obrnutih navodnika, koji sprecavaju
supstituciju:
cal 10`%`5 ili cal `10%5`
ili, mozda malo elegantnije, upotrebom "%%" umesto '%' na komandnoj
liniji:
cal 10%%5
unknown.210ppekovic,
-> #209, igor.mil>> Takodje, kod 4DOS-a treba obratiti paznju na upotrebu znaka '%' u
>> komandnoj liniji...
A kako iz programa prepoznati dali je komandni interpreter
COMMAND.COM ili 4DOS.COM ??? Naravno, ne uz pomoć comspec promenljive,
već neki način koji će raspoznati u 100% slučajeva.
Paya