Hali!
jo reg nem irtam, ennek egyik oka hogy a #207-es az utolso HIX CODER
amit megkaptam, azota nem jottek, kiveve ezt a #239-est ami ma jott :)
nem igazan muxik ez a hix, vagy csak engem nem szeret??? na mind1
> Felado : [Hungary]
> Temakor: Re: Matematikai kifejezes feldolgozo es egyszerusito ( 131 sor )
>
> On 28 Sep 98 at 16:01, ifj Lajko Janos wrote:
>
> > Keresem a fent emlitett forraskodot. Lehet, hogy neked van
> > egy hasznalhato verziod. (Johet: C, Pascal ... legvegso esetben egy
>
> asm-hez mit szolnal? :))
En nagyon orulnek neki! :) de tenyleg.
En is a napokban fejlesztek kif. kiertekelot, a BAssPasC 3.0-hoz,
a kulonbseg annyi hogy nekem nem a kif. erteket kell kiszamolnom
hanem asm forrast kell generalni ami majd futaskor ksizamolja!
(ha csak kiszamolni kene, az megy, az nem olyan nehez)
A modszer amit en alkalmazok most:
a kiertekelom 2 tagu kifejezesekre general kodot (az FPU mukodosesebol
kifolyolag...), igy mindig keres egy pontot a kifejezesben ahol
ketevaghatja, es ha mar tovabb nem darabolhato akkor az vagy valtozo
vagy konstans. (vagy hiba :))
adott egy kifejezes, pl: (x*y)-3+(z*z)
ennek a kierekelese:
kiertekelo(kifejezes){
Kette lehet vagni?
- nem ->
- (valami) -> valami es kezdi elolrol
- valtozo vagy konstans -> visszateres
- egyeb -> hibauzenet
- igen ->
1. p1=kiertekelo('(z*z)')
2. p2=kiertekelo('(x*y)-3')
3. p1 es p2 tipusa, erteke alapjan general assembly forrast
majd visszater az eredmennyel
(ez persze rekurziv, 1. es 2. pontnal rekurzivan hivja magat mindaddig
amig kette tudja vagni)
}
A "kettevagasnal" eloszor + jelet keres, aztan -,*,/ stb. a prioritasnak
megfeleloen.
A visszateresnel pedig a kovetekzo tipusok lehetnek:
- kiszamolta (p1 es p2 is konstans volt), visszaadja az eredmenyt
- generalt kodot ami kiszamolta, az eredmeny ST-ben (FPU regiszterben)
- egy memoriavaltozo volt, visszaadja a nevet
Utana p1 es p2 tipusanak megfeleloen generalja az asm forrast:
1. ha p1 es p2 is konstans akkor kiszamolja es visszater az eredmennyel
2. ha p1 vagy p2 konstans akkor beteszi egy memoriacimre es
atirja a tipusat memoriavaltozora
3. ha p1 es p2 is memoriavaltozo akkor az egyiket betolti az FPU-ba
(FLD p1)
4. a maradek esetekre pedig mar vannak FPU utasitasok:
mem,ST FADD mem,FSUBR mem,FMUL mem,FDIVR mem
ST,mem FADD mem,FSUB mem,FMUL mem,FDIV mem
ST,ST FADDP ST(1),ST / FSUBP ST(1),ST ...
Ez nagyon szepen mukodik ha csak valtozok vannak, es az esetleges
konstansok kozti muveletek be vannak zarojelezve, pl: 'x+(3+5)'
kulonben viszont eleg szar kodot csinal, pl:
kifejezes='3+x+5'
leforditva:
FLD Const_3
FADD x
FADD Const_5
pedig igy is ugyanazt az eredmenyt adna es egyszerubb (gyorsabb):
FLD Const_8
FADD x
Ezt lehet tovabb bonyolitani is, pl: '(x+y+z)-(x-y+z)'
mert ez ugye 2*y-al egyenlo...
Na erre kene valami jol bevalt, relative egyszeru modszer, amivel
ilyen egyszerusiteseket lehet elvegezni. Van ilyen???
A'rpi/ESP-team
ps: Egyebkent ez a modszer mindig jol mukodik csak konstansokat
tartalmazo kifejezesekre, ha csak kiszamolni kell...
(ilyenkor a visszateresi ertek tipusa mindig konstans)
ps2: > X11R6 alatt widgeteket, vagy gadgeteket erdemesebb hasznalni?
Mi az a gadget? errol most hallok eloszor...
> -----------------------------------------------------------------
mailto: http://banki1.banki.hu/~arpi
mailto: http://espteam.abacus.mad.hu
--------------------- Phone: +36-1-338-1405 ---------------------
WinErr: 00F Unexplained error - Please tell us how this happened.
|
Hello,
Amit ajanlanek a kodolas helyett az egy yacc tipusu program
hasznalata. Ezek eseteben a nyelvtani torvenyeket kell
specifikalni es ebbol a program C forraskodot general.
(Ilyen progi van minden platform ala)
A kozhiedlemmel ellentetben, hasznalatuk aranylag egyszeru.
(Egy kifejezes kiszamolot meg majdnem trivialis irni veluk,
jobbara peldakent mutatnak be egy-egy effele nyelvtan
specifikaciot.
lasd: http://www.cl.cam.ac.uk/texinfodoc/bison_toc.html)
Az igazi elonyuk igazabol az, hogy nagyon konnyu uj muveleteket
bevezetni kb egy ket sorral megoldhato, mig ha kodolod, sokkal tobb
lehoseged van arra hogy melletrafalj.
cheers,
Veszpe'nyi Zebulon.
ps. egy kisse tulbonyolitott yacc nyelvtanfile-t meg magat a yacc-ot is
DOS ala letolheted innen is:
http://www.nd.edu/~ialbert/files.htm
(ez ciklusokat is tud meg felteteles elagazast is)
|