Che cosa è un esempio di errore lessicale, ed è possibile che una lingua non ha errori lessicali?

StackOverflow https://stackoverflow.com/questions/3484689

  •  28-09-2019
  •  | 
  •  

Domanda

per la nostra classe teoria del compilatore, che hanno il compito di creare un semplice interprete per il nostro linguaggio di programmazione progettato. Sto usando JFLEX e la tazza come i miei generatori, ma io sono un po 'bloccato con quello che un errore di lessicale è. Inoltre, è consigliabile usare la funzione di stato di JFLEX? ci si sente sbagliato, come sembra che il parser è più adatto a gestire questo aspetto. e mi consiglia di altri strumenti per creare la lingua. Mi dispiace se io sono impaziente, ma è a causa di martedì.

È stato utile?

Soluzione

Un errore lessicale è alcun input che può essere rifiutato dal lexer. Questo si traduce in genere da riconoscimento di token cadere la fine delle regole che avete definito. Per esempio (in nessun particolare sintassi):

[0-9]+   ===> NUMBER token
[a-zA-Z] ===> LETTERS token
anything else ===> error!

Se ci pensate un lexer come una macchina a stati finiti che accetta stringhe di input validi, quindi gli errori stanno per essere eventuali stringhe di input che non comporterà la macchina a stati finiti che raggiungono uno stato di accettazione.

Il resto della tua domanda era piuttosto chiaro per me. Se si dispone già di alcuni strumenti in uso, allora forse si sta meglio per imparare come ottenere ciò che si vuole raggiungere l'utilizzo di tali strumenti (non ho alcuna esperienza con uno degli strumenti che hai menzionato).

EDIT: Avere riletto la tua domanda, c'è una seconda parte posso rispondere. E 'possibile che una lingua possa avere errori lessicali -. È la lingua in cui qualsiasi stringa di input a tutti è input valido

Altri suggerimenti

Un errore lessicale potrebbe essere un carattere non valido o inaccettabili dal linguaggio, come '@' che viene rifiutata come un errore lessicale per gli identificatori in Java (è riservato).

errori lessicali sono gli errori generati dal lexer quando in grado di continuare. Il che significa che non c'è modo di riconoscere un lessema come valida gettone per voi lexer. Gli errori di sintassi, dall'altro lato, saranno gettati dallo scanner quando un dato insieme di già riconosciuti validi i token non corrisponde con nessun dei lati destro del regole grammaticali.

  

ci si sente male come sembra come il   parser è più adatto alla movimentazione   quell'aspetto

No. E ' sembra context-free lingue includono linguaggi regolari (nel senso di un parser in grado di fare il lavoro di un lexer). Ma considerare che un parser è un automi pila, e sarete impiegando risorse del computer in più (lo stack) di riconoscere qualcosa che non richiede uno stack di essere riconosciuto (un'espressione regolare). Sarebbe una soluzione non ottimale.

. NOTA: per le espressioni regolari, voglio dire ... espressione regolare nel senso Chomsky Gerarchia, non una classe java.util.regex.*

errore lessicale è quando l'ingresso non appartiene a nessuna di queste liste: parole chiave: "if", "else", "main"... Simboli: '=','+',';'... doppie simboli: ">=", "<=", "!=", "++" variabili: [a-z/A-Z]+[0-9]*
numeri: [0-9]*

esempi: 9var: errore, numero prima di caratteri, non è una variabile e non una parola chiave sia.           $: Errore

quello che non sappiamo è se viene accettata qualcosa come più di un simbolo dopo l'altro, come "+ -"

Compiler può prendere un errore quando ha la grammatica in esso! Esso dipenderà dal compilatore stesso se ha la capacità (portata) di catturare gli errori lessicali o meno. Se è deciso durante lo sviluppo del compilatore quali tipi di errore lessicale e come (secondo la grammatica) che stanno per essere gestiti. Di solito tutti famosi e più utilizzato il compilatore ha questa capacità.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top