Ano, to bol zjednoduseni priklad, nechcel som zverejnit original kod, ale
sak preco nie, aj tak bude kazdemu na dve veci, za formatovanie sa
ospravedlnujem, rozpadlo sa:

*static* Token Scan() {

*int* state, *apx*;

*StringBuffer* buf;

*while* (*ignore*.get((*int*)*ch*)) *NextCh*();

*if* ((*ch* == '/') && *Comment*()) *return* *Scan*();

*t* = *new* Token();

*t*.pos = *pos*; *t*.col = *pos* - *lineStart* + 1 - *offset*; *t*.line = *
line*;

buf = *new* StringBuffer();

state = *start*[*ch*];

apx = 0;

loop: *for* (;;) {

buf.append(*strCh*);

*NextCh*();

*switch* (state) {

*case* 0:

{*t*.kind = *noSym*; *break* loop;} // NextCh already done

*case* 1:

*if* (*ch* == '-'

|| *ch* >= '0' && *ch* <= '9'

|| *ch* >= 'A' && *ch* <= 'Z'

|| *ch* == '_'

|| *ch* >= 'a' && *ch* <= 'z') {*break*;}

*else* *if* (*ch* == '/') {state = 15; *break*;}

*else* {*t*.kind = 1; *CheckLiteral*(buf); *break* loop;}

*case* 2:

*if* (*ch* >= '0' && *ch* <= '9') {state = 3; *break*;}

*else* {*t*.kind = *noSym*; *break* loop;}

*case* 3:

*if* (*ch* >= '0' && *ch* <= '9') {*break*;}

*else* *if* (*ch* == '.') {state = 4; *break*;}

*else* {*t*.kind = *noSym*; *break* loop;}

*case* 4:

*if* (*ch* >= '0' && *ch* <= '9') {state = 5; *break*;}

*else* {*t*.kind = *noSym*; *break* loop;}

*case* 5:

*if* (*ch* >= '0' && *ch* <= '9') {*break*;}

*else* {*t*.kind = 3; *break* loop;}

*case* 6:

*if* (*ch* <= 9

|| *ch* >= 11 && *ch* <= 12

|| *ch* >= 14 && *ch* <= '!'

|| *ch* >= '#') {*break*;}

*else* *if* (*ch* == '"') {state = 8; *break*;}

*else* {*t*.kind = *noSym*; *break* loop;}

*case* 7:

*if* (*ch* <= 9

|| *ch* >= 11 && *ch* <= 12

|| *ch* >= 14 && *ch* <= '&'

|| *ch* >= '(') {*break*;}

*else* *if* (*ch* == 39) {state = 8; *break*;}

*else* {*t*.kind = *noSym*; *break* loop;}

*case* 8:

{*t*.kind = 4; *break* loop;}

*case* 9:

*if* (*ch* >= '0' && *ch* <= '9') {*break*;}

*else* *if* (*ch* == '.') {state = 4; *break*;}

*else* {*t*.kind = 2; *break* loop;}

*case* 10:

{*t*.kind = 7; *break* loop;}

*case* 11:

{*t*.kind = 12; *break* loop;}

*case* 12:

{*t*.kind = 13; *break* loop;}

*case* 13:

{*t*.kind = 14; *break* loop;}

*case* 14:

{*t*.kind = 15; *break* loop;}

*case* 15:

*if* (*ch* == 'F') {state = 16; *break*;}

*else* {*t*.kind = *noSym*; *break* loop;}

*case* 16:

*if* (*ch* == 'I') {state = 17; *break*;}

*else* {*t*.kind = *noSym*; *break* loop;}

*case* 17:

*if* (*ch* == 'N') {state = 18; *break*;}

*else* {*t*.kind = *noSym*; *break* loop;}

*case* 18:

*if* (*ch* == 'P') {state = 19; *break*;}

*else* {*t*.kind = *noSym*; *break* loop;}

*case* 19:

*if* (*ch* == 'E') {state = 20; *break*;}

*else* {*t*.kind = *noSym*; *break* loop;}

*case* 20:

*if* (*ch* == 'R') {state = 21; *break*;}

*else* {*t*.kind = *noSym*; *break* loop;}

*case* 21:

*if* (*ch* == 'I') {state = 22; *break*;}

*else* {*t*.kind = *noSym*; *break* loop;}

*case* 22:

*if* (*ch* == 'O') {state = 23; *break*;}

*else* {*t*.kind = *noSym*; *break* loop;}

*case* 23:

*if* (*ch* == 'D') {state = 24; *break*;}

*else* {*t*.kind = *noSym*; *break* loop;}

*case* 24:

{*t*.kind = 19; *break* loop;}

*case* 25:

{*t*.kind = 27; *break* loop;}

*case* 26:

{*t*.kind = 28; *break* loop;}

*case* 27:

{*t*.kind = 29; *break* loop;}

*case* 28:

{*t*.kind = 30; *break* loop;}

*case* 29:

{*t*.kind = 0; *break* loop;}

}

}

*t*.str = buf.toString();

*t*.val = *t*.str.toUpperCase();

*return* *t*;

}


2011/4/11 "Zdeněk Troníček" <troni...@fit.cvut.cz>

> Ahoj,
>
> automat by měl mít číst něco ze vstupu. Nechybí tam někde vstup?
>
> Z.
> --
> Zdenek Tronicek
> FIT CTU in Prague
>
>
> Tomas Studva napsal(a):
>  > Dobry den,
> > vedeli by ste si precitat nasledovny program. Nie je to priklad zo skoly
> > ale
> > z praxe. Implementacia stavoveho automatu, kod je stary 10 rokov a
> > samozrejme ze to je len nezmyselny uryvok.
> >
> > state = -1;
> >
> > loop: *for* (;;) {
> >
> > state = state + 1;
> >
> > *switch* (state) {
> >
> > *case* 0: state = 1; break;
> >
> > case 1: state = 0 *break*;
> >
> > case 2: break loop;
> >
> > }
> >
> > }
> >
> > Pre mna to je nieco velmi vynimocne, lebo je tam navestie a tiez ten for.
> >
> > S pozdravom Tomas
> >
>
>

Odpovedet emailem