Jak na to v C - dekodovani prikazu

Ales Prochaska prochaska@alsoft.cz
Čtvrtek Září 25 08:03:21 CEST 2008


Se znalosti detailu bych mozna navrhl jine reseni ale takhle obecne
bych asi ten lexikalni analyzatoru udelal na zaklade tabulky, takze
treba prikazy popsat nejak takhle

const char PRIKAZY [] = {
    "STEADY\0"
    "READY\0"
    "GO\0"};

nebo jeste lepe pomoci nejake konstantni struktury ve ktere bude vedle
prikazu jeste jeho kod. To je dost dulezite protoze se prikazu muzou
v tabulce setridit podle abecedy a pri rozsirovani se nemusi
prekodovat, kdyz novy prikaz prijde podle abecedy nekam doprostred.

Hleda se v tom bud primitivnim porovnavanim retezec po retezci, nebo
pulenim intervalu je-li setridena podle abecedy (aspon pro prvni
pismeno, u tabulek delsich nez nekolik desitek symbolu to dost
zrychli).

Pak se daji pouzit ruzne finty, treba doplnit tabulku nejakym
"balastem" aby od kazdeho pocatecniho znaku byl stejny pocet symbolu a
na prvni znak skakat podle vypocteneho indexu. Nebo skakat na
jednotliva slova pomoci nejake hash funkce ktera se zkusmo vygeneruje
pro kazdou mnozinu symbolu aby tabulka nebyla prilis velka a nepouzite
radky se vyplni kodem "nenalezeno". Nebo udelat tabulku jako strom
pospojovany indexy a parsovat ty prikazy tak jak prichazeji znak po
znaku (takhle to delaji generatory lexikalnich analyzatoru, to je (az
na specialni pripady) nejrychlejsi metoda ale rucne se to programuje
velice pracne).

Ales Prochaska

> Zdravim,
> jsem postaven pred nasledujici problem. Jak nejlepe naprogramovat v 
> C(pro MCU 51) rozpoznavani prikazu. Mam bufferu obsahujici prijate znaky
> a ma otazka zni, jak nejlepe vyresit dekdoveni prikazu z toho bufferu.
> Jde mi o snadne prirazovani dalsich rozpoznatelnych prikazu. Jak tedy 
> program napsat, aby byla snadna moznost rozsireni?
> dekuji
> Smidl
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list@list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list





Další informace o konferenci Hw-list