Προς το περιεχόμενο

λεκτικός αναλυτής


dinak

Προτεινόμενες αναρτήσεις

Δημοσ.

Έστω ότι κατασκευάζω έναν λεκτικό αναλυτή στην C, κάνοντας define (εκτός από όλα τα άλλα που χρειάζονται) και τις δεσμευμένες λέξεις. Έστω μετά ότι η λέξη που ελέγχω είναι id (αναγνωριστικό). Εάν γίνει αυτό, πως μπορώ να δω εάν η λέξη μου είναι δεσμευμένη;

Δημοσ.

Όταν κάνεις define τις λέξεις σου, πως τις δεσμεύεις;

Μπορείς να κανείς π.χ #define NEW 1

έτσι ώστε να παίζεις πάλι με τα ids κ σε αυτήν την περίπτωση.

Δημοσ.

δεν καταλαβα και πολυ αυτο που μου λες. Δηλαδη εστω οτι ο λεκτικος αναλυτης διαβαζει τη λεξη NEW τοτε πως θα γινει ο ελεγχος στον κωδικα για να δω αν ειναι δεσμευμενη;θα με βοηθησουν τα define των δεσμευμενων;

Δημοσ.

Πώς παίρνεις το κείμενο που αναλύεις για να δεις τι είναι (σε char*, string, τι είναι);

Πρέπει να ψάξεις μέσα στο κείμενο για να βρεις την λέξη, δεν νομίζω να μπορείς να το κάνεις απλά με τα define.

 

Υ.Γ. Πώς ονομάζεται ο "Λεκτικός Αναλυτής" στα αγγλικά;

Δημοσ.

την διαλεξη του στανφορντ την εχω διαβασει αλλα δε με βοηθησε και πολυ σε αυτο που χρειαζομαι. Λοιπον για να γινω κατανοητη, διαβαζω μια λεξη, και βλεπω οτι ειναι αναγνωριστικο. Αυτο που πρεπει να κανω μετα ειναι να ψαξω να δω αν ανηκει στις δεσμευμενες. Εδω ειναι που κολλαω. Πως θα γινει αυτη η αναζητηση;

Δημοσ.

την διαλεξη του στανφορντ την εχω διαβασει αλλα δε με βοηθησε και πολυ σε αυτο που χρειαζομαι. Λοιπον για να γινω κατανοητη, διαβαζω μια λεξη, και βλεπω οτι ειναι αναγνωριστικο. Αυτο που πρεπει να κανω μετα ειναι να ψαξω να δω αν ανηκει στις δεσμευμενες. Εδω ειναι που κολλαω. Πως θα γινει αυτη η αναζητηση;

Πρέπει να φτιάξεις ένα MAP στο οποίο θα έχεις τις δεσμευμένες λέξεις σαν μεταβλητές από την μία και την συμβολοσειρά στη οποία αντιστοιχεί στην άλλη. Έτσι θα ψάχνεις μέσα στο κείμενό σου για δεσμευμένες λέξεις και μέσω του map, θα κάνεις την αντιστοιχία.

Δημοσ.

Πρέπει να φτιάξεις ένα MAP στο οποίο θα έχεις τις δεσμευμένες λέξεις σαν μεταβλητές από την μία και την συμβολοσειρά στη οποία αντιστοιχεί στην άλλη. Έτσι θα ψάχνεις μέσα στο κείμενό σου για δεσμευμένες λέξεις και μέσω του map, θα κάνεις την αντιστοιχία.

 

το θέμα είναι ότι η άσκηση είναι σε C! και όχι c++ για να χρησιμοποιήσω map!

Δημοσ.

Δεν γνωρίζω αν αυτό που θα πω θα βοηθήσει, αλλά τα εργαλεία lex και yacc δεν θα βοηθούσαν σε αυτή την περίπτωση;

 

φιλικά,

Δημοσ.

το θέμα είναι ότι η άσκηση είναι σε C! και όχι c++ για να χρησιμοποιήσω map!

 

Φτιάξε την δική σου εκδοχή του MAP, με απλή Struct, έναν global πίνακα με αυτή την Struct και αντίστοιχες μεθόδους για εισαγωγή και εύρεση στοιχείων.

 

Κάτι τέτοιο (μπορεί να έχει λάθη, δεν το έχω δοκιμάσει):

>#define ifToken 1
#define whereToken 2
//...
//ktl
#define MAXVALUES 20

struct MAP{
char* token;
int   tokenCode;
};

int returnToken(char*);//return token number OR -1 if it doesnt exists
int setToken(char*, int);//if set is ok returns 0, else -1

MAP tokenMap[MAXVALUES];
int currentPos = 0;

int returnToken(char* token){
for(int i=0; i<MAXVALUES; ++i)
	if(strcmp(token, tokenMap[i].token) == 0 )
		return tokenMap[i].tokenCode;

return -1;
}

int setToken(char* token, int tokenID){
if(currentPos == MAXVALUES)
	return -1;

if(returnToken(token) == -1){
	strcpy(tokenMap[currentPos].token, token);
	tokenMap[currentPos].tokenCode = tokenID;
	return 0;
}

return -1;
}

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...