Author Topic: FJAP  (Read 121259 times)

SteLa

  • Full Member
  • ***
  • Posts: 128
    • View Profile
Re: FJAP
« Reply #325 on: 30.10.2011, 02:22:33 »
Dolezita otazka: Mam zadanie s && a ||. Pri zotaveni mam dilemu.

bud:
Mozem siahnut na metodu getsymbol() s tym, ze ak natrafim na & miesto && mozem drzo priradit symbol = AND a zavolat prislusny error , vypise teda ze som mala chybu, aj to aku ale ju zaroven aj opravi.
Tym by som zaroven vedela aj osetrit situacie ako value&&||value alebo value||) a pod.. a bolo by to uplne blbovzdorne.. ale zas neviem, ci pri zotaveni mozem takto surovo menit getsymbol(), teda ci pripadne opravy nie su povolene len v metode error preskocenim.

alebo : mam toto osamele & preskocit opravou az v metode error aj ked je podla mna zo zapisu zjavne, ze autor vyrazu chcel pouzit &&O.o?

.. riesi niekto taky problem?

paloSK

  • Hero Member
  • *****
  • Posts: 613
  • :D
    • View Profile
Re: FJAP
« Reply #326 on: 30.10.2011, 02:56:47 »
Ludia som v koncoch bu, KUPIM ZADANIE Z FJAP, KTO SA NA TO PODUJME ? PM
:D

xxx3

  • Hero Member
  • *****
  • Posts: 1010
    • View Profile
Re: FJAP
« Reply #327 on: 30.10.2011, 03:01:59 »
ja to tu pisem uz asi 2 tyzdne a nikto sa neozval nato

paloSK

  • Hero Member
  • *****
  • Posts: 613
  • :D
    • View Profile
Re: FJAP
« Reply #328 on: 30.10.2011, 03:05:11 »
ja to tu pisem uz asi 2 tyzdne a nikto sa neozval nato
Nesranduj  :o  Ach jaj, co ja odovzdam v pondelok  :'(
:D

SteLa

  • Full Member
  • ***
  • Posts: 128
    • View Profile
Re: FJAP
« Reply #329 on: 30.10.2011, 03:44:09 »
ale tak ved si spravte temu kupim zadanie^^ Ja som tu v nadeji klikla, ze niekto reagoval nech to uz dokoncim konecne a nic O.o

paloSK

  • Hero Member
  • *****
  • Posts: 613
  • :D
    • View Profile
Re: FJAP
« Reply #330 on: 30.10.2011, 04:03:51 »
ap
Skodoradost, najlepsia radost.  >:(
:D

Mitwoc

  • Jr. Member
  • **
  • Posts: 64
    • View Profile
Re: FJAP
« Reply #331 on: 30.10.2011, 04:25:59 »
Mohol by mi niekto poradit, ako mam spravit zotavenie pri vyraze "if" ? kde presne volat check() a kde error() ?

SteLa

  • Full Member
  • ***
  • Posts: 128
    • View Profile
Re: FJAP
« Reply #332 on: 30.10.2011, 04:52:17 »
Mohol by mi niekto poradit, ako mam spravit zotavenie pri vyraze "if" ? kde presne volat check() a kde error() ?

Myslim, ze pri if error nevolas a check robis az po ukonceni celej podmienky if, tak by to malo fungovat. Aspon ja mam tak:)

depeha

  • Newbie
  • *
  • Posts: 5
    • View Profile
Re: FJAP
« Reply #333 on: 30.10.2011, 05:16:03 »
ELUA:
Quote
Neručím za nič nižšie popísané! Všetko robíte na vlastné riziko!

V tomto "tute" je uvedené všetko, na čom som zatiaľ sám prišiel, no nikto mi nepotvrdil že to je správne! Odporúčam použiť v prípade kedy už ani vaša peňaženka nezvládne spraviť toto zadanie.

Ak ste ochotný toto riziko podstúpiť kliknite [SEM] to je len vtip a čítajte ďalej. V opačnom prípade stlačte klávesovú skratku Ctrl+W.


Pokus implementovať zdroják od Pločicu do vlastného zadania.
Privlastníme a upravíme si pár vecí:

Code: [Select]
//tabulka konstant a identifikatorov
int ixtc=0;            /* index volnej pozicie v tabulke konstant */
char* TID[512];  /* tabulka identifikastorov */
int ixti=0;

// rozpoznany symbol
int attr; /* hodnota pre synt.analyzator */

Tu sa sranda končí, treba aj upravovať!
Code: [Select]
//kody symbolov
enum {
        LAND, LOR,   /* &&   ||  */     //toto alebo
        MUL,DIV       /*  *   /    */      //toto, vyberte podľa vlastného uváženia a zadania
LPAR,RPAR,       /* ( ) */
VALUE,          /* celociselna konstanta */   //plocica tam má ICONST
        }; /* kody symbolov */

Code: [Select]
/* SYNTAKTICKA ANALYZA */

char *errmsg[]={
     /* 0 */ "Ocakava sa prikaz", //nieje treba
     /* 1 */ "ocakava sa STOP",  //ani toto
     /* 2 */ "ocakava sa identifikator",  //furt nič
     /* 3 */ "ocakava sa =",   //určite nie
     /* 4 */ "ocakava sa ;",   //ee
     /* 5 */ "ocakava sa +,- podvyraz",    //upraviť na svoje! buď * / / alebo && / ||
     /* 6 */ "ocakava sa *,/ podvyraz",    //preč
     /* 7 */ "ocakava sa operand",   //nechať
     /* 8 */ "ocakava sa )",  //samozrejme nechať
     /* 9 */ "ocakava sa + alebo -",   //tak jak o štyri riadky vyššie
     /* 10*/ "ocakava sa * alebo /",   //het
     };


HÁČKA!
Code: [Select]
SetType HOpnd       = (E VALUE) /* //VALUE - VALUE//| (E ID)*/ | (E LPAR);  // HOpnd premenujte na pravdepodobne HTerm (ak to tak máte vo vašom kóde)
SetType HMul        = HOpnd; //HMul premenovať najlepšie na meno vašej funkcie ktorá sa stará od druhý riadok. napr HAnd alebo HOr..., HOpnd premenovať na HTerm, samozrejme to musí byť každému jasné
SetType HExpr       = HMul; //HMul tak jak o riadok vyššie

//NASLEDUJÚCE RIADKY VÔBEC NETREBA
/*SetType HInput      = (E INPUT);   //tu a ku ďalšim štyrom riadkom som sa ešte nedostal
SetType HOutput     = (E PRINT);
SetType HAssignment = (E LET);
SetType HDeclaration= (E VAR);
SetType HProgram    = HDeclaration|HInput|HAssignment|HOutput|(E STOP);*/

Code: [Select]
//nemeniť nič!
int synerrs=0;

void error(int n, SetType keys)
{
    printf("SYN_CHYBA: %s\n",errmsg[n]);
synerrs++;
while (!((E symbol) & keys)) getsymbol();
}

void check(int n, SetType keys)
{
if (!((E symbol) & keys)) error(n,keys);
}

Tieto funkcie nebude treba.
Code: [Select]
void Program(SetType),Declaration(SetType),Assignment(SetType),Output(SetType),Input(SetType);
Nasledujú dôležité úpravy! Toto vyžaduje myslenie!
NAHRÁDZAJÚ VAŠE PÔVODNÉ KÓDY!

Code: [Select]
int Expr(SetType keys){  //pekný názov, može ostať
int vyst; /* vystupny symbol */  //toto
int h1,h2;                                    //nás nemsí
SetType loopkeys, allkeys;           //trápiť
loopkeys = (E PLUS) | (E MINUS) | HMul;  //vymazať plus a minus, nahradiť vlastným znakom v prvom riadku gramatiky (MUL/DIV/AND/OR). | HMul prepísať na to isté načo ste HMul prepísali pri HÁČKACH o dva code tagy vyššie
allkeys = loopkeys | keys;   //neriešiť
h1=Mul(allkeys);    // Mul zmeniť na funkciu v druhom riadku gramatiky
check(5,allkeys);    // Zmeniť číslo podľa vlastného uváženia
while((E symbol) & loopkeys){   //neriešiť
    if(symbol==PLUS||symbol==MINUS){   //nechať len znak v prvom riadku gramatiky
       vyst=symbol;  //nič
   getsymbol();  //tiež nič
    } else error(9,allkeys);  //zmeniť číslo
h2=Mul(allkeys);  //zmeniť Mul na funkciu v druhom riadku gramatiky
if(vyst==PLUS)h1=h1+h2;  //zmeniť plus na to čo treba a upraviť telo s využitím vlastnej hlavy.
else h1=h1-h2; //else nebude treba, keďže v prvom riadku gramatiky máme všetci len jednu operáciu
    check(5,allkeys);  //zmeniť číslo jak furt...
}
return(h1);
}

Code: [Select]
// keď ste sa dostali až do druhého ročníka tak dúfam že vam dojde jak toto upraviť (poradím - podľa code boxu nad týmto)
int Mul(SetType keys){ //to je tá druha funkcia vo vašom pôvodnom kóde. (druhý riadok v gramatike, medzi Expr a Term)
int vyst; /* vystupny symbol */
int h1,h2;
SetType loopkeys, allkeys;
loopkeys = (E MUL) | (E DIV) | HOpnd;
allkeys = loopkeys | keys;
h1=Opnd(allkeys);
check(6,allkeys);
while((E symbol) & loopkeys){
    if(symbol==MUL||symbol==DIV){
       vyst=symbol;
   getsymbol();
    } else error(10,allkeys);
h2=Opnd(allkeys);
if(vyst==MUL)h1=h1*h2;
else h1=h1/h2;
    check(6,allkeys);
}

return(h1);
}

Code: [Select]
// prepísať len názov funkcie a prvé parametre funkcií error a check
int Opnd(SetType keys){ //tak a toto je Term.
int ix;                               //nepoužité, neviem prečo to tu je
int h1;
check(7,HOpnd|keys);
switch(symbol){
case VALUE: h1=TC[attr];getsymbol();  //zmeniť TC[attr] na attr
break;
case ID: h1=0;getsymbol();
break;
case LPAR:
getsymbol();
h1=Expr((E RPAR)|keys);
if(symbol==RPAR)getsymbol();
else error(8,keys);
break;
default: error(7,keys);h1=0;
}
return(h1);
}


EDIT: Mierna úrava. V tute by malo byť všetko potrebné pre úspešné poskladanie zotavenia.
« Last Edit: 30.10.2011, 08:17:28 by depeha »
Why do I keep counting?

Cici

  • Jr. Member
  • **
  • Posts: 98
    • View Profile
Re: FJAP
« Reply #334 on: 30.10.2011, 05:45:22 »
Mohol by mi niekto poradit, ako mam spravit zotavenie pri vyraze "if" ? kde presne volat check() a kde error() ?

Myslim, ze pri if error nevolas a check robis az po ukonceni celej podmienky if, tak by to malo fungovat. Aspon ja mam tak:)

check je vzdy pred borom rozhodovania - cize pre ifom
error volas v podstate vzdy ked tam je getsymbol() - if(symbol == LOGOR ) getsymbol(); else error(4,allkeys);

Cici

  • Jr. Member
  • **
  • Posts: 98
    • View Profile
Re: FJAP
« Reply #335 on: 30.10.2011, 06:58:54 »
nebolo by odveci sa vlastne spytat ze ci to co nam bolo povedane na cvikach resp na prednaske o zotaveni je postacujuce. Teda ci mame robit aj nieco naviac - lebo tak ako to bolo odprezentovane nema fungovat:
- ak je zadane & namiesto && vyhdnoti sa ako chyba a nie ako logAND. To iste pre LogOR
- ak je zadane &&|| tak nevie akz operand ma zobrat
- ak chyba koncova zatvorka tak sa to zle vyhodnoti
- ak je zadane 001 tak zoberie iba poslednu jednotku
- urcite este daco ale nenapada ma co

ja tu niekto kto by vedel odpovedat?

esperian

  • Hero Member
  • *****
  • Posts: 873
    • View Profile
Re: FJAP
« Reply #336 on: 30.10.2011, 14:52:47 »
inak zotavenie je potrebne aj pre interpretator aj pre prekladac ??
« Last Edit: 30.10.2011, 15:42:44 by esperian »

Tren

  • Moderator
  • Hero Member
  • *****
  • Posts: 1060
  • Fortes fortuna adiuvat
    • View Profile
Re: FJAP
« Reply #337 on: 30.10.2011, 15:02:30 »
inak zotavenie je potrebne aj pre interpretator aj pre prekladac ??
ano

SteLa

  • Full Member
  • ***
  • Posts: 128
    • View Profile
Re: FJAP
« Reply #338 on: 30.10.2011, 17:22:17 »
inak zotavenie je potrebne aj pre interpretator aj pre prekladac ??
ano

a to ich mam mat neako osobitne ci co?O.o

trebax

  • Newbie
  • *
  • Posts: 1
    • View Profile
Re: FJAP
« Reply #339 on: 30.10.2011, 17:22:44 »
Ak mam obidva operatory && a || neasociativne s rovnakou prioritou a dostanem vstup napr: 1||0&&1, tak zotavenie my ma opravit vstup tymto stylom: (1||0)&&1?

Wolfdale

  • Global Moderator
  • Sr. Member
  • *****
  • Posts: 489
  • /root
    • View Profile
Re: FJAP
« Reply #340 on: 30.10.2011, 17:30:31 »
v netbeanse ked si chcem dat skompilovat kod, tak mi vypisuje chybu pri conio.h

neviete ako to opravit? :P

Ešte sme to nedokončili celkom, ale takmer sme už začali.

xxx3

  • Hero Member
  • *****
  • Posts: 1010
    • View Profile
Re: FJAP
« Reply #341 on: 30.10.2011, 17:32:47 »
zmaz to :D

Wolfdale

  • Global Moderator
  • Sr. Member
  • *****
  • Posts: 489
  • /root
    • View Profile
Re: FJAP
« Reply #342 on: 30.10.2011, 17:34:45 »
dal som to ako comment
vysledok:

build/Debug/Cygwin_4.x-Windows/main.o: In function `main':
/cygdrive/c/Users/***/Desktop/FJaP/main.c:352: undefined reference to `_getch'
collect2: ld returned 1 exit status
make[2]: *** [dist/Debug/Cygwin_4.x-Windows/fjap.exe] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2

Ešte sme to nedokončili celkom, ale takmer sme už začali.

Cici

  • Jr. Member
  • **
  • Posts: 98
    • View Profile
Re: FJAP
« Reply #343 on: 30.10.2011, 17:36:55 »
dal som to ako comment
vysledok:

build/Debug/Cygwin_4.x-Windows/main.o: In function `main':
/cygdrive/c/Users/***/Desktop/FJaP/main.c:352: undefined reference to `_getch'
collect2: ld returned 1 exit status
make[2]: *** [dist/Debug/Cygwin_4.x-Windows/fjap.exe] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2

treba este opravit vestky getch na getchar - pouzi ctrl+H

inak zotavenie je potrebne aj pre interpretator aj pre prekladac ??
ano

a to ich mam mat neako osobitne ci co?O.o
nie ale ten zdrojak ma v podstate strukturu lexikalna analyza, interpreter, translator a nakonie main

Wolfdale

  • Global Moderator
  • Sr. Member
  • *****
  • Posts: 489
  • /root
    • View Profile
Re: FJAP
« Reply #344 on: 30.10.2011, 17:40:03 »
Quote
treba este opravit vestky getch na getchar - pouzi ctrl+H

a ked ich opravim, ptm si mozem nechat conio.h?

Ešte sme to nedokončili celkom, ale takmer sme už začali.

Cici

  • Jr. Member
  • **
  • Posts: 98
    • View Profile
Re: FJAP
« Reply #345 on: 30.10.2011, 17:42:52 »
Quote
treba este opravit vestky getch na getchar - pouzi ctrl+H

a ked ich opravim, ptm si mozem nechat conio.h?
nie - to conio.h je tam uplne zbytocne

Cici

  • Jr. Member
  • **
  • Posts: 98
    • View Profile
Re: FJAP
« Reply #346 on: 30.10.2011, 17:44:28 »
Ak mam obidva operatory && a || neasociativne s rovnakou prioritou a dostanem vstup napr: 1||0&&1, tak zotavenie my ma opravit vstup tymto stylom: (1||0)&&1?
podla toho co ma robit zotavenie by to malo spravit tak. Ale my sme sa take nic neucili :D cize ak to spravis je to dobre a ak nie ... ktovie :D

SteLa

  • Full Member
  • ***
  • Posts: 128
    • View Profile
Re: FJAP
« Reply #347 on: 30.10.2011, 17:49:30 »
dal som to ako comment
vysledok:

build/Debug/Cygwin_4.x-Windows/main.o: In function `main':
/cygdrive/c/Users/***/Desktop/FJaP/main.c:352: undefined reference to `_getch'
collect2: ld returned 1 exit status
make[2]: *** [dist/Debug/Cygwin_4.x-Windows/fjap.exe] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2

treba este opravit vestky getch na getchar - pouzi ctrl+H

inak zotavenie je potrebne aj pre interpretator aj pre prekladac ??
ano

a to ich mam mat neako osobitne ci co?O.o
nie ale ten zdrojak ma v podstate strukturu lexikalna analyza, interpreter, translator a nakonie main

hm povedzme ze somto cele spojila do jedneho bordelu^^

Wolfdale

  • Global Moderator
  • Sr. Member
  • *****
  • Posts: 489
  • /root
    • View Profile
Re: FJAP
« Reply #348 on: 30.10.2011, 18:14:50 »
okay, diky, ide mi to :)

Ešte sme to nedokončili celkom, ale takmer sme už začali.

SteLa

  • Full Member
  • ***
  • Posts: 128
    • View Profile
Re: FJAP
« Reply #349 on: 30.10.2011, 18:42:18 »
Takze si to len chcem ujasnit, vy tu vsetci mate osobitne interpretator a prekladac do computronu ?? A este osobitne preto robite zotavenie?O.o