Κ6-Γλώσσες Προγραμματισμού-2017

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 59

ΚΕΦΑΛΑΙΟ

 6:  Γλώσσες  Προγραμματισμού


● Ιστορική  εξέλιξη Γλωσσών  Προγραμματισμού
● Προγραμματιστικά  μοντέλα
● Διαδικαστικό,  δηλωτικό,  συναρτησιακό,  αντικειμενοστρεφές
● Εισαγωγή  στις  Δομές  Δεδομένων
● Διαδικασίες  και  πέρασμα  παραμέτρων
● Σύνταξη  γλώσσας  και  γραμματική
● Στάδια  μεταγλώττισης
● Εισαγωγή  στον  Αντικειμενοστρεφή προγραμματισμό
● Εισαγωγή  στον  Δηλωτικό  προγραμματισμό
Οι  διαφάνειες  βασίζονται  σε  μεγάλο  βαθμό  σε  α υτές  
που  συνοδεύονται  με  το  προτεινόμενο  σύγγραμμα,
καθώς  και  στις   διαφάνειες  προηγούμενων  ετών  1του  
κ.  Κουρκουμπέτη.
Γλώσσες  προγραμματισμού
Γλώσσα  Προγραμματισμού:  Εργαλείο  για  αναπαράσταση  αλγορίθμων    
• προσιτό  στον  χρήστη
• εύκολα  μετατρέψιμο  σε  γλώσσα  μηχανής  που  είναι  κατανοητή  από  
τον  Η/Υ

2
Πρώτη  Γενιά:  Γλώσσα  Μηχανής
• Γλώσσα  μηχανής:  οι  εντολές  αναπαριστώνται σε  δυαδικό  
σύστημα
• Κάθε  εντολή  αναπαρίσταται  ως  μια  ακολουθία  από  δυαδικά  
ψηφία
• Το  πρόγραμμα  ήταν  μια  σειρά  από  τέτοιες  εντολές,  π.χ.

• Εξαιρετικά  δύσκολο  το  γράψιμο  και  η  κατανόηση   προγραμμάτων


• Συχνά  σφάλματα,  δύσκολη  αποσφαλμάτωση   (debugging)

3
Δεύτερη   γενιά:  γλώσσα  Αssembly
● Ένα  μνημονικό  σύστημα  για  την  αναπαράσταση  προγραμμάτων
Χρήση  μνημονικών (mnemonic)  ονομάτων  για  αναπαράσταση  εντολών
● Υπάρχει  ακριβής  1-­‐1  αντιστοιχία   μεταξύ  των   εντολών  της  
μηχανής  και  των   εντολών   Αssembly.
● Η   μετάφραση  από  γλώσσα   Αssembly σε   γλώσσα   μηχανής  
γίνεται   από  ένα   πρόγραμμα  που   ονομάζεται   “assembler”

Γλώσσα  μηχανής Γλώσσα  assembly


156C LD  R5,   Price
166D LD  R6,   ShippingCharge
5056 ADDI  R0,  R5  R6
30CE ST  R0,  TotalCost
C000 HLT 4
Μειονεκτήματα  της  Assembly
• O  προγραμματιστής  πρέπει  να  σκέφτεται  πάλι σε  γλώσσα  
μηχανής  (απλά  αλλάζει  η  αναπαράσταση  και  σύνταξη  των  
εντολών)
• Η  Assembly  είναι  εγγενώς  εξαρτημένη   από  τον  επεξεργαστή   (οι  
εντολές  ενός  προγράμματος  σε  Assembly  έχουν  ιδιότητες  
εγγενείς  στην  τεχνολογία  της  συγκεκριμένης   μηχανής)
– Δύσκολη  έως  αδύνατη  φορητότητα  (portability)  (μεταφορά  του  ίδιου  
προγράμματος  σε  άλλη  μηχανή)
• Τα  αρχέτυπα  (εντολές)  είναι  χαμηλού  επιπέδου  (πολύ  κοντά  
στο  hardware)
• Δεν  διευκολύνει  στον  γενικό  σχεδιασμό  ενός  προγράμματος  
(γιατί  αποτελείται  από  μικροεντολές  που  συνδέονται  με  πολύ  
μικρές  λειτουργίες  του  Η/Υ)
5
Τρίτη   γενιά  γλωσσών
● Βασίζεται  σε  σχετικά  μικρό  αριθμό  από  αρχέτυπα  υψηλού  
επιπέδου,  π.χ.

● Ανεξάρτητη από  τη  μηχανή  (τις  περισσότερες   φορές)


● Παραδείγματα:  FORTRAN,  COBOL
● Κάθε  αρχέτυπο  ανταποκρίνεται  σε  μία  μικρή  ακολουθία  εντολών  
γλώσσας  μηχανής.
● Μεταφράζεται  σε  γλώσσα  μηχανής  από  ένα  πρόγραμμα  που  
λέγεται  compiler  (μεταγλωττιστής)
● Εναλλακτικά  αντί  για  compiler  υπάρχει  ο  ερμηνευτής
(interpreter)
● Εκτελεί  τις  εντολές  καθώς  τις  μεταφράζει,  ενώ  ο  compiler  πρώτα  
μεταφράζει  όλες  τις  εντολές  του  προγράμματος  σε  γλώσσα  μηχανής  και  
μετά  τις  εκτελεί
6
Η  εξέλιξη   των  προγραμματιστικών   μοντέλων

Δείτε  και  το:


http://www.inc.com/larry-­‐kim/10-­‐most-­‐popular-­‐programming-­‐languages-­‐today.html
7
Προγραμματιστικά  μοντέλα:  Προστακτικό   μοντέλο
• Διαφορετικές  φιλοσοφίες   στον  προγραμματισμό
• Προστακτικό  (imperative)  ή  διαδικαστικό (procedural)  μοντέλο:  η  
διαδικασία  προγραμματισμού  είναι  μια  ακολουθία  από  εντολές,  
που  όταν  εκτελεστούν,  επενεργούν  στα  δεδομένα  και  παράγουν  
το  επιθυμητό  αποτέλεσμα
– Πρέπει  να  βρεθεί  ο  αλγόριθμος  για  την  επίλυση  του  προβλήματος  και  
έπειτα  ο  αλγόριθμος  να  αναπαρασταθεί  σαν  μια  ακολουθία  από  εντολές
– Το  πιο  παραδοσιακό  από  τα  μοντέλα
– Παραδείγματα:  
– FORTRAN  (για  αριθμητικούς  υπολογισμούς)
– COBOL (για  επιχειρησιακές  εφαρμογές  )
– BASIC,  C,  Pascal  (γενικής  χρήσης)
– Ada (η  επίσημη  γλώσσα  ανάπτυξης  στρατιωτικών  εφαρμογών  από  το  Υπ.  
Άμυνας  των  ΗΠΑ)
8
Η  σύνθεση  ενός  τυπικού  προστακτικού  
προγράμματος  

(Declarative   statements)

(imperative   statements)

Υπάρχουν  και  σχόλια   (comments)   που  βελτιώνουν   την  αναγνωσιμότητα 9


Προγραμματιστικά  μοντέλα  (2):   Δηλωτικό  μοντέλο
• Δηλωτικό  (declarative)  μοντέλο:  ο  προγραμματιστής  πρέπει  να  
περιγράψει  το  πρόβλημα  προς  επίλυση,  και  όχι  τον  αλγόριθμο  
– Εφαρμόζει  ένα  γενικό  αλγόριθμο  επίλυσης  προβλημάτων
– Χρήση  για  προσομοίωση  συστημάτων  (οικονομία,  πολιτική,  μετεωρολογία,  
περιβάλλον)  π.χ.  για  πρόγνωση
– Ο  προγραμματιστής  περιγράφει  τι  θέλει  να  προσομοιωθεί,  ο  αλγόριθμος  
πρόγνωσης  υπάρχει  στην  γλώσσα  
– Παραδείγματα:  Prolog,  τομέας  τεχνητής  νοημοσύνης
– Ο  τομέας  της  Επίσημης  Λογικής  (Formal  Logic)  έδωσε  ώθηση  σε  αυτές  τις  
γλώσσες  

10
Προγραμματιστικά  μοντέλα  (3):   Συναρτησιακό  
μοντέλο
• Συναρτησιακό   (functional)  μοντέλο:  Το  πρόγραμμα  είναι  μια  
οντότητα  που  δέχεται  εισόδους  και  βγάζει  εξόδους  (όπως  η  
συνάρτηση)  
– Πρόγραμμα: συνάρτηση   που  μετασχηματίζει  εισόδους  σε  εξόδους
– Το  πρόγραμμα  κατασκευάζεται  συνδέοντας   μικρότερες  ενότητες  
(συναρτήσεις)  
– Προγραμματισμός:  σύνθεση  αυτής  της  συνάρτησης   από  απλούστερες
– Έξοδοι  από  μια  συνάρτηση   χρησιμοποιούνται  ως  είσοδοι  σε  άλλες  
συναρτήσεις
– Ο  προγραμματισμός  έγκειται  στο  χτίσιμο  μεγάλων  συναρτήσεων  από  
μικρότερες
– Παραδείγματα:  LISP
– Συμβολισμός  για  την   συνάρτηση  f(x,y,z):  (f  x  y  z)  
– Μεγάλο  πλεονέκτημα  σε  σχέση  με  τις  προστακτικές  γλώσσες  
προγραμματισμού:  δεν  χρειάζονται  πολλές  μεταβλητές  και  συνεπώς  
καταναλώνεται  πολύ  λιγότερος  χώρος  στη  μνήμη  για  το  πρόγραμμα
11
Παράδειγμα  Συναρτησιακού   Μοντέλου  Γλώσσας  
Προγραμματισμού
Σε  μια   imperative   γλώσσα  
προγραμματισμού
θα  ήταν

(Find_diff (Find_sum Old_balance Credits)   (Find_sum Debits))


12
Προγραμματιστικά  μοντέλα  (4):  
Αντικειμενο-­‐στραφές μοντέλο
• Αντικειμενοστρεφές (object-­‐oriented) /Object-­‐oriented  Programming
– Κατά  βάση  προστακτικό  μοντέλο
– Μονάδες  δεδομένων: ενεργά  αντικείμενα
– Κάθε  αντικείμενο  μπορεί  να  επενεργεί  στον  εαυτό  του  ή  σε  άλλα  αντικείμενα  
– Παράδειγμα   1:  Graphical  User  Interface  (GUI)
• Κάθε  εικονίδιο  είναι  ένα  αντικείμενο
• Περιλαμβάνει   διαδικασίες   (μεθόδους,  methods)  που  ορίζουν  πως  αποκρίνεται  
σε  διάφορα  γεγονότα
– Παράδειγμα   2:  λίστα  ονομάτων
• Παραδοσιακός   προγραμματισμός:  λίστα  =  σύνολο  δεδομένων,  
προγραμματιστής  υπεύθυνος  να  κατασκευάσει  αλγόριθμο  προσπέλασης
• OOP: λίστα  =  αντικείμενο  =  δεδομένα  +  διαδικασίες   χειρισμού  (εισαγωγή  ή  
αφαίρεση  στοιχείου  στη  λίστα,  ταξινόμηση,  αναζήτηση)
• Κλάση   (class)  αντικειμένων:   σύνολο  ιδιοτήτων  που  χαρακτηρίζουν   ίδια  
αντικείμενα   (που   ανήκουν   στην   ίδια   κλάση)
• Ορίζεται  μια  κλάση   αντικειμένων   π.χ.  Εικονίδιο,   δορυφόρος,  σταθμός
– Έπειτα  ορίζονται  αντικείμενα  π.χ.  icon1,  icon2  ως  εκδοχές  (instances)  της  κλάσης
• Παραδείγματα:  C++,  Visual   Basic,  Java,   C# 13
Σεναριακές   Γλώσσες  προγραμματισμού
• Σεναριακές  Γλώσσες  προγραμματισμού  (scripting  
languages):  χρησιμοποιούνται  για  να  κάνουν  μικρές  
διαχειριστικές  εργασίες  στον  υπολογιστή
• Σενάριο  (script):  κομμάτι  κώδικα  που  υλοποιεί  την  
συγκεκριμένη  εργασία
– Π.χ.  Ο  διαχειριστής  ενός  συστήματος  γράφει  ένα  
πρόγραμμα  για  να  καταγράψει  τις  εργασίες  που  χρειάζεται  
να  γίνουν  για  αρχειοποίηση
– Ή  ένα  script  για  ανάγνωση   και  δεικτειοδότηση   (indexing)  
εικόνων  από  μια  φωτογραφική  μηχανή
• Γλώσσες:  Perl,  PHP
14
Τύποι  και  Μεταβλητές  σε  C,  C++,   C#  και  Java
• Μεταβλητή   (variable):  όνομα  που  υποδηλώνει   μια  θέση  μνήμης
– Αν  αλλάξει  η  τιμή  που  είναι  αποθηκευμένη  σε  αυτή  τη  θέση  μνήμης,  αλλάζει  
και  η  τιμή  που  σχετίζεται  με  την  μεταβλητή
• Τύπος (type) Δεδομένων
– Ακέραιος (integer):   Ακέραιος  αριθμός
– Πραγματικός (real):  Αριθμοί  με  δεκαδικά  ψηφία
– Χαρακτήρες (character):  Σύμβολα
– Boolean:  Αληθές/ψευδές

• Δηλώσεις  Μεταβλητών

• float Length, Width;


• int Price, Tax, Total;
• char Symbol
15
Δομές  δεδομένων  (Data  structures)
• Δομές  δεδομένων:  Νοητικά  σχήματα  για  τη  διάταξη  δεδομένων  

• Οι  αλγόριθμοι  προτιμούν  τα  δεδομένα  να  είναι  δομημένα  (για  


μεγαλύτερη  αποδοτικότητα)
– Πίνακες  (arrays)
– Λίστες (lists)
– Δένδρα (trees)

• Πως  τα  υλοποιούμε  στη  μνήμη;

16
Πίνακες
Δομή  δεδομένων:   α11 α12 α13 γραμμή  1

α21 α22 α23 γραμμή  2

γραμμή  3

Μνήμη:
αρχή  του   πίνακα

... γραμμή  1 γραμμή  2 γραμμή  3 ...

17
Παράδειγμα:  Δι-­‐διάστατος πίνακας  2  γραμμών  και  9  
στηλών
int Scores[2][9]  στην  C
INTEGER  Scores(2,9)  στην  Fortran

Πάνω  αριστερά  στοιχείο   του   πίνακα:  Scores[0][0]  στην  C,  Scores(1,1)  στην   FORTRAN

18
Λίστες   και  προσθήκη   μέλους  σε   αυτές
Λίστα:   ακολουθία  από  records  (int ή  πιο  σύνθετα   records,  βλ.  Παρακάτω)
Λίστα:        10,  12,  6,  7 Βασική  λειτουργία:  Προσθήκη  μέλους:  10,  12,  2,  6,  7  

pointer  (δείκτης)

... 27 30 34 36

... 10 30 12 34 6 36 7 nil ...

27 30 34 36 40
27
10 30 12 40 6 36 7 nil 2 34

19
Δένδρα
T Δομή  δεδομένων:
A
Α
B C

D E
Β nil nil
C

Υλοποίηση  στη  μνήμη:

D nil nil
E nil nil

20
Ετερογενής  πίνακας  (structure)

Eτερογενής  πίνακας
Ή  δομή   (structure)
ή   record

Μπλοκ  δεδομένων  
με  στοιχεία   (πεδία)  
ενδεχομένως  
διαφορετικού
τύπου
Employee.Name
Employee.Age
Employee.SkillRating

21
Σταθερές  (constants) και  δηλώσεις  ανάθεσης
• Καλύτερα  να  δηλώνονται  στην  αρχή  του  προγράμματος

– Αν  χρειαστεί  να  αλλαχθούν,  θα  αλλαχθούν  μόνο  εκεί


• Δηλώσεις  ανάθεσης   (assignment  statements)
– Μπορεί  να  διαφέρουν  σε  διαφορετικές  γλώσσες,  π.χ.

• Αριθμητικές  πράξεις  
– Τηρείται  η  προτεραιότητα  τελεστών  (operator   precedence)
• 2*4  +  6  /  2  =  11  
– Ο  ίδιος  τελεστής  μπορεί  να  έχει  διαφορετικές  λειτουργίες  π.χ.
– “+”  κάνει  πρόσθεση  (αν  έχει  ως  τελεστέους  αριθμούς)  ή  συνένωση  
(concatenation)  από  strings  (αν  έχει  ως  τελεστέους  strings)
– Αυτή  η  «διπλή»  λειτουργία  λέγεται  υπερφόρτωση  τελεστή  (operator  
overloading)
22
Δομές  ελέγχου   και  οι  
αναπαραστάσεις  τους  
σe C,  C++,   C#, και  Java
Βρόχος  for  και  η  αναπαράστασή  του  σε  C,  
C++,  C#  και  Java

24
Διαδικασία  (procedure)
Διαδικασία  (procedure):  μια   σειρά  από  εντολές  που  υλοποιούν  μια   εργασία
Μπορεί  να  χρησιμοποιηθεί   ως  αυτούσια   προγραμματιστική  μονάδα  

25
Διαδικασίες  (2)
• Έχουν  τη  δομή  ενός  συνήθους  προγράμματος  (κεφαλίδα,  
δήλωση  μεταβλήτών,  σειρά  εντολών)
• Μεταβλητές:  
– Τοπικές  (local),  χρησιμοποιούνται  και  αλλάζουν  μόνο  εντός  της  
διαδικασίας
– Ολικές  (global),  χρησιμοποιούνται  και  αλλάζουν  σε  όλο  το  πρόγραμμα  
• Εύρος  ή  εμβέλεια  (scope)  μιας  μεταβλητής:  το  μέρος  του  
προγράμματος  που  μπορεί  μια  μεταβλητή  να  χρησιμοποιηθεί
• Κλήση:  απλά  με  το  όνομα

26
Παράδειγμα  Διαδικασίας

Παράμετροι  (parameters):  ορίσματα


Τυπικές  (formal)  παράμετροι:  οι  παράμετροι  που  χρησιμοποιούνται   εντός  της   διαδικασίας
Πραγματικές  (actual)   παράμετροι:  οι   τιμές   που  ανατίθενται  στις   τυπικές  παραμέτρους  
όταν  καλείται  η   διαδικασία  από  το  κυρίως  πρόγραμμα       27
Πέρασμα  παραμέτρων  
• Περιγραφή  διαδικασίας:
• Κλήση   διαδικασίας   με  κατάλληλες   παραμέτρους:

• Πέρασμα  παραμέτρων  κατά  τιμή   ή  αξία   (passed   by   value)


– Ένα  αντίγραφο  των  δεδομένων  που  παριστάνεται  με  τις  πραγματικές  
παραμέτρους  δίνεται  στην  διαδικασία
– Αλλαγή  των  δεδομένων  από  την  διαδικασία:   αλλάζει  μόνο  τα  δεδομένα  στο  
αντίγραφο,  και  όχι  αυτά  στο  κυρίως  (καλόν)  πρόγραμμα
• Πέρασμα  παραμέτρων  κατ’   αναφορά  (passed   by   reference)
– Δίνεται  στην  διαδικασία   απευθείας  πρόσβαση  στις  τιμές  των  πραγματικών  
παραμέτρων,  δηλ.  δίνονται  στην  διαδικασία   οι  διευθύνσεις των  πραγματικών  
παραμέτρων
– Αλλαγή  των  δεδομένων  από  την  διαδίκασία   αλλάζει  τα  δεδομένα  και  στο  
κυρίως  πρόγραμμα
– Χρησιμοποιείται  αν  ο  σκοπός  της  διαδικασίας   είναι  η  αλλαγή  των  δεδομένων  
(π.χ.  ταξινόμηση  μιας  λίστας)  
28
Παράδειγμα:  Πέρασμα  παραμέτρων  κατά αξία

Actual   =   5

Κλήση   διαδικασίας:

29
Παράδειγμα:  Πέρασμα  παραμέτρων  κατ’ αναφορά

Actual   =   5

Κλήση   διαδικασίας:

30
Παράδειγμα  Συνάρτησης
Διαφορά  από  την  Διαδικασία:  Η  συνάρτηση (function)  επιστρέφει  μια  τιμή

31
Μετάφραση
• Πρόγραμμα-­‐πηγή  (source  program):  το  
πρόγραμμα  γραμμένο  στην  αρχική   του  μορφή
• Πρόγραμμα-­‐αντικείμενο  (object-­‐program):  
ενδιάμεσο  αποτέλεσμα  μετάφρασης
• Μετάφραση: μετατροπή  προγράμματος  από  μια  
μορφή  σε  άλλη
• Διερμηνεία   (interpretation)
• Μεταγλώττιση  (compilation)

Δείτε:  https://www.programiz.com/article/difference-­‐compiler-­‐interpreter 32
Διερμηνεία  vs.  Μεταγλώττιση
• Διερμηνευτής  (interpreter):   • Μεταγλωττιστής  (Compiler):
Μεταφράζει  και  εκτελεί  το   μεταφράζει  μία  φορά  το  
πρόγραμμα  υψηλού  επιπέδου   πρόγραμμα  υψηλού  επιπέδου  
εντολή  προς  εντολή (source program)  σε  πρόγραμμα  
– Ταχύτητα  όχι  σημαντική γλώσσας  μηχανής /  πρόγραμμα-­‐
– λίγη  μνήμη αντικείμενο (object program)
– ανακάλυψη  λαθών   – Ταχύτητα  σημαντική
(debugging)
ξεκίνα από την αρχή του προγράμματος
ξεκίνα από την αρχή του
υψηλού επιπέδου
προγράμματος υψηλού επιπέδου
Repeat
Repeat
μετάφρασε την επόμενη εντολή υψηλού
μετάφρασε την επόμενη εντολή επιπέδου
υψηλού επιπέδου
until τέλος προγράμματος
εκτέλεσε την μετάφραση της
εντολής με τα αντίστοιχα κάνε τις τελικές αλλαγές στον
δεδομένα μεταφρασμένο κώδικα
ώστε να είναι έτοιμος για εκτέλεση33
until τέλος προγράμματος
Η  διαδικασία  της  Μεταγλώττισης  

Λεκτικός Συντακτικός Γεννήτρια Πρόγραμμα


Αναλυτής Αναλυτής κώδικα
αντικείμενο
Πηγαίο
Πρόγραμμα

34
Μεταγλώττιση
• Λεκτικός  αναλυτής  (lexical  analyzer):  διαβάζει  το  πρόγραμμα  
χαρακτήρα  προς  χαρακτήρα,  αναγνωρίζει  συμβολικές  οντότητες  
(tokens)
– Ταξινόμηση  tokens  σε  κατηγορίες  (τελεστές,  σύμβολα,  αριθμητικές  τιμές,  
κλπ)
• Συντακτικός  αναλυτής  (parser):  συντάσσει  τα  tokens  σε  
προτάσεις  και  statements
– Αναγνώριση  γραμματικής  δομής  του  προγράμματος
– Αναγνώριση  του  ρόλου  κάθε  token
– Παράδειγμα  σύνταξης  στην  αγγλική:  

– Δεσμευμένες  λέξεις  (reserved   words)


• Ο  parser  χρησιμοποιεί  την  Γραμματική  (grammar)  της  γλώσσας
– Γραμματική:  σύνολο  από  συντακτικούς  κανόνες  

35
Περιγραφή   Σύνταξης

Α.  Διαγράμματα  σύνταξης
Λογική
if then Εντολή else Εντολή
Παράσταση

Β.Κανόνες  BNF  

ifstmt -­‐>  if log_exp then  stmt  |    if  log_exp then  stmt  else  stmt    

If  x<1  then  y=2  else  z=1

36
Παράδειγμα  Γραμματικής

Ο  Γιάννης   είναι  καλός  μαθητής  και  έχει  κακό  χαρακτήρα


Γραμματική  (σύνταξη):
προτ  -­‐>  απλή_προτ  |  σύνθ_προτ
απλή_προτ  -­‐>  υποκ  ρήμα  επίθ  αντικ  |  υποκ  ρήμα  αντικ
σύνθ_προτ  -­‐>  απλή_προτ  και απλή_προτ          
|  απλή_προτ  και σύνθ_προτ

Βασικοί  τύποι  λέξεων  (τερματικά  σύμβολα):


{υποκ,  ρήμα,  επίθ,  αντικ,  και}

Λεξικογραφική   περιγραφή:  υποκ  -­‐>  Γιάννης,   Κώστας,  άνδρας


ρήμα  -­‐>  έχει,  κάνει,...  
37
Ορισμός  σύνταξης BNF
• BNF  σύνταξη  (Backus-­‐Naur  Form)
– τερματικά σύμβολα  (terminals,  tokens):  στοιχειώδη  σύμβολα,  
δεν  αναλύονται  περισσότερο  (“τύποι” λέξεων...)
– μη-­‐τερματικά σύμβολα (non-­‐terminals):  συντακτικές  
κατηγορίες  (προτάσεις,  υπο-­‐προτάσεις,...),   δηλ.  αυτά  που  
μπορούν  να  αναλυθούν  περαιτέρω  με  άλλα  διαγράμματα
– δυνατότητα  αναδρομικών   ορισμών
– Γλώσσα  = σύνολο  σωστών  ακολουθιών  τερματικών  συμβόλων

38
Διαγράμματα  σύνταξης  για  τη  δομή  της  
αλγεβρικής   παράστασης x+y*z

E  -­>  T+E  |  T-­E  |  T


T  -­>  F*T  |  F/T  |  F
F  -­>    x  |  y  |  z

39
Δέντρο   συντακτικής  ανάλυσης  για  την  
παράσταση  x+y*z

E  -­‐>  T+E  |  T-­‐E  |  T


T  -­‐>  F*T  |  F/T  |  F
F  -­‐>   x  |  y  |  z
40
Παράδειγμα  γλώσσας
Γλώσσα  =  απλές  αριθμητικές  εκφράσεις   με  0,...,9  και  +,-­‐,*,/

E  -­‐>  E  + E  | E  – E  | E  * E  | E  / E  | -­‐E  
E  -­‐>    0|1|2|3|4|5|6|7|8|9 E
9-­‐2*5  είναι  σωστή  πρόταση; E -­‐ E
6+*4  είναι  σωστή  πρόταση; E E
9
Σημασία  πρότασης; 2 * 5
συντακτικό  δέντρο
Σωστή   πρόταση:  υπάρχει  προτασιακό  δέντρο  που  να  την  δικαιολογεί

41
Ασάφεια  στην   Γραμματική  
E  -­‐>  E  +  E  | E  – E  | E  *  E  | E  /  E  | -­‐E  
E  -­‐>    0|1|2|3|4|5|6|7|8|9

τι  σημαίνει    9-­‐2*5  ; E E

E -­‐ E E * E
9 E E E E 5
2 * 5 -­‐
9 2
2  συντακτικά  δέντρα!
ποιο  από  τα  δύο  εννοούμε;
42
Παράδειγμα  ασαφούς  γραμματικής

• Θεωρείστε  την  εντολή:

• Μπορεί  να  ερμηνευτεί  και  με  


τα  δυο  δέντρα
– Ασάφεια  (ambiguity)
– Σε  ποιο  if  αναφέρεται  το  else;  
– Στον  ψευδοκώδικα  
αποφεύγουμε  το  μπέρδεμα  ως  
εξής:  

43
Παράδειγμα  Λεκτικής  και  Συντακτικής   Ανάλυσης

statement
Συντακτική  ανάλυση
conditional
συντακτικό
δένδρο statement
assignment
condition
expression
relation
operator
if id neq num then set id to id + id

b if b x b !=b 1 b then b setb y b to b x + y


Λεκτική  ανάλυση
44
Συντακτικός  αναλυτής
• Ο  συντακτικός   αναλυτής  κατασκευάζει   ένα  συντακτικό   δέντρο  
για  το   πηγαίο   πρόγραμμα
– Το   δέντρο   παριστάνει   την  ερμηνεία  του   αναλυτή  για   την   γραμματική  
σύνθεση   του   προγράμματος
– Γι’αυτό   πρέπει   οι   συντακτικοί   κανόνες   μιας  γλώσσας   να   είναι  
μονοσήμαντοι,  δηλ.   μια   σειρά   από   εντολές  να   μην οδηγεί  σε   2  ή  
περισσότερα   συντακτικά   δέντρα
• Ο  συντακτικός   αναλυτής  διαχωρίζει   τις   δηλωτικές   από   τις  
προστακτικές   εντολές
– Κατασκευάζει   τον   πίνακα  συμβόλων   (symbol  table)   με  μεταβλητές,  
σταθερές,   τύπους  δεδομένων
– Χρησιμοποιεί   τους   τύπους  δεδομένων  για   να   ερμηνεύσει   μια  εντολή  
π.χ.  z  ß x  +   y,   δηλ.   τι  τύπος  είναι   το   x  και  το  y   (int,  float,  char)
– Ακολούθως,   δίνει  ανάλογο   σήμα   στην  γεννήτρια  κώδικα  για  να  
κατασκευάσει   την   κατάλληλη  εντολή   (ή   ακολουθία  εντολών)  σε  
γλώσσα   μηχανής
45
Οι  φάσεις  της  μεταγλώττισης:  
Συντακτική  Ανάλυση
αφαιρεί  άχρηστη  
πηγαίο  πρόγραμμα πληροφορία
σε  γλώσσα  υψηλού αντικείμενο  πρόγραμμα
επιπέδου σε  γλώσσα  μηχανής
Λεκτική Συντακτική Γεννήτρια
ανάλυση ανάλυση κώδικα
L G

... bif bx17=bmaxb-3 ... συντακτικό δένδρο


41 if nil
blank space
πίνακας   συμβόλων
12 id όνομα τύπος θέση στη μνήμη
πίνακας   αριθμ.   σταθερών 3 eq nil x17 integer 1445
τιμή θέση 12 id y integer 1446
3 100 19 - nil max integer 1447
4001 101 13
num
46
Συντακτική  ανάλυση  (συνέχεια)
Λεκτική Συντακτική Γεννήτρια
ανάλυση
abcdbwbwbw ανάλυση κώδικα

tokens
Γραμματική
G
Κατασκευή συντακτικού δένδρου (parse tree)
• bottom – up αρχικό σύμβολο

• top - down
κανόνας της
γραμματικής
Πίνακας  συμβόλων
τερματικά
(tokens)

47
Γεννήτρια   κώδικα  
• Κατασκευάζει  τις  εντολές  σε  γλώσσα  μηχανής  που  υλοποιούν  
τις  εντολές  που  αναγνωρίζονται  από  τον  συντακτικό  αναλυτή
• Βελτιστοποίηση  κώδικα   (code  optimization)
– Π.χ.  Ελαχιστοποίηση  του  αριθμού  των  εντολών  σε  γλώσσα  
μηχανής  που  υλοποιούν  μια  σειρά  εντολών

– Στο  παραπάνω,  μετά  την  1η εντολή  και  πριν  την  2η,  
αναγνωρίζει  η  γεννήτρια  κώδικα  ότι  οι  x,  z  υπάρχουν  ήδη  σε  
καταχωρητές

48
Γεννήτρια  κώδικα (2)
statement 1000 load R0 1456
conditional 1001 load R1 100
statement
1002 subtract R0 R0 R1
1002 jumpzero 1007
condition assignment
1003 load R1 1456
expression
relation 1004 load R2 1457
operator 1005 add R1 R1 R2
if id neq num then set id to id + id 1006 store R1 1457
1007 ......

y integer 1457 module generate-expression(T)


x integer 1456 A1:= & of left child
generate “load R1 A1”
1 100 A2:= & of right child
generate “load R2 A2”
if op = + then generate “add R1 R1 R2”
else generate “subtract R1 R1 R2”
49
Ολόκληρη  η  διαδικασία  προετοιμασίας  ενός  
προγράμματος  για  εκτέλεση

Μετάφραση Σύνδεση Φόρτωση Εκτελέσιμο    


Πηγαίο Πρόγραμμα Πρόγραμμα
Υπομονάδα
Πρόγραμμα αντικείμενο φόρτωσης

50
Αντικειμενοστρεφής προγραμματισμός
● Αντικείμενο (object): αυτόνομη  προγραμματιστική   μονάδα   που  περιέχει  
δεδομένα  και  διαδικασίες
● Στις  γλώσσες  αντικειμενοστρεφούς προγραμματισμού (C++,  Java)  το  σημαντικό  
είναι  η  σωστή  περιγραφή  των  αντικειμένων
● Κλάση (class):   ένα   πρότυπο   για   όλα  τα   αντικείμενα   του   ίδιου  τύπου
● Ένα   αντικείμενο   ονομάζεται  στιγμιότυπο (instance) της   κλάσης.  

● Ορισμός  αντικειμένων   στην  C++:


Java:   51
Στοιχεία  ενός  αντικειμένου
● Μεταβλητή   στιγμιότυπου (instance  variable)  είναι  μία  μεταβλητή  που  
βρίσκεται  στο  εσωτερικό  ενός  αντικειμένου.
● Π.χ.  RemainingPower
● Μέθοδος (method)  είναι  μία  διαδικασία  στο  εσωτερικό  ενός  αντικειμένου.
– Μπορεί  να  χειριστεί  τις  μεταβλητές  στιγμιότυπου  ενός  αντικειμένου.
– Π.χ.  turnRight(),   turnLeft(),   fire()

●Η  κληρονομικότητα (inheritance)  
επιτρέπει  σε  μία  κλάση  να  περιλαμβάνει  
ιδιότητες  κάποιας  προηγούμενα  
ορισμένης  κλάσης

52
Μέθοδος  Κατασκευής
• Μέθοδος  κατασκευής (constructor):  ειδική  μέθοδος  που  
εκτελείται  αυτόματα  κατά  τη  δημιουργία  ενός  αντικειμένου  από  
την  κλάση.
– Ίδιο  όνομα  με  το  αντικείμενο
– Βοηθά  στην  διαφορετική  αρχικοποίηση  ή  ανάθεση  διαφορετικών  
παραμέτρων  σε  αντικείμενα  
της  ίδιας  κλάσης

53
Ενθυλάκωση
● Ενθυλάκωση (encapsulation):  ένας  τρόπος  περιορισμού  της  πρόσβασης  στις  
εσωτερικές  ιδιότητες  ενός  αντικειμένου.  
● Μόνο  το  ίδιο  το  αντικείμενο  μπορεί  να  έχει  πρόσβαση  και  να  αλλάξει  τις  
ιδιότητες.
● Μπορεί  να  είναι:
● Ιδιωτική  
● Δημόσια.

54
Δηλωτικός  προγραμματισμός  
(Declarative  Programming)
● Επίλυση (resolution): ο  συνδυασμός   δύο   ή  περισσοτέρων  
προτάσεων   για  την   παραγωγή  μίας  νέας  πρότασης  (που  
είναι  αληθής  αν   οι   αρχικές  προτάσεις   είναι  αληθείς)
– Παράδειγμα:  (P  OR Q)   AND (R   OR ¬Q)   δίνει  ως   αποτέλεσμα   (-­‐>)   την (P  
OR R)
– Σημαίνει  ότι   αν  η   αρχική  πρόταση   είναι  αληθής,  τότε   και   το  
αποτέλεσμα (η   2η πρόταση)   είναι  αληθής
– Αν   Q   αληθής,  τότε   R   πρέπει   να   είναι  αληθής.  Αν   Q   ψευδής,  τότε   η   P  
πρέπει   να   είναι  αληθής.  Άρα   P  OR R   είναι  αληθής,  ανεξάρτητα   του   τι  
είναι  το  Q
– Επιλυθέν (resolvent)   ονομάζεται  η   νέα   πρόταση   που   σχηματίζεται  
από   την  επίλυση.
– Μορφή   όρων (clause   form)   έχουμε  σε   μία  πρόταση   των   οποίων  τα  
θεμελιώδη  στοιχεία  συνδέονται   με  τη   λογική  πράξη  ΟR. 55
Παράδειγμα:  Επίλυση  των  προτάσεων  (P OR  Q)  και  (R
OR  ¬Q)  ώστε  να  παραχθεί  η (P OR  R)
Α Β

Αν  Συνθήκη  Α  αληθής  
ΚΑΙ συνθήκη  Β   αληθής
Τότε   και  Συνθήκη  Γ   αληθής

56
Παράδειγμα  2:  Επίλυση  των  προτάσεων  (P OR  Q),  
(R OR  ¬Q),  ¬R,   και ¬P

Ένα  σύνολο  από  προτάσεις  λέγεται


ασυνεπές  (inconsistent) αν  είναι  αδύνατο
όλες  να  είναι  αληθείς  την  ίδια   στιγμή

Επαναληπτική  επίλυση  για   να  βρεθεί  αν


το   σύνολο  προτάσεων  είναι  ασυνεπές  ή   όχι

57
(Πολύ  Σύντομη)  Εισαγωγή  στην   Prolog
● Κατηγόρημα  (predicate):  βασικό  δομικό  συστατικό  της  γλώσσας
● Όλες  οι  προτάσεις  είναι  είτε  γεγονότα  είτε  κανόνες.
● Γεγονός  (Fact):  όνομα Κατηγορήματος(όρισμα,   όρισμα,  ..)
– Παράδειγμα:  parent(  bill,  mary)
– faster(rabbit,   turtle)  (μια  συγκεκριμένη  εκδοχή)
● Κανόνας  (Rule):  συμπέρασμα :-­‐ πρόταση
– :-­‐ σημαίνει  αν
– Παράδειγμα:  wise(X)   :-­‐ old(X).
– Παράδειγμα:  (μια  γενική  ιδιότητα)
faster(X,   Z)  :-­‐ faster(X,  Y),  faster(Y,   Z)  σημαίνει

• Ο  προγραμματιστής  καθορίζει  τα  γεγονότα  και  τους  κανόνες


58
6 η Εργασία
• Αναφέρετε   εφαρμογές  της  javascript και  της  
php
• Γράψτε  ένα πολύ  απλό  πρόγραμμα  (π.χ.  5  
γραμμές κώδικα)  σε  javascript και  ένα   σε  php
και  αναφέρετε  τι  κάνει
• Τι  παραπάνω  έχει   η  C#  σε  σχέση  με  την  C;

59

You might also like