tak podme zaradom...
podla mna automat
a{-gulicka-b|a}, kt. dostane na vstup b, sa dostane do stavu a{gulicka b | gulicka a} gulicka, len do a{b|gulicka a} sa dostat nemoze, ved mozu nasledovat 4 bcka, al. moze aj skoncit.. mozno najlogickejsie by to bolo este a{b gulicka|a}, no to sa mi zda najmenej... mam v tom gulas...
nerozumiem celkom postfixu a prefixu
ked by som mal 1+2*3\4&5<6 a p(*) < p(\) = p(+) < p(&) = p(<)
prefix:
1+2*3\4&(<56) - tu to beriem tak, ze ked som operator presunul, tak my vznikol akoby vyraz (<56)
1+2*3\(&<456) - tu uz (&<456)... ked sa priority rovnaju, nevadi ze idem aj tak po jednom kroku/operatore? je spravne aj (<&456) ?
(+12)*3\(&<456)
(+12)*(\3&<456)
*+12\3&<456
postifx pre 1+2*3\4&5<6, p(*) < p(\) = p(+) < p(&) = p(<)
1+2*3\4&(56<)
1+2*3\(456<&)
(12+)*3\(456<&)
(12+)*(3456<&\)
12+3456<&\*
potom
A -> c["*"|"-"A] kde c je cele cislo prepiste toto pravidlo aby vyhovovalo EBNF aby bolo mozne vygenerovat: 5*4-1 a 5*4-1*3 potom napisat hodnoty ake vyjdu po uskutocneni tych prikladov a napisat postfixne formy 5*4-1 a 5*4-1*3je spravne A-> B[("*"|"-") A], B->"0"|...|"9" ? postfix : 54*1-;
54*13*-, alebo 541-*3* alebo 541-3**; prefix: -*541; -*54*13 alebo ...
Syntaktický analyzátor pre A -> a (bC | {B}):
void A(K)
{
//nema tu byt check(0,a|b|H(B)|K); ? if (symbol == a) getsymbol(); else error(0, b|H(B)|K);
check(1,b|H(B)|K);
switch(symbol)
{
case b: getsymbol(); if (symbol & H(C)) C(K); else error(2,K);
case H(B): while(symbol & H(B))
{
B(H(B)|K);
check(H(B)|K);
}
}
}
ake ine priklady este mozu byt?