Parsing di una stringa e caricamento di un vettore

di il
1 risposte

Parsing di una stringa e caricamento di un vettore

Ciao a tutti ragazzi.
Il problema è questo ho una stringa immessa in input del tipo
(NUMERO OPERANDO NUMERO) OPERANDO (NUMERO OPERANDO NUMERO).......non definito bene la lunghezza
in cui numero è un intero e operando le 4 operazioni + - * /
Devo sostanzialmente compiere un parsing sulla stringa e salvare ogni token in una posizione di un vettore. quindi ad esempio (3 + 5) * (6 -2)- (5 %5)
è accettata,compresi gli spazi non sempre definiti precisamente, e alla posizione 0 del vettore ,quindi,avrò 3. Alla posizione uno + alla posizione 3 * e così via...Come posso fare? Ho provato a scaricare JavaCC ma è un casino non mi ci ritrovo per niente...mi potreste dare una mano?
Grazie

1 Risposte

  • Re: Parsing di una stringa e caricamento di un vettore

    Se ho capito bene i numeri possono essere di una sola cifra.
    La grammatica che genera il linguaggio da te dato è:
    E->(NON)|EOE
    N->0|1|2|3|4|5|6|7|8|9|
    O->+|-|/|*

    che per l'analisi LL(1) diventa:
    E->(NON)E1
    E1->OEE1|epsilon
    N->0|1|2|3|4|5|6|7|8|9|
    O->+|-|/|*

    Da qui è facile creare il parser creando un metodo per ogni simbolo non terminale ed inserendo dove serve il salvataggio del simbolo nella struttura dati, ad esempio per E:
    
    private static void E()  throws ErroreRiconoscimento{
          if( lex.currentSymb()=='(' ) {
                     lex.nextSymb();
                     N();O();N();
                     lex.accept( ')' );
                     E1();}
            else throw new ErroreRiconoscimento();}
    
    Poi nei metodi di N() ed O() puoi inserire una stringa che alla lettura del numero o operatore lo aggiunga alla struttura dati:
    
     private static void N() throws ErroreRiconoscimento{
         if(lex.currSymb()==0||lex.currSymb()==1||........)
              vettore.push(lex.currentSymb());
              lex.nextSymb();
         else throws new ErroreRiconoscimento();}
    
    lex è una istanza dell' analizzatore lessicale che ha in input la strnga da analizzare e vettore è una struttura dati per salvare numeri ed operandi.

    Spero d'essere stato utile e chiaro(....spero anche preciso è da tanto che non scrivo parser)
    ciao
Devi accedere o registrarti per scrivere nel forum
1 risposte