Návštěvník wrote:Ahoj!
Musim priznat ze s tim nemam moc zkusenosti, ale nevim jak moc se tento pristup hodi, jelikoz se v techto souborech ani zblizka nepouzivaji vsechny informace, hodne se preskakuje, jednotlive atributy obcas nejsou vubec oddelovany, urcuji se na zaklade pozice ve stringu.
Pokud jsi nekdy delal s temi gramatikami, a myslis si ze by se opravdu daly pouzit, byl bych vdecny za odkaz na nejaky dobry zdroj informaci...
Ahoj.
No pokud ti hodně záleží na korektnosti těch dat, tak ta gramatika je nejjednodušší způsob, jak to ověřit. Nejjednodušší je použít nějaký předprogramovaný nástroj na generování gramatik typu flex/bison. Stačí zadat do google bison a vyjede ti hromada odkazů.
Například:
http://www.gnu.org/software/bison/
http://flex.sourceforge.net/
Zde je příklad kalkulačky:
http://www.esiee.fr/~coupriem/Bison/bison_5.html
A zde je příklad kódu gramatiky:
input: /* empty */
| input line
;
line: '
'
| exp '
' { printf ("\t%.10g
", $1); }
;
exp: NUM { $$ = $1; }
| exp exp '+' { $$ = $1 + $2; }
| exp exp '-' { $$ = $1 - $2; }
| exp exp '*' { $$ = $1 * $2; }
| exp exp '/' { $$ = $1 / $2; }
/* Exponentiation */
| exp exp '^' { $$ = pow ($1, $2); }
/* Unary minus */
| exp 'n' { $$ = -$1; }
;
%%