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

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

Δημοσ. (επεξεργασμένο)

Καλησπερα θα ηθελα να φτιαξω εναν συντακτικο αναλυτη (LL(1) κατα προτιμηση επειδη ξερω πως δουλευει αν υπαρχει κατι πιο ευκολο δεκτο ) ο οποιος θα ελεγχει μια κανονικη εκγφραση αν ειναι σωστη...

Δεν ξερω ομως πως βγαινει η γραμματικη..σε αυτο θα ηθελα βοηθεια αρχικα

Επεξ/σία από MixalisDev
Δημοσ.

Υπαρχουν διαφορα εργαλεια που τους δινεις την LL γραμματικη σου και κατασκευαζουν τον αναλυτη.

Δημοσ.

Από τον σύνδεσμο που έδωσε ο gon1332 βλέπουμε ένα πίνακα κανόνων. Αυτός ο πίνακας σου δείχνει κάθε γραμμή και μια συνάρτηση, όπου δίπλα σε <> είναι οι κλήσεις σε άλλες, όπου αν αποτύχει η πρώτη πάμε στη δεύτερη αν υπάρχει κάθετος.

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

Οι παράμετροι για όλες τις επιμέρους συναρτήσεις είναι ίδιες, θέση στο κείμενο της έκφρασης.

Για να κάνεις έλεγχο δεν χρειάζεται να παράγεις tokens. Το δένδρο σχηματίζεται με τις κλήσεις των συναρτήσεων και η επιστροφή true η false καθώς και αν υπάρχει υπόλοιπο για έλεγχο είναι αυτό που καθορίζει την ροή εκτέλεσης.

Δημοσ.

Ευχαριστω για τις απαντησεις σας..αλλα μπερδευτικα καπως :huh: Φαινεται λιγο δυσκολος ο συνατκτικος αναλυτης LL(1) εχετε να μου προτινεται κατι αλλο?

Δημοσ.

Έχεις κάποια γραμματική; Αν έχεις τότε μπορείς να χρησιμοποιήσεις κάποιον compiler-compiler, πχ flex/bison, ο οποίος σου παράγει αυτόματα κώδικα για συντακτική ανάλυση, αλλά όχι για LL(1) προφανώς. Αν θυμάμαι καλά GLR.

Δημοσ.

Δεν ξερω ομως πως βγαινει η γραμματικη..σε αυτο θα ηθελα βοηθεια αρχικα

 

Βασικά απ' ότι μου φαίνεται το θέμα σου είναι ο ορισμός της γραμματικής και όχι ο ίδιος ο parser που είναι μέσες άκρες απλή περίπτωση. Ίσως ακόμα και το αν γίνεται να ορίσεις LL(1) γραμματική για τη γλώσσα που θες να είναι συζητήσιμο.

 

Οπότε μήπως να ξεκινήσεις μιλώντας για τη γλώσσα;

Δημοσ.

Μήπως να βγάλει και ένα α από το τίτλο συν-α-τακτικού αναλυτή;

  • Like 3
Δημοσ.

Μήπως να βγάλει και ένα α από το τίτλο συν-α-τακτικού αναλυτή;

 

Μέχρι να το γράψεις.. δεν το είχα παρατηρήσει!

Δημοσ.

Βασικά απ' ότι μου φαίνεται το θέμα σου είναι ο ορισμός της γραμματικής και όχι ο ίδιος ο parser που είναι μέσες άκρες απλή περίπτωση. Ίσως ακόμα και το αν γίνεται να ορίσεις LL(1) γραμματική για τη γλώσσα που θες να είναι συζητήσιμο.

 

Οπότε μήπως να ξεκινήσεις μιλώντας για τη γλώσσα;

Ναι βασικα αυτο ειναι το προβλημα πως θα βγαλω την γραμματικη...μετα θα βγαλω να FIRST και τα FOLLOW και απο αυτα θα βγει το πινακακι..οπως κανει και στο βιβιλιο που εχω

Θελω να αγνωριζει κανονικες εκφρασεις που θα εχουν τα συμβολα +,*,|,(,) 

 

(Εχω το βιβλιο του Σκορδαλακη Μεταγλωτηστες)

Δημοσ.

Είναι για άσκηση να παραδόσεις ή το κάνεις από χόμπι;

Απο χομπι...ειμαι σε σχολη πληροφορικης αλλα δεν με υποχρεωσε κανεις να το κανω απλα λεω να μαθω και τιποτα

  • Like 1
Δημοσ.

Οκ.

Γιατί πρέπει να είναι compiler και όχι interpreter αυτό που θες να αναγνωρίζει εκφράσεις; Δεν είναι πιο εύκολο να φτιάξεις διερμηνευτή;

  • Like 1
Δημοσ.

Δεν ειναι απαραίτητο να ειναι compiler απλα με interpreter δεν εχω δει καθόλου εμενα με ενδιαφέρει να ελέγχει μια κανονική έκφραση

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...