dinak Δημοσ. 27 Φεβρουαρίου 2011 Δημοσ. 27 Φεβρουαρίου 2011 Έστω ότι κατασκευάζω έναν λεκτικό αναλυτή στην C, κάνοντας define (εκτός από όλα τα άλλα που χρειάζονται) και τις δεσμευμένες λέξεις. Έστω μετά ότι η λέξη που ελέγχω είναι id (αναγνωριστικό). Εάν γίνει αυτό, πως μπορώ να δω εάν η λέξη μου είναι δεσμευμένη;
bodi.de Δημοσ. 28 Φεβρουαρίου 2011 Δημοσ. 28 Φεβρουαρίου 2011 Όταν κάνεις define τις λέξεις σου, πως τις δεσμεύεις; Μπορείς να κανείς π.χ #define NEW 1 έτσι ώστε να παίζεις πάλι με τα ids κ σε αυτήν την περίπτωση.
dinak Δημοσ. 28 Φεβρουαρίου 2011 Μέλος Δημοσ. 28 Φεβρουαρίου 2011 δεν καταλαβα και πολυ αυτο που μου λες. Δηλαδη εστω οτι ο λεκτικος αναλυτης διαβαζει τη λεξη NEW τοτε πως θα γινει ο ελεγχος στον κωδικα για να δω αν ειναι δεσμευμενη;θα με βοηθησουν τα define των δεσμευμενων;
MitsakosGR Δημοσ. 28 Φεβρουαρίου 2011 Δημοσ. 28 Φεβρουαρίου 2011 Πώς παίρνεις το κείμενο που αναλύεις για να δεις τι είναι (σε char*, string, τι είναι); Πρέπει να ψάξεις μέσα στο κείμενο για να βρεις την λέξη, δεν νομίζω να μπορείς να το κάνεις απλά με τα define. Υ.Γ. Πώς ονομάζεται ο "Λεκτικός Αναλυτής" στα αγγλικά;
bnvdarklord Δημοσ. 28 Φεβρουαρίου 2011 Δημοσ. 28 Φεβρουαρίου 2011 Υ.Γ. Πώς ονομάζεται ο "Λεκτικός Αναλυτής" στα αγγλικά; lexical analyser
MitsakosGR Δημοσ. 28 Φεβρουαρίου 2011 Δημοσ. 28 Φεβρουαρίου 2011 @bnvdarklord Ευχαριστώ. Τόσο απλό τελικά... Δεν σκέφτηκα καν να κάνω ακριβή μετάφραση @dinak Δες και αυτό. Είναι σε C από μάθημα στο Stanford.
dinak Δημοσ. 1 Μαρτίου 2011 Μέλος Δημοσ. 1 Μαρτίου 2011 την διαλεξη του στανφορντ την εχω διαβασει αλλα δε με βοηθησε και πολυ σε αυτο που χρειαζομαι. Λοιπον για να γινω κατανοητη, διαβαζω μια λεξη, και βλεπω οτι ειναι αναγνωριστικο. Αυτο που πρεπει να κανω μετα ειναι να ψαξω να δω αν ανηκει στις δεσμευμενες. Εδω ειναι που κολλαω. Πως θα γινει αυτη η αναζητηση;
MitsakosGR Δημοσ. 1 Μαρτίου 2011 Δημοσ. 1 Μαρτίου 2011 την διαλεξη του στανφορντ την εχω διαβασει αλλα δε με βοηθησε και πολυ σε αυτο που χρειαζομαι. Λοιπον για να γινω κατανοητη, διαβαζω μια λεξη, και βλεπω οτι ειναι αναγνωριστικο. Αυτο που πρεπει να κανω μετα ειναι να ψαξω να δω αν ανηκει στις δεσμευμενες. Εδω ειναι που κολλαω. Πως θα γινει αυτη η αναζητηση; Πρέπει να φτιάξεις ένα MAP στο οποίο θα έχεις τις δεσμευμένες λέξεις σαν μεταβλητές από την μία και την συμβολοσειρά στη οποία αντιστοιχεί στην άλλη. Έτσι θα ψάχνεις μέσα στο κείμενό σου για δεσμευμένες λέξεις και μέσω του map, θα κάνεις την αντιστοιχία.
dinak Δημοσ. 1 Μαρτίου 2011 Μέλος Δημοσ. 1 Μαρτίου 2011 Πρέπει να φτιάξεις ένα MAP στο οποίο θα έχεις τις δεσμευμένες λέξεις σαν μεταβλητές από την μία και την συμβολοσειρά στη οποία αντιστοιχεί στην άλλη. Έτσι θα ψάχνεις μέσα στο κείμενό σου για δεσμευμένες λέξεις και μέσω του map, θα κάνεις την αντιστοιχία. το θέμα είναι ότι η άσκηση είναι σε C! και όχι c++ για να χρησιμοποιήσω map!
mtsouk Δημοσ. 1 Μαρτίου 2011 Δημοσ. 1 Μαρτίου 2011 Δεν γνωρίζω αν αυτό που θα πω θα βοηθήσει, αλλά τα εργαλεία lex και yacc δεν θα βοηθούσαν σε αυτή την περίπτωση; φιλικά,
MitsakosGR Δημοσ. 1 Μαρτίου 2011 Δημοσ. 1 Μαρτίου 2011 το θέμα είναι ότι η άσκηση είναι σε 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; }
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.