Riconoscitore di espressioni File: expr.cup: file di specifica sintattica del riconoscitore (identico alla versione base) expr.lex: file di specifica lessicale Riconoscitore.java: contiene applicazione (metodo main) Note: 1. Mediante cup compilare il file expr.cup. Verranno creati i file Parser.java e ParserSym.java 2. Mediante jflex compilare il file expr.lex. Verra' creato il file Scanner.java 3. Compilare infine tutti i sorgenti java In questa versione e' stata usata la classe ComplexSymbolFactory, fornita dal runtime di CUP. Nell'analizzatore lessicale (v. expr.lex): - E' stato inserito il codice per associare all'analizzatore lessicale la symbol factory, mediante la definizione di un campo e di un costruttore con due argomenti (il flusso di caratteri da cui leggere e la symbol factory) - Nelle regole lessicali, la costruzione dei token viene demandata al metodo newSymbol della symbol factory. Il metodo riceve come primo argomento una stringa (non strettamente necessaria per i nostri scopi, e che sostanzialmente ripete il nome del token), come secondo argomento il token vero e proprio, e come terzo eventual argomento il valore associato (come Object). Esistono altre versioni del metodo newSymbol che permettono di associare, ad esempio, la posizione del token all'interno dell'input (utili per i messaggi d'errore). Nel file principale (Riconoscitore.java, metodo main): - si costruisce prima di tutto la Symbol Factory - si crea uno scanner associato al flusso di input e alla symbol factory (mediante costruttore di Scanner) - si crea un parser a partire dallo scanner e dalla symbol factory Come nella versione precedente si invoca poi il metodo parse. Utilizzeremo lo stesso schema negli esempi successivi.