Giorgos.k80 wrote:Α.Σε τι διαφέρει η λεξικογραφική περιγραφή από την συντακτική περιγραφή μιας γλώσσας προγραμματισμού;Περιγράψτε τις φάσεις μετάφρασης και εξηγήστε τι κάνει κάθε μια από αυτές.
Β.Κατασκευάστε τις γραμματικές που να περιγράφουν τις εξής γλώσσες:
1) Αλυσίδες συμβόλων 0 και 1 που αρχίζουν με κ=0 και τελειώνουν με κ=1 για οποιοδήποτε κ>0. Παράδειγμα αλυσίδας: 000111.0000011111.
2) Ακέραιους και δεκαδικούς αριθμούς (πχ: 23.45, 45, 0.34, 10).
3) Ονόματα μεταβλητών όπως αυτά ορίζονται από την γλώσσα Java.
Όποιος γνωρίζει ας βοηθήσει.Ευχαριστώ πολύ
Για το ερώτημα Α κοιτά σελίδες 378,384-385 από το βιβλίο.
Για το ερώτημα Β νομίζω έτσι λύνεται:
Για το 1 έχεις γραμματική Γ1 = { 0^k 1^k,k>=1}
Για το 2 έχεις--> το σύνολο των ακέραιων Ζ{..,-2,-1,0,1,2,..} και η ζητούμενη γραμματική είναι Γ2 = { k/l | k,l ε Ζ, l != 0} βασικά το σύνολο των ρητών.
Και για το 3 έχεις(δεν είμαι σίγουρος)---> σύνολο Α = { byte,short,int,long,float,double,char,boolean }
Σύνολο Χ = { A,B,..,Z,$,_ } <-- το γράμμα που ξεκινάει η λέξη || Σύνολο Υ = { Α,Β,..,Ζ,$,_,0,1,.. } <-- αυτά που παίρνει η λέξη από την δεύτερη θέση.
Άρα έχεις γραμματική Γ3 = { κ λ μ^i | κεΑ, λεΧ, μεΥ, i >= 0 }