Creato da pastuweb.com
Share My Page
My Social Accounts
Account FaceBook Account LinkedIn Account Twitter Account Google Plus Account Git Hub

Per la visualizzazione della riga e colonna in cui è presente un errore, si può scrivere la seguente funzione all'interno del parser code, viene fatto un overriding della fuznione report_error():

parser code {:

public void report_error(String message, Object info) {
        StringBuffer m = new StringBuffer(message);
            if (info instanceof Symbol) {
                    if (((Symbol)info).left != -1 
                            && ((Symbol)info).right != -1) {
                        int line = (((Symbol)info).left)+1;
                        int column = (((Symbol)info).right)+1;
                        m.append(" (linea "+line+", colonna  "+column+")");
                    }
            }
            System.err.println(m);
    }
:}


Un opportuna ridefinizione delle funzioni syntax_error(), unrecovered_syntax_error() all'inetrno di parser code {::} permett di personalizzare la gestione degli errori.

Il simbolo predefinito error indica una condizione di errore.
Esso può essere usato all'interno della grammatica per
consentire al parser di riprendere l'esecuzione dopo un
eventuale errore.

Quando il parser generato da Cup incontra un errore, comincia a svuotare lo stack fino a che incontra uno stato in cui il simbolo ‘error' è lecito.


Esempi:
corpo_codice ::=  '{' stmts error '}‘ 
                {: System.err.println("Manca il ; prima della'}‘"); :}

stmt ::= error ‘;'
                {: System.err.println("Errore prima del ; "); :}

Average (1 Vote)
The average rating is 5.0 stars out of 5.