ASPA JFlex JavaCC Antlr ActiveX... 13

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "ASPA JFlex JavaCC Antlr ActiveX... 13"

Transcript

1 ASPA Ανακρέων Μεντής 15 Σεπτεµβρίου 2004 Περιεχόµενα 1 Εισαγωγή 4 2 Ερευνα Γλώσσα Προγραµµατισµού Αναλυτές JFlex JavaCC Antlr Αναπαράσταση δέντρων Χειρισµός XML αρχείων Ελεγχος Εγκυρότητας Εργαλεία Αυτοµατοποίησης (build tools) Σχεδιασµός Είσοδος προγράµµατος Λεκτική Ανάλυση Συντακτική Ανάλυση Μετάφραση Τελεστές Συναρτήσεις και κλάσεις του χρήστη ActiveX Κανόνες ορατότητας Παραγωγή κώδικα Σχηµατική αναπαράσταση της µετάφρασης Υλοποίηση Λεκτικοί Αναλυτές Λεκτικός αναλυτής της HTML

2 4.1.2 Κοινά στοιχεία λεκτικών αναλυτών της JavaScript και VbScript JavaScript VbScript Σύνθεση ϱοής token AspStreamSelector Συντακτικοί Αναλυτές Συντακτικός αναλυτής της JavaScript Συντακτικός αναλυτής της VbScript οµή αρχείων XML Μοντελοποίηση Κλάσεων Κατασκευή αναπαραστάσεων των κλάσεων από XML Μεταφραστές Συντακτικές µετατροπές της JavaScript Συντακτικές µετατροπές της VbScript Παραγωγή κώδικα Ελεγχος Εγκυρότητας 52 6 Εγχειρίδιο Χρήσης 55 7 Περαιτέρω Ανάπτυξη Προς υλοποίηση Πιθανές χρήσεις τµηµάτων του ASPA Συµπεράσµατα 58 9 Ευχαριστίες 58 Α ικτυακοί Τόποι 59 2

3 Περίληψη Το έργο που επιτελεί το ASPA είναι η µετάφραση σελίδων που χρησιµοποιούν την ASP σε ισοδύναµες λειτουργικά σελίδες PHP. Στόχος του ASPA είναι η διευκόλυνση της µετάβασης διαδικτυακών εφαρµογών υλοποιηµένων σε ASP στην ανοιχτού λογισµικού γλώσσα PHP. Η ASP υποστηρίζει πολλές γλώσσες προγραµµατισµού, από τις οποίες το ASPA ερµηνεύει µόνο κώδικα γραµµένο σε Java Script ή VB Script, µετατρέποντάς τον σε PHP. Η PHP εκτελείται σε πληθώρα υπολογιστικών πλατφορµών και λειτουργικών συστηµάτων, δίνοντας περισσότερες επιλογές για το περιβάλλον ανάπτυξης και εκτέλεσης της εφαρµογής. Η PHP, που είναι ταχύτερη από την ASP, αναπτύσσεται και ϐελτιώνεται ϱαγδαία, απαιτεί λιγότερους πόρους και επιπλέον διαθέτει µεγάλο πλήθος ϐιβλιοθηκών, που αυξάνουν την παραγωγικότητα του προγραµµατιστή. 3

4 1 Εισαγωγή Την τελευταία δεκαετία, η ευρεία εξάπλωση του Internet γέννησε την ανάγκη ανάπτυξης ιστοσελίδων που ϑα παρείχαν δυναµικό περιεχόµενο. Για την επίτευξη του στόχου αυτού προτάθηκε το πρότυπο CGI. Το CGI ορίζει τον τρόπο αλληλεπίδρασης ενός προγράµµατος µε τον εξυπηρετητή του πρωτοκόλλου HTTP (HTTP Server). Το CGI πρόγραµµα µπορεί να υλοποιηθεί σε οποιαδήποτε γλώσσα γνωστή στο σύστηµα όπου ϐρίσκετε ο HTTP Server. Υπάρχει η δυνατότητα υλοποίησης CGI προγραµµάτων σε C/C++ Fortran PERL TCL κέλυφος Unix Python και άλλα Η κάθε γλώσσα από τις παραπάνω και όσες άλλες δεν αναφέραµε χάριν συντοµίας, προσφέρουν πλεονεκτήµατα σε κάποια σηµεία και µειονεκτούν σε άλλα. Ωστόσο υπάρχουν µειονεκτήµατα που απορρέουν από την άµεση χρήση του CGI ανεξάρτητα από την γλώσσα υλοποίησης του προγράµµατος. Το CGI πρόγραµµα ενεργοποιείται από εξωτερικές αιτήσεις προς το σύστηµα. Το ϕαινόµενο είναι ανάλογο µε ένα πρόγραµµα που ο καθένας στον κόσµο µπορεί να το εκτελέσει οποτεδήποτε. Καθίσταται ϕανερό πως πρόκειται για τον εφιάλτη του διαχειριστή συστήµατος. Για να αποφευχθούν δυσάρεστες καταστάσεις, το CGI πρόγραµµα οφείλει να είναι εξαιρετικά ασφαλές. Η ανάπτυξη προγραµµάτων που εκτός από εύρυθµη λειτουργία, επιτυγχάνουν υψηλά επίπεδα ασφάλειας, απαιτεί πολύ χρόνο για την υλοποίηση και εξφαλµάτωση, και µεγάλη εµπειρία. Συνήθως, ο χρόνος ενός έµπειρου προγραµµατιστή κοστίζει πολύ. Αντίθετα, η ASP και PHP παρέχουν ασφαλέστερο περιβάλλον εκτέλεσης για τις σελίδες. Το πρόβληµα της ασφάλειας δεν έχει αντιµετωπιστεί πλήρως, αλλά ο προγραµµατιστής χρειάζεται να µεριµνά για λιγότερα πιθανά σενάρια άλωσης του συστήµατος. 4

5 Καµία από τις γλώσσες δεν έχει σχεδιαστεί για να αντιµετωπίσει προ- ϐλήµατα ιδιαίτερα στο CGI. Είναι γλώσσες γενικής χρήσης. Συχνά το κείµενο που παράγεται από το CGI περιέχει δυναµικά και στατικά µέ- ϱη. Τα στατικά τµήµατα του κειµένου υπάρχουν ως αλφαριθµητικά στον κώδικα του προγράµµατος. Στην ASP και PHP τα στατικά µέρη µπορούν να τοποθετηθούν εκτός του κώδικα που παράγει τα δυναµικά κοµµάτια, µε αποτέλεσµα ο κώδικας να είναι πιο ευανάγνωστος. εδοµένα που στάλθηκαν στην σελίδα µε τις µεθόδους GET και PO- ST είναι προσβάσιµα στο CGI µέσω µεταβλητών περιβάλλοντος (environment variable) και της προκαθορισµένης εισόδου (standard input) αντίστοιχα. Για την απόκτηση της πληροφορίας που υπάρχει σε αυτά τα δεδοµένα, απαιτείται η συγγραφή ϱουτινών στην γλώσσα του CGI προγράµµατος ή η χρήση επιπλέον ϐιβλιοθηκών. Τόσο η ASP όσο και η PHP προσφέρουν τις παραπάνω πληροφορίες στον προγραµµατιστή, χωρίς επιπλέον κόπο. Πρέπει να τονίσουµε πως η χρήση µεταβλητών περιβάλλοντος για τα δεδοµένα απεσταλµένα µε την µέθοδο GET πα- ϱουσιάζει το ενδεχόµενο κορεσµού των ενταµιευτών (buffer overflow) µε πιθανές σοβαρές συνέπειες για την ασφάλεια. Λόγω των όσων αναφέραµε, η ανάπτυξη εφαρµογών Internet µε άµεση χρήση του CGI αποδεικνύεται δύσκολη, χρονοβόρα και ενίοτε επικίνδυνη. Για τη διευκόλυνση και την αύξηση της παραγωγικότητας στον παραπάνω τοµέα παρουσιάστηκαν νεότερες τεχνολογίες, που ϐασίζονται σε ερµηνευόµενες γλώσσες (Scripting Languages). ύο από αυτές είναι η ASP και η PHP, που είναι αρκετά διαδεδοµένες. Στόχος της παρούσας εφαρµογής είναι η αυτοµατοποίηση της µετατροπής του κώδικα εφαρµογών υλοποιηµένων σε ASP στη γλώσσα ανοιχτού λογισµικού PHP. Επειδή η PHP, είναι, όπως αναφέρθηκε, γλώσσα ανοιχτού λογισµικού, αποκτά πλεονεκτήµατα και µόνο από το γεγονός αυτό. Ο πηγαίος κώδικας της PHP είναι διαθέσιµος, αποκλείοντας την ύπαρξη κρυφών και ανεπιθύµητων χαρακτηριστικών. Η οµάδα των ατόµων ανά την υφήλιο που ασχολούνται µε την ανάπτυξη και ϐελτίωση της PHP είναι πολυπληθής, γεγονός που συντελεί στον άµεσο εντοπισµό λαθών και στη γρήγορη διόρθωσή τους. Επιπλέον, το µέλλον της PHP δεν καθορίζεται από κάποια εταιρία, µε αποτέλεσµα η πορεία της να είναι ανεξάρτητη από εκείνη της εταιρίας. Από µετρήσεις που έχουν πραγµατοποιηθεί, έχει διαπιστωθεί πως η PHP εκτελείται ταχύτερα, απαιτώντας συνάµα λιγότερους πόρους. Επιπρόσθετα, το µεγάλο πλήθος ϐιβλιοθηκών διαθέσιµων στην PHP αυξάνουν την παραγωγικότητα του προγραµµατιστή. Βιβλιοθήκες ϐέβαια είναι διαθέσιµες και στην ASP, σε µορφή ActiveX, όµως οι ϐιβλιοθήκες της PHP είναι στην πλειοψηφία τους προϊόντα ανοιχτού λογισµικού και προσφέρονται δωρεάν. 5

6 Για τους παραπάνω λόγους, η επιλογή της PHP στην ανάπτυξη web εφαρ- µογών είναι προτιµητέα. Επειδή η ASP είναι αρκετά διαδεδοµένη στον τοµέα της ανάπτυξης web εφαρµογών, όσοι την υιοθέτησαν και αποφασίζουν να µεταβούν σε PHP, καλούνται να µεταφράσουν τις εφαρµογές τους. Η παραπάνω διαδικασία είναι χρονοβόρα και επιρρεπής σε λάθη, γι αυτό το κόστος της µετάβασης, ανάλογα µε το µέγεθος της εφαρµογής, είναι ιδιαίτερα υψηλό. Αυτό αποτελεί ανασταλτικό παράγοντα στην υιοθέτηση της PHP, παρ όλα τα σηµαντικά της πλεονεκτήµατα. Το ASPA αυτοµατοποιεί τη διαδικασία µετάφρασης της εφαρµογής, µειώνοντας κατά πολύ τον απαιτούµενο για τη µετάφραση χρόνο, ενώ συνάµα αποφεύγονται τα λάθη. ίνει λοιπόν τη δυνατότητα να διαπιστώσει κάποιος έµπρακτα τα πλεονεκτήµατα της PHP. Αναµένεται πως η διευκόλυνση που παρέχει η εφαρµογή στη µετάφραση, ϑα άρει τον ανασταλτικό παράγοντα του κόστους, µε αποτέλεσµα την ευρύτερη χρήση της PHP. Αυτό µε τη σειρά του ϑα επιφέρει την ενίσχυση του κινήµατος του ανοιχτού λογισµικού. 2 Ερευνα Η αναγκαιότητα ύπαρξης µεταφραστή από ASP σε PHP έχει αναγνωριστεί και από άλλους µηχανικούς λογισµικού. Υπάρχουν τουλάχιστον δυο άλλες προσπάθειες κατασκευής ενός µεταφραστή. Ο δηµοφιλέστερος µεταφραστής είναι ο asp2php 59. Το πρόγραµµα είναι ανοιχτού λογισµικού και διανέµετε υπό την άδεια GPL. Το asp2php υποστη- ϱίζει µόνο την VbScript ενώ η υποστήριξη JavaScript ϐρίσκετε στα πρώτα της ϐήµατα. Η στρατηγική µετάφρασης που ακολουθεί το asp2php περιορίζει σηµαντικά την αποτελεσµατικότητά του. Η έλλειψη υποστήριξης της JavaScript αποκλείει την αξιοποίηση του προγράµµατος για µετάφραση σελίδων που κάνουν χρήση της παραπάνω γλώσσας. Επιπλέον, το asp2php υποστηρίζει λίγα µόνα ActiveX. Εάν µία σελίδα αναφέρετε σε ιδιότητες ή µεθόδους ενός ActiveX που δεν υποστηρίζει το asp2php τότε η µοναδική επιλογή που αποµένει είναι η συγγραφή µεθόδων σε C και η επαναµεταγλώττιση του προγράµµατος. Το πρόγραµµα δεν επιχει- ϱεί να κατανοήσει τον κώδικα της σελίδας αλλά αντικαθιστά γνωστές µορφές και δοµές κώδικα µε προκαθορισµένες αντίστοιχες δοµές της PHP. Η τεχνική αυτή αποδεικνύεται στην πράξη ανεπαρκής. Ο δεύτερος µεταφραστής 59 είναι υλοποιηµένος σε JavaScript και εκτελείται µέσα στο περιβάλλον που παρέχει ένας ϕυλλοµετρητής (Browser).Το πρόγραµµα χρησιµοποιεί κανονικές εκφράσεις για να αντικαταστήσει τα ονό- µατα των µεταβλητών µε ονόµατα συµβατά µε την PHP. Ουσιαστικά δεν πρόκειται για µεταφραστή αφού το µόνο που κάνει είναι η τυφλή αντικατάσταση 6

7 ορισµένων χαρακτήρων από άλλους. Η εξέταση των δυο διαθέσιµων προγραµµάτων, συνηγορεί υπέρ της άποψης πως δεν έχει δοθεί ακόµη µία ικανοποιητική λύση στο πρόβληµα του αυτοµατισµού της µετάφρασης της ASP σε PHP. Το ASPA επιχειρεί να δώσει µια ικανοποιητικότερη λύση στο πρόβληµα. Ο παράγοντας που συνέβαλε καθοριστικά στην µικρή επιτυχία των παραπάνω προγραµµάτων είναι η προσέγγιση που ακολούθησαν για την επίλυση του προβλήµατος της µετάφρασης. Επρεπε να ϐρεθεί µία στρατηγική η οποία αποδεδειγµένα έχει πετύχει σε παρόµοια προβλήµατα και εργαλεία που ϑα έκαναν το εγχείρηµα ευκολότερο στην υλοποίηση του. Η δική µας προσέγγιση έπρεπε να παρέχει την δυνατότητα κατανόησης του κώδικα της ASP σελίδας ώστε να είναι εφικτή η αντικατάσταση εκφράσεων της ASP µε ισοδύναµες εκφράσεις της PHP. Επιπλέον, η αρχιτεκτονική του προγράµµατος έπρεπε να είναι ανοιχτή ώστε να διευκολύνεται η περαιτέρω ανάπτυξη και επέκταση των δυνατοτήτων του. Τέλος, επειδή η ASP ϐασίζετε στην χρήση ActiveX ϐιβλιοθηκών ϑα ήταν ϑεµιτό η απαραίτητη γνώση για την µετάφραση των µεθόδων και ιδιοτήτων των ActiveX να µην είναι ενσωµατωµένη στο πρόγραµµα, αλλά να παρέχεται κατά την εκτέλεση του προγράµµατος. Η παραπάνω δυνατότητα ϑα εξασφάλιζε την εύκολη επέκταση των δυνατοτήτων του προγράµµατος, χωρίς να απαιτείται αλλαγή του πηγαίου κώδικα και κατανόηση των εσωτερικών δοµών του. Η αναζήτηση εργαλείων και τεχνολογιών που ϑα ικανοποιούσαν τις παραπάνω απαιτήσεις απέδωσε. Το ASPA σχεδιάστηκε µε πρότυπο την µεθοδολογία ανάπτυξης µεταγλωττιστών, µία τεχνολογία δοκιµασµένη στην πράξη για πολλές δεκαετίες και µε πλούσια τεχνογνωσία. 2.1 Γλώσσα Προγραµµατισµού Η γλώσσα προγραµµατισµού είναι η Java. Η Java επιλέχτηκε για τους πα- ϱακάτω λόγους : Είναι αντικειµενοστραφής γλώσσα. Το πρόγραµµα αποτελείται από µία συλλογή αντικειµένων που αλληλεπιδρούν και συνεργάζονται για την παραγωγή του τελικού αποτελέσµατος. Κάθε αντικείµενο αναλαµβάνει να ϕέρει εις πέρας την επίλυση ενός καλώς καθορισµένου υποπρο- ϐλήµατος. Ο σχεδιασµός του προγράµµατος εν γένει είναι ευκολότερα κατανοητός. Η σωστή λειτουργία κάθε αντικειµένου µπορεί να ελεγχθεί ανεξάρτητα από τα υπόλοιπα αντικείµενα, µε αποτέλεσµα ο έλεγχος της αξιόπιστης λειτουργίας του προγράµµατος να καθίσταται εφικτός και σχετικά εύκολος. 7

8 Τα προγράµµατα υλοποιηµένα σε Java εκτελούνται σε µια νοητή µηχανή (virtual machine), µε αποτέλεσµα την αποφυγή επικίνδυνων λαθών τα οποία προέρχονται από εσφαλµένες υποθέσεις για την δοµή της µηχανής και υπηρεσιών που προσφέρει το λειτουργικό σύστηµα. Τα προγράµµατα γραµµένα σε Java εκτελούνται σε πολλά λειτουργικά συστήµατα χωρίς να απαιτείται επαναµεταγλώττιση, οπότε δεν αποτρέπεται η χρήση του ASPA λόγω διαφορετικού λειτουργικού συστήµατος. 2.2 Αναλυτές Για τη συγγραφή του λεκτικού αναλυτή εξετάστηκαν τα εργαλεία JFlex, JavaCC και Antlr. Το καθένα από αυτά χρησιµοποιεί µια γλώσσα µε τη ϐοήθεια της οποίας δηµιουργείται ο λεκτικός αναλυτής. Σε αντιδιαστολή µε τη Java, οι γλώσσες των παραπάνω εργαλείων σχεδιάστηκαν µε σκοπό την εύκολη πε- ϱιγραφή λεκτικών αναλυτών, µε αποτέλεσµα την ταχύτερη και ευκολότερη ανάπτυξη του λεκτικού αναλυτή JFlex Η οµοιότητα της σύνταξης της γλώσσας του JFlex µε εκείνη του flex, ενός καθιερωµένου εργαλείου για την παραγωγή λεκτικών αναλυτών, αποτελεί σηµαντικό πλεονέκτηµα, διότι δεν ϑα ήταν αναγκαία η εκµάθηση κάποιας νέας σύνταξης άλλου εργαλείου. Επιπλέον, το JFlex έχει πλήρη υποστήριξη Unicode και παράγει γρήγορους αναλυτές. Παρ όλα τα πλεονεκτήµατά του, το JFlex απορρίφθηκε, διότι δεν κατασκευάζει συντακτικούς αναλυτές, µε αποτέλεσµα να απαιτείται η χρήση και άλλων εργαλείων JavaCC Σε αντίθεση µε το JFlex, το JavaCC παρέχει τη δυνατότητα παραγωγής λεκτικών, αλλά και συντακτικών αναλυτών. Επιπλέον, µε τη ϐοήθεια επιπρόσθετων εργαλείων, διευκολύνει στο έργο κατασκευής AST δέντρων. Υποστηρίζει πλήρως το Unicode και έχει σύνταξη όµοια µε το EBNF, που είναι ευρέως γνωστή στην τεχνολογία ανάπτυξης µεταγλωττιστών. Οµως απορρίφθηκε, διότι όταν ξεκίνησε η ανάπτυξη του ASPA το JavaCC δεν ήταν εφαρµογή ανοιχτού λογισµικού. Εκτός από αυτό, το JavaCC δεν προσφέρει εργαλεία για την κατασκευή αναλυτών δέντρων AST. 8

9 2.2.3 Antlr Τελικά, αυτό που επιλέχθηκε είναι το Antlr, λόγω των πλεονεκτηµάτων που συγκεντρώνει. Κατ αρχήν, το Antlr στηρίζει όλα τα στάδια ανάπτυξης των αναλυτών που χρησιµοποιεί το ASPA. Κατασκευάζει λεκτικούς και συντακτικούς αναλυτές, καθώς και αναλυτές δέντρων. Είναι επίσης πρόγραµµα ανοιχτού λογισµικού, το οποίο στηρίζεται από µια µεγάλη κοινότητα χρηστών, που υπήρξε πρόθυµη να απαντήσει σε ερωτήσεις που προέκυπταν κατά την ανάπτυξη του ASPA. Ενα µειονέκτηµα που παρουσιάζει το Antlr είναι το γεγονός πως οι λεκτικοί αναλυτές που παράγει υπολείπονται σε ταχύτητα αυτών που παράγουν τα προαναφερθέντα εργαλεία. Το πρόβληµα αναµένεται να επιλυθεί στην επόµενη έκδοση του Antlr. 2.3 Αναπαράσταση δέντρων Για την περιγραφή των ActiveX ϐιβλιοθηκών, επιλέχθηκε η γλώσσα XML. Τα ActiveX αντικείµενα περιέχουν µεθόδους και ιδιότητες, στην κάθε µια εκ των οποίων αντιστοιχούµε ένα υποδέντρο AST. Αναζητήσαµε ένα τρόπο αποθήκευσης και απεικόνισης της παραπάνω αντιστοιχίας. Η ιδανική απάντηση σε αυτή την απαίτηση ϐρέθηκε στη γλώσσα XML, λόγω της οµοιότητας που παρουσιάζει µε το AST, όσον αφορά τη δενδρική τους δοµή. Επιπρόσθετα, η ευρεία διάδοση της XML εξασφαλίζει την άµεση κατανόηση της περιγραφής των ActiveX και εποµένως την εύκολη τροποποίηση του XML εγγράφου. Τέλος, υπάρχουν έτοιµες ϐιβλιοθήκες που αναλαµβάνουν την αποκωδικοποίηση των XML εγγράφων, οπότε δε χρειάστηκε η ανάπτυξή τους εκ µέρους µας. 2.4 Χειρισµός XML αρχείων Αναζητήσαµε ϐιβλιοθήκες σε Java που µετατρέπουν τα XML αρχεία σε δο- µές δεδοµένων εύκολων στον χειρισµό τους. Από το W3C έχουν οριστεί δύο τρόποι επεξεργασίας XML αρχείων, το DOM και το SAX. Ηταν ϑεµιτό να απο- ϕευχθεί η χρήση ϐιβλιοθηκών που ϐασίζονται στην απευθείας αξιοποίηση των παραπάνω ορισµών, καθώς υπάρχουν ϐιβλιοθήκες που παρέχουν δοµές δεδοµένων ευκολότερες για των χειρισµό της πληροφορίας που αποθηκεύεται στα XML έγγραφα. Εξετάστηκαν οι ϐιβλιοθήκες JDOM και dom4j που λαµ- ϐάνουν υπόψιν ιδιαίτερες ανάγκες της Java και είναι ανοιχτού λογισµικού. Τελικά επιλέχθηκε το dom4j διότι καταναλώνει λιγότερη µνήµη και υποστη- ϱίζει και τα δύο µοντέλο επεξεργασίας που προτείνει το W3C. 9

10 2.5 Ελεγχος Εγκυρότητας Κατά τη διάρκεια ανάπτυξης του ASPA κάθε τροποποίηση ενείχε τον κίνδυνο πρόκλησης δυσλειτουργίας σε ένα από τα τµήµατά του. Ηταν λοιπόν απαραίτητο να ϐρεθεί µια µέθοδος που ϑα αυτοµατοποιούσε τον έλεγχο της άρτιας λειτουργίας του προγράµµατος. Για τον παραπάνω έλεγχο χρησιµοποιήθηκε το JUnit, µια ϐιβλιοθήκη η οποία παρέχει το περιβάλλον για την υλοποίηση των ελέγχων. Το JUnit, ανοιχτού λογισµικού, είναι ένα από τα αρχικά περιβάλλοντα που παρείχαν υπηρεσίες ελέγχου εγκυρότητας για τη Java. 2.6 Εργαλεία Αυτοµατοποίησης (build tools) Το Ant είναι ένα εργαλείο που αυτοµατοποιεί συχνά εκτελούµενες διαδικασίες, όπως τη µεταγλώττιση του πηγαίου κώδικα, την κατασκευή jar αρχείων, την εκτέλεση του ελέγχου εγκυρότητας κ. α. Εναλλακτικό εργαλείο για την εκτέλεση των παραπάνω εργασιών είναι το make σε Unix συστήµατα. Το πλεονέκτηµα του Ant έγκειται στο ότι χρησιµοποιεί ένα XML αρχείο για την περιγραφή των εργασιών και είναι υλοποιηµένο σε Java, µε αποτέλεσµα οι εργασίες να µπορούν να εκτελεστούν και σε άλλα λειτουργικά συστήµατα. Επιπλέον, το Ant συνεργάζεται άµεσα µε τα υπόλοιπα εργαλεία που αξιοποιεί το ASPA. 3 Σχεδιασµός Το ASPA αξιοποιεί την εµπειρία που έχει αποκοµισθεί στον τοµέα της ανάπτυξης µεταγλωττιστών και χρησιµοποιεί µεθοδολογίες που έχουν εφαρµοστεί µε επιτυχία στο παρελθόν. Με ϐάση τις τεχνολογίες αυτές, η ανάλυση του κώδικα πραγµατοποιείται σε ξεχωριστά επίπεδα. Κάθε επίπεδο ανάλυσης ϕέρει εις πέρας µια συγκεκριµένη εργασία και είναι ανεξάρτητο από τα υπόλοιπα. Αυτό το µοντέλο επεξεργασίας διασφαλίζει την ταχύτερη ανάπτυξη του µεταγλωττιστή και διευκολύνει τη διαδικασία διόρθωσης προγραµµατιστικών λαθών και τη µελλοντική επέκταση της εφαρµογής. Το µοντέλο ανάπτυξης µεταγλωττιστών υπαγορεύει τέσσερα ϐασικά επίπεδα ανάλυσης : Λεκτική Ανάλυση. Σε αυτό το στάδιο ο πηγαίος κώδικας µετατρέπεται σε µια σειρά από απλές δοµές δεδοµένων, που στη διεθνή ϐιβλιογραφία αποκαλούνται tokens. Η λεκτική ανάλυση ϑα εξασφαλίσει ότι ο πηγαίος κώδικας περιέχει λέξεις έγκυρες για τη γλώσσα του µεταγλωττιστή. Συντακτική Ανάλυση. Στο επίπεδο της συντακτικής ανάλυσης ελέγχεται αν η σειρά των tokens που παρήχθησαν στο προηγούµενο στάδιο είναι 10

11 συντακτικά ορθή. Παράγωγο αυτής της διαδικασίας είναι ένα δέντρο, το οποίο αντανακλά τις συντακτικές δοµές του πηγαίου κώδικα. Μετάφραση. Στο τρίτο στάδιο ανάλυσης γίνεται η µετατροπή του πα- ϱαπάνω δέντρου σε ένα δεύτερο, που υπακούει στη σύνταξη της προς µετατροπή γλώσσας, στην προκειµένη περίπτωση της PHP. Επιπλέον, κατά τη µετατροπή συντελούνται ϐελτιώσεις του κώδικα. Παραγωγή Κώδικα. Στο τέταρτο επίπεδο, το τελικό δέντρο µετατρέπεται σε πηγαίο κώδικα της PHP. Το τελευταίο αυτό στάδιο εξασφαλίζει την εγκυρότητα των ονοµάτων των µεταβλητών, µετονοµάζοντας όσες παρα- ϐιάζουν κανόνες ονοµατοδοσίας της PHP. 3.1 Είσοδος προγράµµατος Η εφαρµογή δέχεται ως είσοδο αρχεία ASP. Κάθε σελίδα ASP περιέχει : Τον καθορισµό της γλώσσας του κώδικα. Η πρώτη εντολή της ASP ορίζει τη γλώσσα του κώδικα που περιέχεται στη σελίδα. Για παράδειγµα, η εντολή <%@Language="VbScript"%> ορίζει ως γλώσσα τη VbScript. Αν παραλείπεται ο καθορισµός της γλώσσας της σελίδας, τότε υπονοείται η προκαθορισµένη γλώσσα. Εντολές που εισάγουν κώδικα από άλλα αρχεία. Για παράδειγµα η εντολή <! #include file="file1.asp" > εισάγει το περιεχόµενο του αρχείου file1.asp Απλό κείµενο(συνήθως είναι κώδικας HTML) Κώδικας σε κάποια ερµηνευόµενη γλώσσα όπως - Java Script - VB Script - Perl - Python - και άλλα Το πρόγραµµα ερµηνεύει µόνο κώδικα γραµµένο σε Java Script ή VB Script 11

12 3.2 Λεκτική Ανάλυση Λεκτική ανάλυση είναι η διαδικασία αναγνώρισης τµηµάτων του κειµένου εισόδου ως λέξεις της γλώσσας προγραµµατισµού. Παράγωγα αυτής της διαδικασίας είναι τα tokens. Υπάρχουν διάφοροι τύποι token, όπως µεταβλητές, λέξεις κλειδιά, τελεστές κ. α. Ουσιαστικά είναι δοµές δεδοµένων που περιέχουν τις παρακάτω πληροφορίες : Εναν κωδικό αριθµό που καθορίζει τον τύπο του. Το κείµενο που αντιστοιχεί στο token Τη γραµµή και στήλη όπου ϐρέθηκε Αν κάποιο τµήµα του κειµένου δεν αποτελεί λέξη της γλώσσας τότε δεν αναγνωρίζεται, δεν σχηµατίζει token και η διαδικασία τερµατίζεται. 3.3 Συντακτική Ανάλυση Κατά τη συντακτική ανάλυση, η σειρά από tokens που παρήχθησαν ελέγχεται για τη συντακτική της ορθότητα. Τη διαδικασία αυτή υλοποιεί ο Συντακτικός Αναλυτής (Parser). Αν ο Συντακτικός Αναλυτής διαπιστώσει παραβίαση των συντακτικών κανόνων στη σειρά των tokens ενηµερώνει το χρήστη για το σφάλµα και τερµατίζει τη διαδικασία. Από τη συντακτική ανάλυση προκύπτουν δύο παράγωγα. Το πρώτο είναι µια δενδροειδής απεικόνιση του κώδικα. Η δενδροειδής δοµή αποκαλείται στη διεθνή ϐιβλιογραφία Abstract Syntax Tree (AST). Κάθε κόµβος του δένδρου περιέχει ένα token. Το δέντρο δεν αποτελεί αντιγραφή του αρχικού συνόλου των tokens διότι ορισµένοι κόµβοι ϕέρουν token το οποίο δεν προήλθε από το πηγαίο κώδικα, ενώ ορισµένα από τα αρχικά tokens αποβάλλονται διότι η πληροφορία που περιέχουν αντανακλάται στη δοµή του δέντρου. Το δεύτερο παράγωγο της συντακτικής ανάλυσης είναι πληροφορίες σχετικές µε τύπους µεταβλητών, κλάσεις και µεθόδους. Οι πληροφορίες αυτές ϑα χρησιµοποιηθούν στο επόµενο στάδιο ανάλυσης. 3.4 Μετάφραση Στο στάδιο της µετάφρασης κάθε συντακτική δοµή της JavaScript και VBScript µετατρέπεται στην αντίστοιχη δοµή της PHP. ιακρίνουµε τρεις συντακτικές δοµές προς µετάφραση, η καθεµιά από τις οποίες έχει διαφορετική αντιµετώπιση : 12

13 Εκφράσεις, τελεστές και εντολές. Συναρτήσεις και κλάσεις που ορίζονται στον κώδικα της σελίδας από το χρήστη. Συναρτήσεις και κλάσεις τις οποίες παρέχουν οι επιµέρους γλώσσες της ASP (VBScript, JavaScript), καθώς και µέθοδοι και ιδιότητες που παρέχονται από ActiveX ϐιβλιοθήκες Τελεστές Οσον αφορά τους τελεστές, διακρίνουµε δύο περιπτώσεις : Τελεστές της JavaScript ή VBScript που δεν έχουν αντίστοιχο στην PHP. Στην περίπτωση αυτή, οι τελεστές αντικαθιστώνται από ισοδύναµες εκφράσεις της PHP. Τελεστές που έχουν αντίστοιχο στην PHP, αλλά ο αντίστοιχος τελεστής της PHP διαφέρει ανάλογα µε τα συµφραζόµενα. Για παράδειγµα, ο τελεστής άθροισης της JavaScript άλλοτε αντιστοιχεί στον τελεστή άθροισης της PHP και άλλοτε στον τελεστή συνένωσης αλφαριθµητικών Συναρτήσεις και κλάσεις του χρήστη Οι συναρτήσεις και οι κλάσεις που ορίζονται στον κώδικα της ASP µετατρέπονται σε αντίστοιχες συναρτήσεις και κλάσεις της PHP. Οι συναρτήσεις (functions) υλοποιηµένες σε JavaScript ή VBScript ενδέχεται να µην επιστρέψουν τιµή. Σε αυτή την περίπτωση, µετά τη µετάφραση η αντίστοιχη συνάρτηση ϑα επιστρέψει την τιµή null ActiveX Για τη µετάφραση των κλάσεων, µεθόδων και ιδιοτήτων που παρέχει η ASP ή οι ActiveX ϐιβλιοθήκες χρησιµοποιούνται αρχεία XML, τα οποία ορίζουν τις αντίστοιχες µεθόδους της PHP. Τα XML αρχεία περιγράφουν το σύνολο των παραµέτρων της εκάστοτε µεθόδου και τον τύπο των επιστρεφόµενων τιµών, πληροφορία ουσιώδη για την επιλογή της καταλληλότερης µεθόδου Κανόνες ορατότητας Τέλος πρέπει να τονιστεί πως το ASPA σέβεται τους κανόνες ορατότητας (scope) των µεταβλητών, των µεθόδων και των κλάσεων της JavaScript και VBScript. Κατανοεί δηλαδή πότε µια µεταβλητή, µέθοδος ή κλάση είναι προσπελάσιµη 13

14 σε κάποιο συγκεκριµένο σηµείο του κώδικα. Στην περίπτωση µη έγκυρης προσπέλασης, το ASPA ενηµερώνει το χρήστη για το λάθος. 3.5 Παραγωγή κώδικα Σε αυτό το στάδιο πραγµατοποιείται η παραγωγή του κώδικα από το τελικό δέντρο που κατασκευάστηκε στο προηγούµενο επίπεδο. Λαµβάνοντας υπόψιν πως ο παραγόµενος κώδικας ενδέχεται να υποστεί αλλαγές, ήταν αναγκαίο να είναι ευανάγνωστος. Για το λόγο αυτό το παρόν στάδιο µεριµνά για τη σωστή µορφή και στοίχιση του κώδικα. Τα ονόµατα των µεταβλητών, µεθόδων και κλάσεων δεν αλλάζουν κατά την παραγωγή κώδικα, εκτός και αν παραβιάζεται κανόνας ονοµατοδοσίας της PHP. 3.6 Σχηµατική αναπαράσταση της µετάφρασης <% Response.write "Hello World" %> Lexer Multyplexing Lexer Parser XML <% Response DOT Write Hello World %> SubCall TreeParser DOT ARGLIST_VALUES Code Generator Response Write Hello World print <?php print("hello World");?> ARGLIST_VALUES Hello World 14

15 4 Υλοποίηση 4.1 Λεκτικοί Αναλυτές Το ASPA αξιοποιεί τρεις λεκτικούς αναλυτές για την µετατροπή του πηγαίου κώδικα µιας σελίδας ASP σε tokens. Καθένας από τους λεκτικούς αναλυτές αναλαµβάνει ένα τµήµα του πηγαίου κώδικα, όταν είναι υλοποιηµένο στην γλώσσα που αναγνωρίζει Λεκτικός αναλυτής της HTML Ο λεκτικός αναλυτής µετατρέπει το κείµενο που παρεµβάλλεται µεταξύ δύο τµηµάτων κώδικα σε JavaScript ή VbScript σε tokens. Το είδος του κειµένου γενικά δεν ενδιαφέρει την ASP, εκτός από κάποιες εξαιρέσεις. Κάποιες δοµές στο κείµενο σηµαδεύουν την αρχή του κώδικα. Ο λεκτικός αναλυτής πρέπει να µπορεί να αναγνωρίσει τις δοµές αυτές, ώστε να σταµατήσει την περαιτέρω ανάλυση του κειµένου. Οι δοµές που αναγνωρίζει ο αναλυτής είναι : <% σηµαδεύει την αρχή του κώδικα της ASP. Ο αναλυτής σταµατά την ανάλυση του κειµένου που ακολουθεί. <script language="lang" runat="server"> Ο κώδικας που ακολουθεί είναι στην γλώσσα που καθορίζεται από την τιµή της ιδιότητας language. Εάν η ιδιότητα runat δεν υπάρχει ή δεν έχει την τιµή Server, τότε ότι ακολουθεί ϑεωρείται απλό κείµενο και ο λεκτικός αναλυτής εξακολουθεί την ανάλυση του κειµένου. Πρέπει να επισηµάνουµε πως η παραπάνω δοµή δεν σηµαίνει πως το κείµενο είναι κώδικας HTML. Καθίσταται ϕανερό ωστόσο πως ο αναλυτής πρέπει να κατανοεί κώδικα HTML ώστε να µπορεί να διακρίνει πότε ξεκινά κώδικας της ASP και να σταµατήσει την περαιτέρω ανάλυση του κειµένου. <%@language="lang"%> ορίζει την γλώσσα της σελίδας. απλό κείµενο που µπορεί να είναι HTML, XML ή οτιδήποτε άλλο Κοινά στοιχεία λεκτικών αναλυτών της JavaScript και VbScript Το Antlr προσφέρει έναν εύκολο τρόπο ορισµού λέξεων κλειδιών. υστυχώς ο µηχανισµός αυτός δεν µπορεί να αξιοποιηθεί λόγω της ύπαρξης των ActiveX. Ενα ActiveX µπορεί να έχει µεθόδους ή ιδιότητες µε όνοµα ίδιο µε κάποια λέξη κλειδί της JavaScript ή VbScript. Για παράδειγµα οι εκφράσεις activex.dim και activex.var είναι σωστές εάν υποθέσουµε πως το activex 15

16 αναφέρετε σε κάποιο ActiveX αντικείµενο. Το πρόβληµα είναι πως η λέξη dim έχει ειδική σηµασία για την VbScript ενώ η var για την JavaScript. Εάν αξιοποιούσαµε τον µηχανισµό του Antlr για την αναγνώριση των λέξεων κλειδιών, τότε οι αντίστοιχοι αναλυτές ϑα ερµήνευαν λανθασµένα τις εκφράσεις που αναφέραµε. Το πρόβληµα επιλύεται εάν υιοθετήσουµε την παρακάτω στρατηγική. Οι λέξεις που έπονται της τελείας, ϑεωρούνται πάντα ως ιδιότητες κλάσεων, και δεν εξετάζετε εάν συµπίπτουν µε κάποια δεσµευµένη λέξη της γλώσσας που αναγνωρίζει ο αναλυτής. Οι δεσµευµένες λέξεις αποθηκεύονται σε µία δοµή πίνακα (HashTable) όπου το κλειδί είναι η δεσµευµένη λέξη, και η τιµή που αντιστοιχεί στο κλειδί είναι ένας αριθµός που χαρακτηρίζει το token της δεσµευµένης λέξης. Οταν οι λεκτικοί αναλυτές αναγνωρίσουν µία λέξη που δεν έπεται της τελείας, τότε εξετάζουν εάν η λέξη υπάρχει στον πίνακα των δεσµευµένων λέξεων. Εάν υπάρχει, οι λεκτικοί αναλυτές παράγουν ένα token µε τύπο τον αριθµό που αντιστοιχεί στο κλειδί στον πίνακα, και κείµενο την λέξη που αναγνωρίστηκε. Οι χαρακτήρες που δεν έχουν κάποια αξία για τα επόµενα στάδια ανάλυσης όπως το κενό (space) και tab, απορρίπτονται. Αν και τα σχόλια ορίζονται διαφορετικά σε κάθε γλώσσα, και οι δύο λεκτικοί αναλυτές τα απορρίπτουν µόλις τα αναγνωρίσουν. Θα ήταν ϑεµιτό τα σχόλια να διατηρούνται, αποβάλλονται όµως για να διευκολυνθεί το έργο στα ανώτερα επίπεδα ανάλυσης JavaScript Ο λεκτικός αναλυτής της JavaScript αναγνωρίζει τµήµατα της ASP σελίδας γραµµένα σε JavaScript. Αναγνωρίζει τελεστές, λέξεις κλειδιά, και άλλους χαρακτήρες µε ειδική σηµασία όπως {, ( και άλλους. Σε πολλές γλώσσες υπάρχει ένας ειδικός χαρακτήρας που χρησιµοποιείται για να σηµαδεύεται το σηµείο όπου τελειώνει µια δήλωση (statement). Στην JavaScript υπάρχει επίσης ο χαρακτήρας αυτός, και είναι το. Ωστόσο, είναι επιτρεπτό ο χαρακτήρας να παραλειφθεί και τότε το τέλος της δήλωσης συµπίπτει µε το τέλος της γραµµής. Συνάµα, κενές γραµµές µπορούν να παρεµβάλλονται στο σώµα µίας δήλωσης, αλλά τότε υποχρεωτικά πρέπει να χρησιµοποιηθεί ο ειδικός χαρακτήρας τερµατισµού δήλωσης. Είναι ϕανερό πως ο χαρακτήρας τερµατισµού γραµµής, γενικά πρέπει να αποβάλλεται, αλλά σε ειδικές περιπτώσεις είναι χρήσιµο να διατηρηθεί για τα επόµενα στάδια ανάλυσης. Ο λεκτικός αναλυτής, για να διευκολύνει το έργο τον ανώτερων σταδίων επεξεργασίας, κατασκευάζει το ίδιο τύπο token όταν αναγνωρίσει τον χα- ϱακτήρα τερµατισµού δηλώσεων και τον χαρακτήρα τερµατισµού γραµµής. 16

17 Επιπλέον, για να αποφευχθεί η δηµιουργία token χωρίς συντακτική αξία, οι χαρακτήρες τερµατισµού γραµµής απορρίπτονται, όταν είναι ϐέβαιον πως είναι πλεονάζοντες χαρακτήρες δίχως αξία για την συντακτική ανάλυση. Λόγω της εξαιρετικά µυωπικής γνώσης που έχουν οι λεκτικοί αναλυτές, η αποβολή όλων των πλεοναζόντων κενών γραµµών δεν είναι εφικτή. Ορισµένα token χωρίς συντακτική αξία διατηρούνται, οπότε είναι έργο της συντακτικής ανάλυσης να αποβάλει αυτά τα token VbScript Ο λεκτικός αναλυτής της VBScript, όπως και εκείνος της JavaScript, αναγνωρίζει τελεστές, λέξεις κλειδιά, και άλλους χαρακτήρες µε ειδική σηµασία όπως _, ( και άλλους. Σε αντίθεση µε την JavaScript, στην VBScript το τέλος της γραµµής έχει πάντα συντακτική αξία, και τερµατίζει µία δήλωση. Σε αυτόν τον κανόνα υπάρχει µονάχα µία εξαίρεση. Μία δήλωση µπορεί να συνεχίζεται στην επό- µενη γραµµή εφ όσον ο τελευταίος χαρακτήρας (αγνοώντας τα κενά ή τα tab) είναι το _, οπότε το τέλος γραµµής αποβάλλεται. Μία άλλη σηµαντική διαφορά ανάµεσα στις δύο γλώσσες, είναι το ότι στην JavaScript έχει σηµασία εάν οι λέξης κλειδιά και τα αναγνωριστικά (identifiers) είναι µε πεζά γράµµατα ή µε κεφαλαία, ενώ για την VBScript δεν έχει σηµασία. Για την διευκόλυνση του συντακτικού αναλυτή, ο λεκτικός αναλυτής αναλαµβάνει να παρουσιάσει τα αναγνωριστικά πάντα µε τον ίδιο τρόπο γραφής, σαν να επρόκειτο για γλώσσα όπου υπάρχει η διαφοροποίηση µεταξύ πεζών και κεφαλαίων. Επιπλέον, στην PHP όπως και στην JavaScript, τα αναγνωριστικά διαφοροποιούνται εάν περιέχουν µικρά ή κεφαλαία. Η µεταβλητή myvar είναι διαφορετική από την µεταβλητή myvar. Επιβάλλεται η γραφή των µεταβλητών της VBScript πάντα µε τον ίδιο τρόπο, διότι διαφορετικά η µετάφραση ϑα αποτύγχανε. Ενας τρόπος για να επιτευχθεί ο παραπάνω στόχος ϑα ήταν η µετατροπή των αναγνωριστικών σε λέξεις που περιέχουν µόνο πεζά ή µόνο κεφαλαία γράµµατα. Το πρόβληµα µε την επιλογή των κεφαλών γραµµάτων είναι ότι κατά σύµβαση, συνηθίζεται να γράφονται έτσι οι σταθερές (constants) που περιέχει το πρόγραµµα. Επίσης, από πολλούς ϑεωρείται αντιαισθητικό να γράφονται οι µεταβλητές µε κεφαλαία. Υπάρχει άλλο ένα πρόβληµα κοινό και για τα κεφαλαία και για τα πεζά. Συχνά οι µεταβλητές περιέχουν δύο ή παραπάνω λέξεις στο όνοµά τους, όπου κάθε νέα λέξη διαφοροποιείται από την προηγούµενη έχοντας το πρώτο της γράµµα κεφαλαίο (για παράδειγµα myid). Αν αλλάζαµε το όνοµα της µεταβλητής σε myid ή MYID, τότε οι λέξεις δεν ξεχωρίζουν πια. Τέλος, ένα πρόγραµµα όπου τα ονόµατα των µεταβλητών έχουν αλλάξει, ϑα ϕαινόταν ξένο στον προγραµµατιστή που το έγραψε. 17

18 Για να αποφύγουµε τα προβλήµατα που αναφέραµε παραπάνω, ακολου- ϑήσαµε έναν άλλον τρόπο. Ολα τα ονόµατα των µεταβλητών που αναγνωρίζει ο λεκτικός αναλυτής, αποθηκεύονται σε µία λίστα. Κάθε ϕορά που αναγνω- ϱίζεται ένα άλλο αναγνωριστικό, ο λεκτικός αναλυτής αναζητά στην λίστα, εάν υπάρχει κάποιο αναγνωριστικό µε το ίδιο όνοµα, χωρίς να λαµβάνετε υπόψιν η διαφορά κεφαλών και πεζών. Εάν το ϐρει, τότε εξοµοιώνει το όνοµα του αναγνωριστικού που ϐρήκε µε αυτό της λίστας, διαφορετικά προσθέτει το αναγνωριστικό στην λίστα. Ας δώσουµε ένα παράδειγµα : myid = 20 myid = 30 MYID = 40 anothervar = 10 Αν εξετάζαµε την έξοδο του λεκτικού αναλυτή, ϑα είχαµε την εντύπωση πως ο κώδικας που αναλύθηκε είναι myid = 20 myid = 30 myid = 40 anothervar = 10 Η λίστα που διατηρεί ο αναλυτής περιέχει τα στοιχεία myid και anothervar. 4.2 Σύνθεση ϱοής token Οπως έχουµε ήδη αναφέρει, οι σελίδες ASP ενδέχεται να περιέχουν απλό κείµενο, κώδικα JavaScript και VBScript. Κάθε τµήµα της σελίδας, πρέπει να αναλυθεί από τον κατάλληλο λεκτικό αναλυτή, και απαιτείται ένας µηχανισµός που ϑα αποφασίζει ποιος λεκτικός αναλυτής ϑα ενεργοποιείται κάθε ϕορά που ένα τµήµα σε διαφορετική γλώσσα από το προηγούµενο ξεκινά. Κάθε λεκτικός αναλυτής παράγει µία ϱοή από token. Οι επιµέρους ϱοές token πρέπει να συντµηθούν σε µία και µόνο ϱοή, ώστε να αναλυθεί από τους συντακτικούς αναλυτές AspStreamSelector Το AspStreamSelector είναι µία κλάση που συνθέτει τις ϱοές από token και ενεργοποιεί τους λεκτικούς αναλυτές κατά το δοκούν. Ο πρώτος λεκτικός αναλυτής που ενεργοποιείται είναι ο HtmlLexer. Εάν το αρχείο προς ανάλυση είναι αυτόνοµο, δεν αναλύεται δηλαδή επειδή απαιτείται για την ανάλυση κάποιου άλλου αρχείου, γίνεται προσπάθεια προσδιορισµού της γλώσσας της σελίδας. Να υπενθυµίσουµε πως η γλώσσα της σελίδας καθορίζεται από την εντολή <%@Language="lang"%> όπου lang είναι η γλώσσα. Ο λόγος που 18

19 το AspStreamSelector δεν επιχειρεί να προσδιορίσει την γλώσσα για αρχεία ϐοηθητικά του κυρίως αρχείου, είναι επειδή τα αρχεία που συµπεριλαµβάνονται από κάποιο άλλο, οφείλουν να είναι στην ίδια γλώσσα µε εκείνο που τα συµπεριέλαβε. Τα token που παράγει ο λεκτικός αναλυτής της HTML διακρίνονται σε δύο κατηγορίες, τα token που έχουν συντακτική αξία και εκείνα που χρησιµοποιεί το AspStreamSelector για να αποφασίσει ποιος ϑα είναι ο επόµενος λεκτικός αναλυτής που ϑα αναλάβει την επεξεργασία του εναποµείναντος κειµένου. Στην πρώτη κατηγορία ανήκουν τα παρακάτω token: HTML περιέχει το στατικό κείµενο που προηγείται, έπεται ή παρεµβάλλεται στον κώδικα. Οταν ο HtmlLexer παρέχει περισσότερα από ένα token αυτού του τύπου στη σειρά, τότε τα token συµπτύσσονται σε ένα του οποίου το κείµενο είναι η συνάθροιση των κειµένων των token που ελήφθησαν. Στην περίπτωση που δοθεί ένα µόνο token και το κείµενο περιέχει µόνο κενούς χαρακτήρες ή έναν χαρακτήρα αλλαγής γραµµής, τότε το token απορρίπτεται. INCLUDE δείχνει σε ένα αρχείο που απαιτείται για την ανάλυση του τρέχοντος αρχείου. Για να µπορέσουν οι συντακτικοί αναλυτές της VBScript και JavaScript να χρησιµοποιήσουν τα token του HtmlLexer, ο κωδικός αριθµός του token πρέπει να αλλάξει στον αντίστοιχο token που αναγνωρίζει ο αναλυτής. Ο κωδικός αριθµός για το token HTML για παράδειγµα, είναι 56 στην JavaScript και 81 στην VBScript. Εάν το token δεν έχει το σωστό κωδικό για το συντακτικό αναλυτή που ϑα το επεξεργαστεί, η συντακτική ανάλυση ϑα αποτύχει τελείως ή ϑα είναι εσφαλµένη. Τα token της δεύτερης κατηγορίες, όπως αναφέρθηκε, εξυπηρετούν στην διαχείρισή της σειράς µε την οποία ενεργοποιούνται οι λεκτικοί αναλυτές. Το AspStreamSelector, αφού λάβει αποφάσεις ϐασιζόµενος σε αυτά τα token, τα απορρίπτει διότι δεν έχουν συντακτική αξία. Μία άλλη λειτουργία που εκτελεί το AspStreamSelector, είναι η εισαγωγή εικονικών token, token δηλαδή που δεν προήλθαν από κανέναν λεκτικό αναλυτή. Η εισαγωγή τους επιβάλλεται από ανάγκες της συντακτικής ανάλυσης. Καθένας από τους δύο συντακτικούς αναλυτές, αναµένει ότι το τελευταίο token που ϑα λάβει ϑα είναι το EOF που σηµαδεύει το τέλος εισόδου. Από την άλλη, όταν οι δύο γλώσσες εναλλάσσονται στο ίδιο αρχείο εισόδου, είναι προφανές πως η είσοδος που προορίζεται για τον έναν από τους αναλυτές, ϑα τελειώσει στο σηµείο όπου εναλλάσσονται οι γλώσσες, ενώ αντίθετα το περιεχόµενο του αρχείου δεν ϑα έχει τελειώσει. Για να λύσει το πρόβληµα, το 19

20 AspStreamSelector εισάγει ένα εικονικό token του τύπου EOF, δίνοντας την ψευδαίσθηση του τέλους εισόδου στον συντακτικό αναλυτή. Ενα άλλο παράδειγµα είναι το token EQ_HTML. Το token κατασκευά- Ϲεται κάθε ϕορά που στο αρχείο εισόδου υπάρχει η έκφραση <%=, που ση- µαίνει ότι η έκφραση που έπεται ϑα πρέπει να σταλεί στον επισκέπτη της σελίδας ως συµβολοσειρά. Είναι ουσιαστικά συντοµογραφία της έκφρασης Response.write(someExpr) που επιτελεί τον ίδιο σκοπό. Το token EQ_HTML προκύπτει από την σύνθεση δύο token, του ASP_START µε κείµενο <% που παράγεται από το HtmlLexer, και του token που συµβολίζει τον τελεστή ανά- ϑεσης τιµής ή ισότητας (ανάλογα µε την γλώσσα), που παράγεται είτε από το JsLexer ή από το VbsLexer, ανάλογα µε το ποιος από τους δύο λεκτικούς αναλυτές είναι ενεργός. Τα δύο token, ASP_START και τελεστής ισότητας, αντικαθιστώνται µε το EQ_HTML. Εάν δεν λάµβανε χώρα η αντικατάσταση, οι γλώσσες που ϑα αναγνώριζαν οι συντακτικοί αναλυτές JavaScript και VbScript ϑα ήταν διφορούµενες, οπότε δεν ϑα µπορούσε να γίνει συντακτική ανάλυση σε αυτές. Επιπρόσθετα, ο τελεστής <%= δεν είναι στην πραγµατικότητα τελεστής των δύο γλωσσών, αλλά ένα τέχνασµα για την διευκόλυνση του προγραµµατιστή. 4.3 Συντακτικοί Αναλυτές Οι συντακτικοί αναλυτές της JavaScript και VBScript µετατρέπουν την ϱοή από token σε AST δέντρο. Κάθε συντακτικός αναλυτής αποτελείται από ένα σύνολο κανόνων που ορίζουν την σειρά των token που αναγνωρίζει ο κανόνας. Ορισµένα token µπορεί να είναι προαιρετικά, να επαναλαµβάνονται πολλές ϕορές ή να απαιτείται η ύπαρξη τους για να επιτύχει η αναγνώριση της σειράς ως έγκυρη συντακτική δοµή της γλώσσας. Επιπλέον, ένας κανόνας µπορεί να ϐασίζεται σε άλλους κανόνες για κάποιο τµήµα της αναγνώρισης που µε την σειρά τους ϐασίζονται σε άλλους κανόνες και ούτω καθεξής. Ενα ϐασικό έργο για την επιτυχή αναγνώριση της σειράς των token είναι η δήλωση των κανόνων που αναγνωρίζουν τις εκφράσεις της κάθε γλώσσας. Οι εκφράσεις είναι εξ ορισµού αναδροµικές και έχουν προκαθορισµένους κανόνες προτεραιοτήτων. Η αναδροµικότητα και οι κανόνες προτεραιοτήτων κάνουν δύσκολη την αναγνώριση των εκφράσεων, όµως αφού υλοποιηθούν οι παραπάνω κανόνες, το έργο που αποµένει για να ολοκληρωθεί ο συντακτικός αναλυτής είναι συγκριτικά µικρό. Οι εκφράσεις αποτελούνται από αριθµούς, αλφαριθµητικά και αναγνωριστικά που συνδέονται µεταξύ τους µε τελεστές. Οι τελεστές δεν είναι ισότιµοι διότι υπάρχουν κανόνες προτεραιοτήτων που καθορίζουν την εκτίµηση της τιµής µιας έκφρασης. Οι κανόνες προτεραιότητας µπορούν να παρακαµφθούν µε την κατάλληλη χρήση οµαδοποιήσεων των εκφράσεων µέσω παρενθέσεων. 20

21 Παρακάτω ϑα δείξουµε αναλυτικά τις δοµές που αναγνωρίζουν οι συντακτικοί αναλυτές της JavaScript και VbScript και την µορφή των δέντρων που κατασκευάζουν. Επίσης ϑα αναφερθούµε σε δοµές δεδοµένων που χρησιµοποιούν οι συντακτικοί αναλυτές για την αποθήκευση επιπλέον πληροφοριών που αξιοποιούνται από τους µεταφραστές κατά την διαδικασία µετατροπής των AST δέντρων σε δέντρα που αναπαριστούν PHP κώδικα. Οταν ϑα αναφε- ϱόµαστε σε δοµές δέντρων ϑα χρησιµοποιήσουµε την σηµασιολογία της Lisp για την περιγραφή. Για παράδειγµα η έκφραση (a (b c)) σηµαίνει πως το δέντρο έχει για ϱίζα το κόµβο a, του οποίου παιδί είναι ο κόµβος b που έχει για παιδί τον κόµβο c Συντακτικός αναλυτής της JavaScript Οπως αναφέραµε παραπάνω, η υλοποίηση των κανόνων που αναγνωρίζουν τις εκφράσεις αποτελούν ϐασικό µέρος του συντακτικού αναλυτή, οπότε ϑα ξεκινήσουµε µε την περιγραφή αυτών των κανόνων. Οι κανόνες είναι αναδροµικοί και καλούνται µε τέτοια σειρά ώστε να ακολουθούν τους κανόνες προτεραιότητας που ορίζει η γλώσσα για τους τελεστές. Κάθε κανόνας αναγνωρίζει έναν τελεστή και τις υποεκφράσεις που συνοδεύουν τον τελεστή. Αρχικά καλείται ο κανόνας που αναγνωρίζει τον τελεστή µε την µικρότερη προτεραιότητα. Ο κανόνας καλεί πρώτα τον αµέσως ισχυρότερο κανόνα από την άποψη της προτεραιότητας και έπειτα επιχειρεί να αναγνωρίσει τον δικό του τελεστή. Με αυτό τον τρόπο εξασφαλίζεται ότι οι κανόνες προτεραιοτήτων ακολουθούνται αφού οι κανόνες που αναγνωρίζουν τελεστές µε µεγαλύτερη προτεραιότητα έχουν πρώτοι την ευκαιρία να αναγνωρίσουν την έκφραση. Ο πρώτος κανόνας που καλείτε ονοµάζεται expression. Ο κανόνας καλεί τον ασθενέστερο κανόνα που αναγνωρίζει την ανάθεση τιµής. Ο κανόνας υπάρχει διότι µόλις η έκφραση αναγνωρισθεί από τους άλλους κανόνες που καλεί, κατασκευάζει ένα δέντρο του οποίου ϱίζα ϑα είναι πάντα ο κόµβος. Τα δέντρα που προκύπτουν από τις εκφράσεις ϑα έχουν πάντα την δοµή ( expression). Η JavaScript έχει 12 τελεστές ανάθεσης τιµής. Οι τελεστές είναι : = ϑέτει στην έκφραση που ϐρίσκεται αριστερά του τελεστή την τιµή της έκ- ϕρασης που ϐρίσκεται δεξιά. +=, -=, *=, =, %= οι τελεστές ϑέτουν την τιµή της έκφρασης που ϐρίσκεται αριστερά του τελεστή ίση µε το άθροισµα, την διαφορά, το γινόµενο, το πηλίκο ή το υπόλοιπο της διαίρεσης της έκφρασης στα αριστερά και της έκφρασης στα δεξιά αντίστοιχα. 21

22 <<=, >>=, >>>= ϑέτει νέα τιµή στην έκφραση αφού πρώτα εκτελεστούν πράξεις στα bits της έκφρασης. &=, =, ˆ= ϑέτουν νέα τιµή στην έκφραση στα αριστερά αφού πρώτα εκτελεστούν λογικές πράξεις επί των δύο εκφράσεων. Οι δώδεκα τελεστές έχουν την ίδια προτεραιότητα. Ο κανόνας της ανάθεσης τιµής, καλεί πρώτα τον κανόνα αναγνώρισης λογικών εκφράσεων διότι έχει µεγαλύτερη προτεραιότητα. Επειτα επιχειρεί να αναγνωρίσει έναν από τους δώδεκα τελεστές. Αν κάποιος από τους τελεστές αναγνωρισθεί, τότε ο κανόνας καλεί τον εαυτό του. Εάν δεν αναγνωρισθεί κανένας από τους τελεστές, ο κανόνας έχει ολοκληρώσει το έργο του. Η αναγνώριση των τελεστών είναι προαιρετική διότι ειδάλλως κάθε έκφραση ϑα έπρεπε να είναι έκφραση ανά- ϑεσης τιµής. Εάν η έκφραση προς αναγνώριση δεν είναι έκφραση ανάθεσης τιµής, ο κανόνας που µπορεί να την αναγνωρίσει κάποια στιγµή ϑα κληθεί. Ο αµέσως ισχυρότερος κανόνας είναι εκείνος που αναγνωρίζει εκφράσεις του τύπου boolexpr? expressiona : expressionb. Η έκφραση αποτελείται από τρεις υποεκφράσεις και δύο τελεστές. Η πρώτη έκφραση πρέπει να έχει τιµή αληθή ή ψευδή. Εάν η τιµή της πρώτης έκφρασης είναι αληθής, τότε εκτιµάτε η τιµή της δεύτερης έκφρασης, διαφορετικά εκτιµάτε η τιµή της τρίτης. Ο κανόνας αρχικά καλεί τον κανόνα αναγνώρισης λογικών εκφράσεων µε τον τελεστή διάζευξης (or) και έπειτα επιχειρεί να αναγνωρίσει τους δύο τελεστές και τις υποεκφράσεις τους. Ο κανόνας λογικής διάζευξης καλεί τον κανόνα λογικής σύζευξης (and) και επιχειρεί να αναγνωρίσει τον τελεστή (or). Εάν ο τελεστής αναγνωρισθεί, τότε καλείται και πάλι ο κανόνας λογικής σύζευξης. Η ίδια διαδικασία ακολουθείτε για τους κανόνες λογικής σύζευξης, δυαδικής διάζευξης, αποκλειστικής διάζευξης (xor) και δυαδικής σύζευξης. Ο επόµενος κανόνας αναγνωρίζει τους τελεστές ελέγχου ισότητας και ταυτότητας. Οι τελεστές ελέγχου ισότητας είναι οι ==,!= που εξετάζουν αν οι εκφράσεις εκατέρωθεν των τελεστών είναι ίσες ή αν είναι άνισες αντίστοιχα. Οι τελεστές ελέγχου ταυτότητας εξετάζουν αν δύο αναγνωριστικά αναφέρονται στην ίδια ϑέση µνήµης. Η τακτική που ακολουθεί ο κανόνας δεν διαφέρει από όσους αναφέραµε παραπάνω. Ακολουθεί ο κανόνας που αναγνωρίζει τελεστές σύγκρισης τιµών που είναι οι : < ελέγχει εάν η τιµή της έκφρασης στα αριστερά είναι µικρότερη από εκείνης στα δεξιά του τελεστή. > ελέγχει εάν η τιµή της έκφρασης στα αριστερά είναι µεγαλύτερη από εκείνης στα δεξιά του τελεστή. 22

23 <= ελέγχει εάν η τιµή της έκφρασης στα αριστερά είναι µικρότερη ή ίση µε εκείνης στα δεξιά του τελεστή. >= ελέγχει εάν η τιµή της έκφρασης στα αριστερά είναι ή ίση µε εκείνης στα δεξιά του τελεστή. instanceof εξετάζει εάν ένα αντικείµενο έχει κατασκευαστεί από κάποια κλάση. Αµέσως µετά, ϐρίσκονται οι τελεστές που εκτελούν πράξεις επί των δυαδικών ψηφίων των µεταβλητών (bit operation). Οι τελεστές παρατίθενται παρακάτω : << προκαλεί ολίσθηση προς τα αριστερά των δυαδικών ψηφίων της τιµής της µεταβλητής >> προκαλεί ολίσθηση προς τα δεξιά. >>>> προκαλεί ολίσθηση προς τα δεξιά ενώ διατηρεί το πρόσηµο της αρχικής τιµής. Μετά τους τελεστές δυαδικών πράξεων, ακολουθούν οι τελεστές άθροισης και αφαίρεσης, και στην συνέχεια οι τελεστές πολλαπλασιασµού, διαίρεσης και ακεραίου υπολοίπου. Παραπάνω παραθέσαµε τους τελεστές που δρουν επί δύο εκφράσεων ή δυαδικούς τελεστές. Παρακάτω ϑα δείξουµε τους µονήρης τελεστές, τελεστές που δρουν επί µίας µόνο έκφρασης, µε την σειρά προτεραιότητας τους. Οι τελεστές είναι : ++ αυξάνει κατά ένα την τιµή της έκφρασης. µειώνει κατά ένα την τιµή της έκφρασης. - το πρόσηµο της έκφρασης είναι αρνητικό. + το πρόσηµο της έκφρασης είναι ϑετικό. αντιστρέφει τα δυαδικά ψηφία της έκφρασης.! είναι ο τελεστής λογικής άρνησης. Εάν η τιµή της έκφρασης είναι αληθής, τότε ϑα γίνει ψευδής και αντιστρόφως. delete διαγράφει την µεταβλητή, και αποδεσµεύει το χώρο που κατείχε στην µνήµη. typeof επιστρέφει το όνοµα του τύπου µίας έκφρασης. 23

24 new κατασκευάζει ένα αντικείµενο κάποιας κλάσης. Στην ιεραρχία προτεραιοτήτων ακολουθεί ο τελεστής αρχικοποίησης πινάκων. Ας δώσουµε ένα παράδειγµα για να γίνει κατανοητός ο ϱόλος και η συντακτική δοµή του τελεστή. Η έκφραση a = [12, 3, true, "string"] αρχικοποιεί έναν πίνακα που τα στοιχεία του είναι το 12 το 13 το.... Η διαδικασία αναγνώρισης της έκφρασης απαιτεί την αναγνώριση του token [, έπειτα την αναγνώριση µίας σειράς εκφράσεων που διαχωρίζονται από κόµµατα, και τέλος το token ]. Οι εκφράσεις µπορεί να περιέχουν το τελεστή. που σηµατοδοτεί την αίτηση ανάκτησης ενός µέλους µίας κλάσης, όπως για παράδειγµα η έκφραση "string".length που καλεί την ιδιότητα length από την κλάση String. Εχου- µε δύο επιπλέον τελεστές, τον τελεστή πρόσβασης στοιχείου ενός πίνακα (για παράδειγµα a[0]) και τον τελεστή κλήσης µεθόδου (παράδειγµα method(arg)). Τέλος έχουµε τις ϐασικές εκφράσεις που δεν διασπώνται σε επί µέρους τµήµατα από τελεστές. Οι ϐασικές εκφράσεις είναι οι παρακάτω : Ονόµατα µεταβλητών. Αριθµοί Συµβολοσειρές Οι λογικές τιµές true και false Η τιµή null Η κενή τιµή void Η ακαθόριστη τιµή undefined Κανονικές εκφράσεις Η ειδική µεταβλητή this που αναφέρετε στο τρέχον αντικείµενο µίας κλάσης. Τύποι αντικειµένων όπως το Array, Object,... Αυτόνοµες εκφράσεις που περικλείονται σε παρενθέσεις Ανώνυµες συναρτήσεις Εκτός από εκφράσεις, η JavaScript περιέχει και άλλες συντακτικές δοµές που εξυπηρετούν στον έλεγχο ϱοής, σχηµατισµό ϐρόχων και άλλα. Παρακάτω ϑα αναλύσουµε τις συντακτικές δοµές της JavaScript. 24

25 if/else Η εντολή χρησιµοποιείται για έλεγχο ϱοής. Η δοµή της είναι : if( λογική έκφραση ) εντολές και εκφράσεις else εντολές και εκφράσεις Εάν η λογική έκφραση έχει αληθή τιµή, τότε οι εντολές και εκφράσεις που ακολουθούν εκτελούνται, διαφορετικά εκτελούνται οι εντολές και εκφράσεις της εντολής else. Η εντολή else είναι προαιρετική. Το δέντρο που παράγεται από την εντολή έχει την µορφή : if statements else statements switch Αποτελεί άλλη µία δοµή για τον έλεγχο ϱοής. Η δοµή της είναι : switch ( έκφραση ) case τιµή εντολές default εντολές Η εντολή εξετάζει ποια από τις τιµές των case εντολών ισούται µε την έκφραση και εκτελεί τις εντολές που έπονται της αντίστοιχης case εντολής. Εάν καµία από τις case εντολές δεν έχει τιµή ίση µε την έκφραση, τότε εκτελούνται οι εντολές της default, εφόσον υπάρχει. Το δέντρο που παράγεται από την εντολή έχει την µορφή : 25

26 switch CASE_GROUP CASE_GROUP case case statements default statements for Η δοµή χρησιµεύει για τον καθορισµό ϐρόχων. Η µορφή της είναι : for ( µεταβλητή όπου αποθηκεύεται το πλήθος των ϐρόχων που έχουν εκτελεστεί συνθήκη που ορίζει πότε ϑα τερµατιστεί ο ϐρόχος έκφραση που αλλάζει την τιµή της µεταβλητής που αποθηκεύει το πλήθος των ϐρόχων) εντολές Κάποια, ή και τα τρία τµήµατα της εντολής for µπορούν να παραλει- ϕθούν. Για παράδειγµα, η εντολή for (;;) είναι συντακτικά σωστή, και ορίζει έναν ατέρµονα ϐρόχο. Το δέντρο που παράγεται από την εντολή έχει την µορφή : 26

27 for for forinit forcond foriter forinit forcond foriter ELIST ELIST var ELIST Μία άλλη µορφή της δοµής for χρησιµοποιείται για πρόσβαση των ιδιοτήτων ενός αντικειµένου. Η µορφή της εναλλακτικής σύνταξής είναι : for ( µεταβλητή in µεταβλητή όπου έχει αποθηκευτεί ένα αντικείµενο) εντολές. Το δέντρο που παράγεται από την εντολή µε την δεύτερη σύνατξη έχει την µορφή : for in while Είναι άλλη µία εντολή σχηµατισµού ϐρόχων. Η σύνταξη της εντολής είναι : while ( λογική έκφραση ) εντολές do Επίσης ορίζει ϐρόχους. Η σύνταξη είναι : do εντολές while ( λογική έκφραση). Το δέντρο που παράγεται από την εντολή έχει την µορφή : 27

28 do statement while try/catch/finally Η εντολή δίνει την δυνατότητα να εκτελεστούν άλλες εντολές που ενδέχεται να προκαλέσουν κάποιο σφάλµα κατά την εκτέλεσή τους, και να ληφθούν µέτρα σε µία τέτοια περίπτωση. Η σύνταξη της εντολής είναι : try εντολές catch ( µεταβλητή όπου αποθηκεύονται πληροφορίες για τα αίτια του σφάλµατος) εντολές finally εντολές που εκτελούνται σε κάθε περίπτωση (είτε υπήρξε σφάλ- µα, είτε όχι) Το δέντρο που παράγεται από την εντολή έχει την µορφή : try statement catch finally id statement statement with ιευκολύνει στην πρόσβαση µεθόδων και ιδιοτήτων µίας κλάσης. Οι εντολές που περιέχονται στην with δεν χρειάζεται να αναφέρονται ϱητά στα µέλη της κλάσης (για παράδειγµα somemethod() αντί someobject.somemethod()) παρακάµπτοντας την ανάγκη γραφής του ονόµατος της µεταβλητής που περιέχει το αντικείµενο της κλάσης. Η σύνταξη της εντολής είναι : 28

29 with ( µεταβλητή που περιέχει ένα αντικείµενο) εντολές Το δέντρο που παράγεται από την εντολή έχει την µορφή : with statement function Μέσω της εντολής, ορίζονται συναρτήσεις του χρήστη. Η σύνταξη της εντολής είναι : function όνοµα συνάρτησης (ονόµατα παραµέτρων) εντολές Το δέντρο που παράγεται από την εντολή έχει την µορφή : function name ELIST statement Τέλος, υπάρχουν και οι εντολές : var include identifier break 29

30 continue return throw Οι παραπάνω εντολές δεν παρουσιάζουν ενδιαφέρον από συντακτική σκοπιά Συντακτικός αναλυτής της VbScript Ο χειρισµός των εκφράσεων της VbScript, δεν διαφέρει από εκείνο της JavaScript. Η VbScript παρουσιάζει µία επιπλέον δυσκολία διότι ο τελεστής ανάθεσης τιµής είναι ο ίδιος µε εκείνο του ελέγχου ισότητας. Χάριν συντοµίας παραλείπουµε την περιγραφή των κανόνων που αναγνωρίζουν τις εκφράσεις. Παρακάτω περιγράφονται οι συντακτικές δοµές της VbScript και η µορφή των δέντρων που κατασκευάζει ο συντακτικός αναλυτής της. On Error Η εντολή παρέχει την δυνατότητα εκτέλεσης τµηµάτων του κώδικα, σε περίπτωση σφάλµατος. Η σύνταξη της εντολής είναι : On Error Resume Next ή On Error GoTo 0. Τα δέντρα που παράγονται σε κάθε περίπτωση ϑα είναι της µορφής : ERROR ERROR RESUME statement ZERO statement Dim/ReDim Οι εντολές δηλώνουν µεταβλητές. Τα δέντρα ϑα έχουν την µορ- ϕή : 30

31 DIM REDIM IDENTIFIER IDENTIFIER IDENTIFIER IDENTIFIER Erase Αποµακρύνει αντικείµενα από την µνήµη και αποδεσµεύει το χώρο που καταλάµβαναν. ERASE IDENTIFIER Call Καλεί µία συνάρτηση ή µέθοδο κάποιας κλάσης. Εάν η συνάρτηση επιστρέφει κάποια τιµή, το αποτέλεσµα της συνάρτησης δεν είναι προσπελάσιµο. SUB_CALL DOT IDENTIFIER SUB_CALL ARGLIST_VALUES ARGLIST_VALUES 31

ASPA: A translator from ASP to PHP

ASPA: A translator from ASP to PHP :Μεταφραστής από ASP σε PHP : A translator from ASP to PHP Ανακρέων Μεντής anakreonmejdi@yahoo.gr http://daemon.di.uoa.gr/daemon/issue10 http://storm.cs.unipi.gr/ anakreon/aspa.html Ιούλιος 2004 1 Λίγα

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL 8.1. Εισαγωγή ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PACAL Πως προέκυψε η γλώσσα προγραμματισμού Pascal και ποια είναι τα γενικά της χαρακτηριστικά; Σχεδιάστηκε από τον Ελβετό επιστήμονα της Πληροφορικής Nicklaus Wirth to

Διαβάστε περισσότερα

ΕισαγωγήστουςΗ/Υ. PHP Hypertext Preprocessor

ΕισαγωγήστουςΗ/Υ. PHP Hypertext Preprocessor ΕισαγωγήστουςΗ/Υ PHP Hypertext Preprocessor ΤιείναιηPHP; PHP είναιµία server-based scripting language σχεδιασµένη ειδικά για το web. Σε µία html σελίδα µπορούµε να ενσωµατώσουµε php κώδικα που εκτελείται

Διαβάστε περισσότερα

Κεφάλαιο 10 ο Υποπρογράµµατα

Κεφάλαιο 10 ο Υποπρογράµµατα Κεφάλαιο 10 ο Υποπρογράµµατα Ανάπτυξη Εφαρµογών σε Προγραµµατιστικό Περιβάλλον Η αντιµετώπιση των σύνθετων προβληµάτων και η ανάπτυξη των αντίστοιχων προγραµµάτων µπορεί να γίνει µε την ιεραρχική σχεδίαση,

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ ΠΛΗΡΟΦΟΡΙΚΗ ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Εισαγωγή στη Python Νικόλαος Ζ. Ζάχαρης Αναπληρωτής

Διαβάστε περισσότερα

2.1. Εντολές. 2.2. Σχόλια. 2.3. Τύποι Δεδομένων

2.1. Εντολές. 2.2. Σχόλια. 2.3. Τύποι Δεδομένων 2 Βασικές Εντολές 2.1. Εντολές Οι στην Java ακολουθούν το πρότυπο της γλώσσας C. Έτσι, κάθε εντολή που γράφουμε στη Java θα πρέπει να τελειώνει με το ερωτηματικό (;). Όπως και η C έτσι και η Java επιτρέπει

Διαβάστε περισσότερα

Επιµέλεια Θοδωρής Πιερράτος

Επιµέλεια Θοδωρής Πιερράτος Εισαγωγή στον προγραµµατισµό Η έννοια του προγράµµατος Ο προγραµµατισµός ασχολείται µε τη δηµιουργία του προγράµµατος, δηλαδή του συνόλου εντολών που πρέπει να δοθούν στον υπολογιστή ώστε να υλοποιηθεί

Διαβάστε περισσότερα

ΕΠΛ 012. JavaScripts

ΕΠΛ 012. JavaScripts ΕΠΛ 012 JavaScripts Γλώσσα JavaScript (JS) ηµιουργεί δυναµικές ιστοσελίδες και αλληλεπιδράσεις µε το χρήστη εν είναι Java, αλλά είναι αντικειµενοστραφής (απλό µοντέλο υποκειµένων) Objects, properties (τιµές

Διαβάστε περισσότερα

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΩΡΙΑ 6 ΟΥ ΚΕΦΑΛΑΙΟΥ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ 6.1 Τι ονοµάζουµε πρόγραµµα υπολογιστή; Ένα πρόγραµµα

Διαβάστε περισσότερα

Εφαρμοσμένη Πληροφορική ΙΙ (Θ) Είσοδος/Έξοδος Μεταβλητές Τύποι Μεταβλητών Τελεστές και Προτεραιότητα Μετατροπές Μεταξύ Τύπων

Εφαρμοσμένη Πληροφορική ΙΙ (Θ) Είσοδος/Έξοδος Μεταβλητές Τύποι Μεταβλητών Τελεστές και Προτεραιότητα Μετατροπές Μεταξύ Τύπων Εφαρμοσμένη Πληροφορική ΙΙ (Θ) Είσοδος/Έξοδος Μεταβλητές Τύποι Μεταβλητών Τελεστές και Προτεραιότητα Μετατροπές Μεταξύ Τύπων 1 Είσοδος/Έξοδος Είσοδος/Έξοδος ανάλογα με τον τύπο του προγράμματος Πρόγραμμα

Διαβάστε περισσότερα

Η γλώσσα προγραμματισμού Strange

Η γλώσσα προγραμματισμού Strange Προγραμματιστική άσκηση: Η γλώσσα προγραμματισμού Strange Η Strange είναι μια μικρή γλώσσα προγραμματισμού. Παρόλο που οι προγραμματιστικές της ικανότητες είναι μικρές, η εκπαιδευτική αυτή γλώσσα περιέχει

Διαβάστε περισσότερα

Προγραμματισμός Ι (HY120)

Προγραμματισμός Ι (HY120) Προγραμματισμός Ι (HY20) # μνήμη & μεταβλητές πρόγραμμα & εκτέλεση Ψηφιακά δεδομένα, μνήμη, μεταβλητές 2 Δυαδικός κόσμος Οι υπολογιστές είναι δυαδικές μηχανές Όλη η πληροφορία (δεδομένα και κώδικας) κωδικοποιείται

Διαβάστε περισσότερα

Μαλούτα Θεανώ Σελίδα 1

Μαλούτα Θεανώ Σελίδα 1 ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΑΡΧΕΣ ΤΗΣ ΕΠΙΣΤΗΜΗΣ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Α. ΕΡΩΤΗΣΕΙΣ ΘΕΩΡΙΑΣ ΦΥΛΛΑΔΙΟ 6 ο ( Ενότητες 2.3 ) 1.Τι είναι πρόγραμμα; 2. Ποια είναι τα πλεονεκτήματα των γλωσσών υψηλού επιπέδου σε σχέση με τις γλώσσες

Διαβάστε περισσότερα

Σου προτείνω να τυπώσεις τις επόμενες τέσσερις σελίδες σε ένα φύλο διπλής όψης και να τις έχεις μαζί σου για εύκολη αναφορά.

Σου προτείνω να τυπώσεις τις επόμενες τέσσερις σελίδες σε ένα φύλο διπλής όψης και να τις έχεις μαζί σου για εύκολη αναφορά. AeppAcademy.com facebook.com/aeppacademy Γεια. Σου προτείνω να τυπώσεις τις επόμενες τέσσερις σελίδες σε ένα φύλο διπλής όψης και να τις έχεις μαζί σου για εύκολη αναφορά. Καλή Ανάγνωση & Καλή Επιτυχία

Διαβάστε περισσότερα

Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού

Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού ( Απαντήσεις & Λύσεις Βιβλίου) 1. Σκοποί κεφαλαίου Κύκλος ανάπτυξης προγράµµατος Κατηγορίες γλωσσών προγραµµατισµού

Διαβάστε περισσότερα

FORTRAN και Αντικειμενοστραφής Προγραμματισμός

FORTRAN και Αντικειμενοστραφής Προγραμματισμός FORTRAN και Αντικειμενοστραφής Προγραμματισμός Παραδόσεις Μαθήματος 2016 Δρ Γ Παπαλάμπρου Επίκουρος Καθηγητής ΕΜΠ georgepapalambrou@lmentuagr Εργαστήριο Ναυτικής Μηχανολογίας (Κτίριο Λ) Σχολή Ναυπηγών

Διαβάστε περισσότερα

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal 1 ο Μέρος σηµειώσεων (Ενότητες 8.1 & 8.2 σχολικού βιβλίου)

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal 1 ο Μέρος σηµειώσεων (Ενότητες 8.1 & 8.2 σχολικού βιβλίου) ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal 1 ο Μέρος σηµειώσεων (Ενότητες 8.1 & 8.2 σχολικού βιβλίου) 1. Εισαγωγή Χαρακτηριστικά της γλώσσας Τύποι δεδοµένων Γλώσσα προγραµµατισµού

Διαβάστε περισσότερα

Μέρος 2 Κατασκευή Συντακτικού Αναλυτή

Μέρος 2 Κατασκευή Συντακτικού Αναλυτή Αντίρριο, 05/04/2017 Προδιαγραφές Εργαστηριακής Εργασίας για το μάθημα «Μεταγλωττιστές» To δεύτερο μέρος της εργασίας έχει ως στόχο την ανάπτυξη του συντακτικού αναλυτή με χρήση του bison / byacc. Στο

Διαβάστε περισσότερα

Αντικειµενοστρεφής Προγραµµατισµός

Αντικειµενοστρεφής Προγραµµατισµός 16 η διάλεξη Π. Σταθοπούλου pstath@ece.upatras.gr ή pstath@upatras.gr Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Φροντιστήριο : ευτέρα 11πµ-12πµ ΗΛ4 Προηγούµενη ιάλεξη

Διαβάστε περισσότερα

Δομημένος Προγραμματισμός (ΤΛ1006)

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

Διαβάστε περισσότερα

a = 10; a = k; int a,b,c; a = b = c = 10;

a = 10; a = k; int a,b,c; a = b = c = 10; C: Από τη Θεωρία στην Εφαρµογή Κεφάλαιο 4 ο Τελεστές Γ. Σ. Τσελίκης Ν. Δ. Τσελίκας Ο τελεστής εκχώρησης = Ο τελεστής = χρησιµοποιείται για την απόδοση τιµής (ή αλλιώς ανάθεση τιµής) σε µία µεταβλητή Π.χ.

Διαβάστε περισσότερα

Κεφάλαιο 2.3: Προγραμματισμός. Επιστήμη ΗΥ Κεφ. 2.3 Καραμαούνας Πολύκαρπος

Κεφάλαιο 2.3: Προγραμματισμός. Επιστήμη ΗΥ Κεφ. 2.3 Καραμαούνας Πολύκαρπος Κεφάλαιο 2.3: Προγραμματισμός 1 2.3.1 Αναφορά σε γλώσσες προγραμματισμού και «Προγραμματιστικά Υποδείγματα» 2.3.1.1 Πρόγραμμα και Γλώσσες Προγραμματισμού Πρόγραμμα: σύνολο εντολών που χρειάζεται να δοθούν

Διαβάστε περισσότερα

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΩΡΙΑ 10 ΟΥ ΚΕΦΑΛΑΙΟΥ ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ 1. Πως ορίζεται ο τμηματικός προγραμματισμός; Τμηματικός προγραμματισμός

Διαβάστε περισσότερα

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL)

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) Pascal- Εισαγωγή Η έννοια του προγράμματος Η επίλυση ενός προβλήματος με τον υπολογιστή περιλαμβάνει, όπως έχει ήδη αναφερθεί, τρία εξίσου

Διαβάστε περισσότερα

Αντίρριο, 14/03/2017 Προδιαγραφές Εργαστηριακής Εργασίας για το μάθημα «Μεταγλωττιστές»

Αντίρριο, 14/03/2017 Προδιαγραφές Εργαστηριακής Εργασίας για το μάθημα «Μεταγλωττιστές» Αντίρριο, 14/03/2017 Προδιαγραφές Εργαστηριακής Εργασίας για το μάθημα «Μεταγλωττιστές» Η εργασία έχει ως στόχο τον σχεδιασμό και την υλοποίηση ενός μεταγλωττιστή για την γλώσσα Ciscal, χρησιμοποιώντας

Διαβάστε περισσότερα

Α. Ερωτήσεις Ανάπτυξης

Α. Ερωτήσεις Ανάπτυξης οµηµένος Προγραµµατισµός-Κεφάλαιο 7 Σελίδα 1 α ό 10 ΕΝΟΤΗΤΑ ΙΙΙ (ΠΡΟΓΡΑΜΜΑΤΑ) ΚΕΦΑΛΑΙΟ 7: Είδη, Τεχνικές και Περιβάλλοντα Προγραµµατισµού Α. Ερωτήσεις Ανάπτυξης 1. Τι ονοµάζουµε γλώσσα προγραµµατισµού;

Διαβάστε περισσότερα

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client ΕΣΔ 516 Τεχνολογίες Διαδικτύου Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client Περιεχόμενα Περιεχόμενα Javascript και HTML Βασική σύνταξη Μεταβλητές Τελεστές Συναρτήσεις

Διαβάστε περισσότερα

ΑΕΠΠ Ερωτήσεις θεωρίας

ΑΕΠΠ Ερωτήσεις θεωρίας ΑΕΠΠ Ερωτήσεις θεωρίας Κεφάλαιο 1 1. Τα δεδομένα μπορούν να παρέχουν πληροφορίες όταν υποβάλλονται σε 2. Το πρόβλημα μεγιστοποίησης των κερδών μιας επιχείρησης είναι πρόβλημα 3. Για την επίλυση ενός προβλήματος

Διαβάστε περισσότερα

Περιεχόµενα. Ανασκόπηση - Ορισµοί. Ο κύκλος ανάπτυξης προγράµµατος. Γλώσσες Προγραµµατισµού Ασκήσεις

Περιεχόµενα. Ανασκόπηση - Ορισµοί. Ο κύκλος ανάπτυξης προγράµµατος. Γλώσσες Προγραµµατισµού Ασκήσεις Προγραµµατισµός Η/Υ Ανασκόπηση - Ορισµοί Περιεχόµενα Ο κύκλος ανάπτυξης προγράµµατος Περιγραφή προβλήµατος Ανάλυση προβλήµατος Λογικό ιάγραµµα Ψευδοκώδικας Κωδικοποίηση Συντήρηση Γλώσσες Προγραµµατισµού

Διαβάστε περισσότερα

Επιλέξτε Σωστό ή Λάθος για καθένα από τα παρακάτω:

Επιλέξτε Σωστό ή Λάθος για καθένα από τα παρακάτω: Επιλέξτε Σωστό ή Λάθος για καθένα από τα παρακάτω: 1ο ΓΕΛ Καστοριάς Βασικές Έννοιες Αλγορίθμων Δομή Ακολουθίας (κεφ. 2 και 7 σχολικού βιβλίου) 1. Οι μεταβλητές αντιστοιχίζονται από τον μεταγλωττιστή κάθε

Διαβάστε περισσότερα

Διαδικασιακός Προγραμματισμός

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 4 η Τελεστές Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή Σωτήρης

Διαβάστε περισσότερα

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών: Εργαστηριακή Άσκηση 2012-2013

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών: Εργαστηριακή Άσκηση 2012-2013 Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών: Εργαστηριακή Άσκηση 2012-2013 27 Μαρτίου 2013 Περίληψη Σκοπός της παρούσας εργασίας είναι η εξοικείωσή σας με τις θεμελιώδεις θεωρητικές και πρακτικές πτυχές

Διαβάστε περισσότερα

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C Εισαγωγή στην C Μορφή Προγράµµατος σε γλώσσα C Τµήµα Α Με την εντολή include συµπεριλαµβάνω στο πρόγραµµα τα πρότυπα των συναρτήσεων εισόδου/εξόδου της C.Το αρχείο κεφαλίδας stdio.h είναι ένας κατάλογος

Διαβάστε περισσότερα

Επιλογή και επανάληψη. Λογική έκφραση ή συνθήκη

Επιλογή και επανάληψη. Λογική έκφραση ή συνθήκη Επιλογή και επανάληψη Η ύλη που αναπτύσσεται σε αυτό το κεφάλαιο είναι συναφής µε την ύλη που αναπτύσσεται στο 2 ο κεφάλαιο. Όπου υπάρχουν διαφορές αναφέρονται ρητά. Προσέξτε ιδιαίτερα, πάντως, ότι στο

Διαβάστε περισσότερα

Ανάπτυξη και Σχεδίαση Λογισμικού

Ανάπτυξη και Σχεδίαση Λογισμικού Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Βασικά Στοιχεία Το αλφάβητο της C Οι βασικοί τύποι της C Δηλώσεις μεταβλητών Είσοδος/Έξοδος Βασικές εντολές της C Αλφάβητο

Διαβάστε περισσότερα

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος http://www.teiser.gr/icd/staff/lantzos lantzos@teiser.gr Κανόνες Ομαλής Λειτουργίας Ερχόμαστε στην ώρα μας Δεν καπνίζουμε και τρώμε εντός της αίθουσας

Διαβάστε περισσότερα

Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων

Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων Άσκηση 1 α) Η δομή σταθμισμένης ένωσης με συμπίεση διαδρομής μπορεί να τροποποιηθεί πολύ εύκολα ώστε να υποστηρίζει τις

Διαβάστε περισσότερα

Εισαγωγή στο Bison. Μεταγλωττιστές, Χειμερινό εξάμηνο

Εισαγωγή στο Bison. Μεταγλωττιστές, Χειμερινό εξάμηνο Εισαγωγή στο Bison Μεταγλωττιστές, Χειμερινό εξάμηνο 2016-2017 Συντακτική Ανάλυση Αποτελεί την δεύτερη φάση της μετάφρασης. Εύρεση της σχέσης που υπάρχει των λεκτικών μονάδων ενός προγράμματος. Παράδειγμα

Διαβάστε περισσότερα

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 3 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 3 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής Γιώργος Δημητρίου Μάθημα 3 ο Λεκτική Ανάλυση και Λεκτικοί Αναλυτές Γενικά για τη λεκτική ανάλυση Έννοιες που χρειαζόμαστε Τεχνικές λεκτικής ανάλυσης Πίνακας συμβόλων και διαχείριση λαθών Σχεδίαση λεκτικού

Διαβάστε περισσότερα

Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο 2. Α1. Ο αλγόριθμος είναι απαραίτητος μόνο για την επίλυση προβλημάτων πληροφορικής

Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο 2. Α1. Ο αλγόριθμος είναι απαραίτητος μόνο για την επίλυση προβλημάτων πληροφορικής Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο 2 Α1. Ο αλγόριθμος είναι απαραίτητος μόνο για την επίλυση προβλημάτων πληροφορικής Α2. Ο αλγόριθμος αποτελείται από ένα πεπερασμένο σύνολο εντολών Α3. Ο αλγόριθμος

Διαβάστε περισσότερα

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ Μέρος 4ο ΝΙΚΟΛΑΟΣ ΣΤΕΡΓΙΟΥΛΑΣ ΤΜΗΜΑ ΦΥΣΙΚΗΣ ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ 1 ΟΙ ΤΕΛΕΣΤΕΣ ΣΥΓΚΡΙΣΗΣ Με τους τελεστές σύγκρισης, συγκρίνουμε τις

Διαβάστε περισσότερα

3. Εκφράσεις και έλεγχος ροής

3. Εκφράσεις και έλεγχος ροής 3. Εκφράσεις και έλεγχος ροής Τελειώνοντας αυτό το κεφάλαιο θα μπορείτε: Να διακρίνετε ανάμεσα σε μεταβλητές μέλη και αυτόματες μεταβλητές Να περιγράφετε την αρχικοποίηση των μεταβλητών μελών Να αναγνωρίζετε

Διαβάστε περισσότερα

Κεφ. 2 Θέματα Θεωρητικής Επιστήμης Υπολογιστών. Κοντογιάννης Βασίλειος ΠΕ19

Κεφ. 2 Θέματα Θεωρητικής Επιστήμης Υπολογιστών. Κοντογιάννης Βασίλειος ΠΕ19 Κεφ. 2 Θέματα Θεωρητικής Επιστήμης Υπολογιστών Κεφ. 2 Θεωρητική Επιστήμη Υπολογιστών 2.3.1.1 Έννοια προγράμματος Τι είναι πρόγραμμα και τι προγραμματισμός; Πρόγραμμα είναι το σύνολο εντολών που χρειάζεται

Διαβάστε περισσότερα

ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ. Στις βασικές έννοιες που σχετίζονται με τη λεξική ανάλυση. Στη δήλωση ορισμό κανονικών εκφράσεων

ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ. Στις βασικές έννοιες που σχετίζονται με τη λεξική ανάλυση. Στη δήλωση ορισμό κανονικών εκφράσεων ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ 2 Ο Εργαστηριακό Μάθημα Λεξική Ανάλυση Σκοπός: Το μάθημα αυτό αναφέρεται: Στις βασικές έννοιες που σχετίζονται με τη λεξική ανάλυση Στη δήλωση ορισμό κανονικών εκφράσεων Θεωρία Πρόλογος

Διαβάστε περισσότερα

Προγραμματισμός I (Θ)

Προγραμματισμός I (Θ) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κεντρικής Μακεδονίας - Σέρρες Τμήμα Μηχανικών Πληροφορικής Προγραμματισμός I (Θ) Δρ. Δημήτρης Βαρσάμης Επίκουρος Καθηγητής Οκτώβριος 2017 Δρ. Δημήτρης Βαρσάμης Οκτώβριος

Διαβάστε περισσότερα

Βασικοί τύποι δεδομένων (Pascal) ΕΠΑ.Λ Αλίμου Γ Πληροφορική Δομημένος Προγραμματισμός (Ε) Σχολ. Ετος Κων/νος Φλώρος

Βασικοί τύποι δεδομένων (Pascal) ΕΠΑ.Λ Αλίμου Γ Πληροφορική Δομημένος Προγραμματισμός (Ε) Σχολ. Ετος Κων/νος Φλώρος Βασικοί τύποι δεδομένων (Pascal) ΕΠΑ.Λ Αλίμου Γ Πληροφορική Δομημένος Προγραμματισμός (Ε) Σχολ. Ετος 2012-13 Κων/νος Φλώρος Απλοί τύποι δεδομένων Οι τύποι δεδομένων προσδιορίζουν τον τρόπο παράστασης των

Διαβάστε περισσότερα

ΥΠΟΛΟΓΙΣΤΕΣ Ι. Τα επιμέρους τμήματα Η ΟΜΗ TOY ΥΠΟΛΟΓΙΣΤΗ. Αναπαράσταση μεγεθών. Αναλογική αναπαράσταση ΚΕΝΤΡΙΚΗ ΜΝΗΜΗ ΜΟΝΑ Α ΕΛΕΓΧΟΥ

ΥΠΟΛΟΓΙΣΤΕΣ Ι. Τα επιμέρους τμήματα Η ΟΜΗ TOY ΥΠΟΛΟΓΙΣΤΗ. Αναπαράσταση μεγεθών. Αναλογική αναπαράσταση ΚΕΝΤΡΙΚΗ ΜΝΗΜΗ ΜΟΝΑ Α ΕΛΕΓΧΟΥ ΥΠΟΛΟΓΙΣΤΕΣ Ι Η ΟΜΗ TOY ΥΠΟΛΟΓΙΣΤΗ Τα επιμέρους τμήματα ΕΙΣΟ ΟΣ ΚΕΝΤΡΙΚΗ ΜΝΗΜΗ ΕΛΕΓΧΟΥ ΑΡΙΘΜΗΤΙΚΗ ΛΟΓΙΚΗ ΕΞΟ ΟΣ ΚΕΝΤΡΙΚΗ ΕΠΕΞΕΡΓΑΣΙΑΣ 1 2 Αναπαράσταση μεγεθών ΜΕΤΡΟΥΜΕΝΟ ΜΕΓΕΘΟΣ ΑΝΑΛΟΓΙΚΗ ΑΝΑΠΑΡΑΣΤΑΣΗ

Διαβάστε περισσότερα

Ανάπτυξη και Σχεδίαση Λογισμικού

Ανάπτυξη και Σχεδίαση Λογισμικού Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Εκφράσεις και Λίγες Εντολές Οι εκφράσεις της C Τελεστές Απλές και σύνθετες εντολές Εντολές ελέγχου (επιλογής) Εισαγωγή σε

Διαβάστε περισσότερα

Τμήμα Χρηματοοικονομικής & Ελεγκτικής ΤΕΙ Ηπείρου Παράρτημα Πρέβεζας. Πληροφορική Ι. Μάθημα 4 ο Πράξεις με bits. Δρ.

Τμήμα Χρηματοοικονομικής & Ελεγκτικής ΤΕΙ Ηπείρου Παράρτημα Πρέβεζας. Πληροφορική Ι. Μάθημα 4 ο Πράξεις με bits. Δρ. Τμήμα Χρηματοοικονομικής & Ελεγκτικής ΤΕΙ Ηπείρου Παράρτημα Πρέβεζας Πληροφορική Ι Μάθημα 4 ο Πράξεις με bits Δρ. Γκόγκος Χρήστος Κατηγορίες πράξεων με bits Πράξεις με δυαδικά ψηφία Αριθμητικές πράξεις

Διαβάστε περισσότερα

6. Εισαγωγή στον προγραµµατισµό

6. Εισαγωγή στον προγραµµατισµό 6. Εισαγωγή στον προγραµµατισµό 6.1 Η έννοια του προγράµµατος. 6.2 Ιστορική αναδροµή. 6.2.1 Γλώσσες µηχανής. ΗΜ04-Θ1Α 1. Ένα πρόγραµµα σε γλώσσα µηχανής είναι µια ακολουθία δυαδικών ψηφίων. 5. Ένα πρόγραµµα

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 5. Κύκλος Ζωής Εφαρμογών ΕΝΟΤΗΤΑ 2. Εφαρμογές Πληροφορικής. Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών

ΚΕΦΑΛΑΙΟ 5. Κύκλος Ζωής Εφαρμογών ΕΝΟΤΗΤΑ 2. Εφαρμογές Πληροφορικής. Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών 44 Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών Διδακτικοί στόχοι Σκοπός του κεφαλαίου είναι οι μαθητές να κατανοήσουν τα βήματα που ακολουθούνται κατά την ανάπτυξη μιας εφαρμογής.

Διαβάστε περισσότερα

Μεταγλωττιστές. Ενότητα 6: Λεκτική ανάλυση (Μέρος 2 ο ) Αγγελική Σγώρα Τμήμα Μηχανικών Πληροφορικής ΤΕ

Μεταγλωττιστές. Ενότητα 6: Λεκτική ανάλυση (Μέρος 2 ο ) Αγγελική Σγώρα Τμήμα Μηχανικών Πληροφορικής ΤΕ Μεταγλωττιστές Ενότητα 6: Λεκτική ανάλυση (Μέρος 2 ο ) Αγγελική Σγώρα Τμήμα Μηχανικών Πληροφορικής ΤΕ Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό

Διαβάστε περισσότερα

if(συνθήκη) {... // οµάδα εντολών } C: Από τη Θεωρία στην Εφαρµογή 5 ο Κεφάλαιο

if(συνθήκη) {... // οµάδα εντολών } C: Από τη Θεωρία στην Εφαρµογή 5 ο Κεφάλαιο C: Από τη Θεωρία στην Εφαρµογή Κεφάλαιο 5 ο Έλεγχος Προγράµµατος Γ. Σ. Τσελίκης Ν. Δ. Τσελίκας Η εντολή if (Ι) Η εντολή if είναι µία από τις βασικότερες δοµές ελέγχου ροής στη C, αλλά και στις περισσότερες

Διαβάστε περισσότερα

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008 Παράδειγμα: Μηχανή για Εισιτήρια 2 Ορισμός Κλάσεων Σύνταξη κλάσης: πεδία, κατασκευαστές, μέθοδοι Ένας αυτόματος εκδότης εισιτηρίων είναι μια μηχανή που δέχεται χρήματα και εκδίδει ένα εισιτήριο. Εκδίδει

Διαβάστε περισσότερα

2 ΟΥ και 8 ΟΥ ΚΕΦΑΛΑΙΟΥ

2 ΟΥ και 8 ΟΥ ΚΕΦΑΛΑΙΟΥ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΩΡΙΑ 2 ΟΥ και 8 ΟΥ ΚΕΦΑΛΑΙΟΥ ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ 1) Πότε χρησιμοποιείται η δομή επανάληψης

Διαβάστε περισσότερα

Προγραμματισμός Η/Υ. Προτεινόμενα θέματα εξετάσεων Εργαστήριο. Μέρος 1 ό. ΤΕΙ Λάρισας- Σχολή Τεχνολογικών Εφαρμογών Τμήμα Πολιτικών Έργων Υποδομής

Προγραμματισμός Η/Υ. Προτεινόμενα θέματα εξετάσεων Εργαστήριο. Μέρος 1 ό. ΤΕΙ Λάρισας- Σχολή Τεχνολογικών Εφαρμογών Τμήμα Πολιτικών Έργων Υποδομής Προγραμματισμός Η/Υ Προτεινόμενα θέματα εξετάσεων Εργαστήριο Μέρος 1 ό ΤΕΙ Λάρισας- Σχολή Τεχνολογικών Εφαρμογών Τμήμα Πολιτικών Έργων Υποδομής Ιανουάριος 2011 Καλογιάννης Γρηγόριος Επιστημονικός/ Εργαστηριακός

Διαβάστε περισσότερα

Αντικειμενοστρεφής Προγραμματισμός

Αντικειμενοστρεφής Προγραμματισμός Αντικειμενοστρεφής Προγραμματισμός Διδάσκουσα: Αναπλ. Καθηγήτρια Ανδριάνα Πρέντζα aprentza@unipi.gr Εργαστηριακός Συνεργάτης: Δρ. Βασιλική Κούφη vassok@unipi.gr Εργαστήριο 2 Βασικοί Τύποι Μεταβλητών Java

Διαβάστε περισσότερα

ΗΥ-150. Προγραμματισμός

ΗΥ-150. Προγραμματισμός ΗΥ-150 Εντολές Ελέγχου Ροής Σειριακή εκτέλεση εντολών Όλα τα προγράμματα «γράφονται» χρησιμοποιώντας 3 είδη εντολών: Σειριακές εντολές (sequential built in C) Εντολές απόφασης (if, if/else, switch) Περιλαμβάνει

Διαβάστε περισσότερα

FAIL PASS PASS οριακά

FAIL PASS PASS οριακά AEM 0001 0002 COMMENTS οριακά -Το πρόγραµµά σου δουλεύει λάθος για τις εισόδους: 7 -Δεν έχεις µεριµνήσει για την περίπτωση step=1. Μπορούσες να θεωρήσεις ειδική περίπτωση και να την υλοποιείς σε άλλον

Διαβάστε περισσότερα

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python Εισαγωγή στην Επιστήμη Υπολογιστών Εισαγωγή στην Python Β Μέρος Δομή Ελέγχου if-elif-else Επαναληπτική Δομή Ελέγχου while Επαναληπτική Δομή Ελέγχου for Αλληλεπίδραση χρήστη-προγράμματος Συναρτήσεις Η δομή

Διαβάστε περισσότερα

ΗΥ-150. Προγραμματισμός

ΗΥ-150. Προγραμματισμός ΗΥ-150 Εντολές Ελέγχου Ροής Σειριακή εκτέλεση εντολών Όλα τα προγράμματα «γράφονται» χρησιμοποιώντας 3 είδη εντολών: Σειριακές εντολές (sequential built in C) Εντολές απόφασης (if, if/else, switch) Περιλαμβάνει

Διαβάστε περισσότερα

Οι εντολές ελέγχου της ροής ενός προγράμματος.

Οι εντολές ελέγχου της ροής ενός προγράμματος. Κεφάλαιο ΙΙI: Οι εντολές ελέγχου της ροής ενός προγράμματος 31 Εντολές ελέγχου της ροής Στο παρόν κεφάλαιο ασχολούμαστε με την σύνταξη των εντολών της C οι οποίες εισάγουν λογική και ελέγχουν την ροή εκτέλεσης

Διαβάστε περισσότερα

ΗΥ-150. Προγραµµατισµός. Εντολές Ελέγχου Ροής

ΗΥ-150. Προγραµµατισµός. Εντολές Ελέγχου Ροής ΗΥ-150 Εντολές Ελέγχου Ροής Σειριακή εκτέλεση εντολών Όλα τα προγράµµατα «γράφονται» χρησιµοποιώντας 3 είδη εντολών: Σειριακές εντολές (sequential built in C) Εντολές απόφασης (if, if/else, switch) Περιλαµβάνει

Διαβάστε περισσότερα

ΕΙΔΗ,ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙ- ΣΜΟΥ

ΕΙΔΗ,ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙ- ΣΜΟΥ Κεφάλαιο 7 ΕΙΔΗ,ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙ- ΣΜΟΥ Ερωτήσεις 1. Να αναφέρετε διαφορές μεταξύ γλωσσών μηχανής και γλωσσών χαμηλού επιπέδου. Οι γλώσσες μηχανής κωδικοποιούν τις εντολές τους με ομάδες

Διαβάστε περισσότερα

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Π. Σταθοπούλου pstath@ece.upatras.gr ή pstath@upatras.gr Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Φροντιστήριο : ευτέρα 11πµ-12πµ ΗΛ4 ΠΕΡΙΕΧΟΜΕΝΟ ΤΟΥ ΜΑΘΗΜΑΤΟΣ Αρχές

Διαβάστε περισσότερα

4.4 Μετατροπή από μία μορφή δομής επανάληψης σε μία άλλη.

4.4 Μετατροπή από μία μορφή δομής επανάληψης σε μία άλλη. 4.4 Μετατροπή από μία μορφή δομής επανάληψης σε μία άλλη. Η μετατροπή μιας εντολής επανάληψης σε μία άλλη ή στις άλλες δύο εντολές επανάληψης, αποτελεί ένα θέμα που αρκετές φορές έχει εξεταστεί σε πανελλαδικό

Διαβάστε περισσότερα

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python Εισαγωγή στην Επιστήμη Υπολογιστών Εισαγωγή στην Python Python scripts Ένα πρόγραμμα στην Python (συχνά αποκαλείται script) αποτελείται από μία ακολουθία ορισμών και εντολών. H ακολουθία των ορισμών και

Διαβάστε περισσότερα

Τεχνικές σχεδίασης προγραμμάτων, Προγραμματιστικά Περιβάλλοντα

Τεχνικές σχεδίασης προγραμμάτων, Προγραμματιστικά Περιβάλλοντα Τεχνικές σχεδίασης προγραμμάτων, Προγραμματιστικά Περιβάλλοντα Ενότητες βιβλίου: 6.4, 6.7 Ώρες διδασκαλίας: 1 Τεχνικές σχεδίασης προγραμμάτων Στο βιβλίο γίνεται αναφορά σε μία τεχνική για την ανάπτυξη

Διαβάστε περισσότερα

Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού

Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού Προπτυχιακό μάθημα Αρχές Γλωσσών Προγραμματισμού Π. Ροντογιάννης 1 Μεταγλωττιστής Πρόγραμμα Διαβάζει προγράμματα δεδομένης γλώσσας (πηγαία γλώσσα) και τα μετατρέπει

Διαβάστε περισσότερα

Η γλώσσα προγραμματισμού EEL

Η γλώσσα προγραμματισμού EEL Προγραμματιστική άσκηση: Η γλώσσα προγραμματισμού EEL Η EEL (Early Experimental Language) είναι μια μικρή γλώσσα προγραμματισμού. Παρόλο που οι προγραμματιστικές της ικανότητες είναι μικρές, η εκπαιδευτική

Διαβάστε περισσότερα

Β. Εισαγωγή στον Προγραμματισμό Η/Υ με την JavaScript

Β. Εισαγωγή στον Προγραμματισμό Η/Υ με την JavaScript Β. Εισαγωγή στον Προγραμματισμό Η/Υ με την JavaScript Β.1 Τύποι Δεδομένων Όλες οι γλώσσες προγραμματισμού (πρέπει να) υποστηρίζουν πέντε (5) πρωταρχικούς τύπους δεδομένων: char (character) int (integer)

Διαβάστε περισσότερα

Κλάσεις και Αντικείµενα

Κλάσεις και Αντικείµενα Κλάσεις και Αντικείµενα Γρηγόρης Τσουµάκας Τµήµα Πληροφορικής, Αριστοτέλειο Πανεπιστήµιο Θεσσαλονίκης Κλάσεις και Αντικείµενα 2 Τα αντικείµενα σε µια αντικειµενοστρεφή γλώσσα προγραµµατισµού, µοντελοποιούν

Διαβάστε περισσότερα

Στοιχειώδης προγραμματισμός σε C++

Στοιχειώδης προγραμματισμός σε C++ Στοιχειώδης προγραμματισμός σε C++ Σύντομο Ιστορικό. Το πρόγραμμα Hello World. Ο τελεστής εξόδου. Μεταβλητές και δηλώσεις τους. Αντικείμενα, μεταβλητές, σταθερές. Ο τελεστής εισόδου. Θεμελιώδεις τύποι.

Διαβάστε περισσότερα

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ Καθηγητής Πληροφορικής ΠΕ19 1 ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΚΕΦΑΛΑΙΟ 6 ο : ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΙΣΤΟΣΕΛΙΔΑ ΜΑΘΗΜΑΤΟΣ: http://eclass.sch.gr/courses/el594100/ Η έννοια του προγράμματος

Διαβάστε περισσότερα

Προγραµµατισµός Η/Υ. Μέρος2

Προγραµµατισµός Η/Υ. Μέρος2 Προγραµµατισµός Η/Υ Μέρος2 Περιεχόμενα Επανάληψη Βασικών Σύμβολων Διαγραμμάτων Ροής Αλγόριθμος Ψευδοκώδικας Παραδείγματα Αλγορίθμων Γλώσσες προγραμματισμού 2 Επανάληψη Βασικών Σύμβολων Διαγραμμάτων Ροής

Διαβάστε περισσότερα

Εισαγωγή στην PHP. ΕΣΔ 516 Τεχνολογίες Διαδικτύου. Περιεχόμενα. Περιεχόμενα. ΕΣ 516: Τεχνολογίες ιαδικτύου. ΕΣ 516: Τεχνολογίες ιαδικτύου

Εισαγωγή στην PHP. ΕΣΔ 516 Τεχνολογίες Διαδικτύου. Περιεχόμενα. Περιεχόμενα. ΕΣ 516: Τεχνολογίες ιαδικτύου. ΕΣ 516: Τεχνολογίες ιαδικτύου ΕΣΔ 516 Τεχνολογίες Διαδικτύου Εισαγωγή στην PHP Περιεχόμενα Περιεχόμενα PHP και HTML Βασική σύνταξη Μεταβλητές Τελεστές Συναρτήσεις Παράδειγματα 1 Βιβλιογραφία Ενότητας Βιβλιογραφία [Lane 2004]: Chapter

Διαβάστε περισσότερα

Ε Ι Α Γ Ω Γ Η Σ Ο Ν Π Ρ Ο Γ Ρ Α Μ Μ Α Σ Ι Μ Ο Κ Ε Υ Α Λ Α Ι Ο 6. Σο πρόγραμμα γράφεται σε κάποια γλώσσα προγραμματισμού.

Ε Ι Α Γ Ω Γ Η Σ Ο Ν Π Ρ Ο Γ Ρ Α Μ Μ Α Σ Ι Μ Ο Κ Ε Υ Α Λ Α Ι Ο 6. Σο πρόγραμμα γράφεται σε κάποια γλώσσα προγραμματισμού. Κεφάλαιο 6 6.1 Η έννοια του προγράμματος Η επίλυση ενός προβλήματος με τον υπολογιστή περιλαμβάνει τρία σημαντικά στάδια : Σον ακριβή προσδιορισμό του προβλήματος Σην ανάπτυξη του αντίστοιχου αλγορίθμου

Διαβάστε περισσότερα

Λογισµικό (Software SW) Γλώσσες

Λογισµικό (Software SW) Γλώσσες Λογισµικό (Software SW) Γλώσσες Προγραµµατισµού Οι γενιές των γλωσσών προγραµµατισµού Προβλήµατα που επιλύονται σε ένα περιβάλλον στο οποίο ο άνθρωπος πρέπει να προσαρµόζεται στα χαρακτηριστικά της µηχανής

Διαβάστε περισσότερα

3 Αλληλεπίδραση Αντικειμένων

3 Αλληλεπίδραση Αντικειμένων Αφαίρεση και Αρθρωσιμότητα 3 Αλληλεπίδραση Αντικειμένων Πώς συνεργάζονται τα αντικείμενα που δημιουργούμε Αφαίρεση (abstraction) είναι η δυνατότητα να αγνοούμε τις λεπτομέρειες και να εστιάζουμε την προσοχή

Διαβάστε περισσότερα

4. Συντακτικό μιας γλώσσας είναι το σύνολο των κανόνων που ορίζει τις μορφές με τις οποίες μια λέξη είναι αποδεκτή.

4. Συντακτικό μιας γλώσσας είναι το σύνολο των κανόνων που ορίζει τις μορφές με τις οποίες μια λέξη είναι αποδεκτή. ΑΕσΠΠ-Κεφ6. Εισαγωγή στον προγραμματισμό 1 ΣΩΣΤΟ ΛΑΘΟΣ 1. Οι γλώσσες προγραμματισμού αναπτυχθήκαν με σκοπό την επικοινωνία ανθρώπου μηχανής. 2. Αλγόριθμος = Πρόγραμμα + Δομές Δεδομένων 3. Ένα πρόγραμμα

Διαβάστε περισσότερα

for for for for( . */

for for for for( . */ Εισαγωγή Στον Προγραµµατισµό «C» Βρόχοι Επανάληψης Πανεπιστήµιο Πελοποννήσου Τµήµα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Δ. Τσελίκας Νικόλαος Προγραµµατισµός Δ. Τσελίκας Ι Ο βρόχος for Η εντολή for χρησιµοποιείται

Διαβάστε περισσότερα

1. Πότε χρησιμοποιούμε την δομή επανάληψης; Ποιες είναι οι διάφορες εντολές (μορφές) της;

1. Πότε χρησιμοποιούμε την δομή επανάληψης; Ποιες είναι οι διάφορες εντολές (μορφές) της; 1. Πότε χρησιμοποιούμε την δομή επανάληψης; Ποιες είναι οι διάφορες (μορφές) της; Η δομή επανάληψης χρησιμοποιείται όταν μια σειρά εντολών πρέπει να εκτελεστεί σε ένα σύνολο περιπτώσεων, που έχουν κάτι

Διαβάστε περισσότερα

Γραφικά υπολογιστών Εργαστήριο 1 Εισαγωγή στην Python

Γραφικά υπολογιστών Εργαστήριο 1 Εισαγωγή στην Python Γραφικά υπολογιστών Εργαστήριο 1 Εισαγωγή στην Python Σκοπός της 1ης άσκησης είναι η εξοικείωση με τη γλώσσα προγραμματισμού Python, την οποία και θα χρησιμοποιήσουμε και στις υπόλοιπες εργαστηριακές ασκήσεις.

Διαβάστε περισσότερα

ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Τρίτη Διάλεξη Εντολές Επιλογής και Επανάληψης Εντολές επιλογής Εντολή if Η πιο απλή μορφή της if συντάσσεται ως εξής: if ( συνθήκη ) Οι εντολές μέσα στα άγκιστρα αποτελούν

Διαβάστε περισσότερα

Γιάννης Σαμωνάκης. 1 ο ΣΧΟΛΕΙΟ ΚΩΔΙΚΑ «Βασικά Θέματα Προγραμματισμού στην Ανάπτυξη Δυναμικών Διαδικτυακών Εφαρμογών» (Part 4 - PHP)

Γιάννης Σαμωνάκης. 1 ο ΣΧΟΛΕΙΟ ΚΩΔΙΚΑ «Βασικά Θέματα Προγραμματισμού στην Ανάπτυξη Δυναμικών Διαδικτυακών Εφαρμογών» (Part 4 - PHP) ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ 1 ο ΣΧΟΛΕΙΟ ΚΩΔΙΚΑ «Βασικά Θέματα Προγραμματισμού στην Ανάπτυξη Δυναμικών Διαδικτυακών Εφαρμογών» (Part 4 - PHP) Γιάννης Σαμωνάκης 1 Περιεχόμενα Τι είναι η PHP Που μπορεί να χρησιμοποιηθεί

Διαβάστε περισσότερα

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ Π ΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ Π ΕΡΙΒΑΛΛΟΝ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ Π ΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ Π ΕΡΙΒΑΛΛΟΝ ΥΠΟΥΡΓΕΙΟ ΕΘΝΙΚΗΣ ΠΑΙΔΕΙΑΣ ΚΑΙ ΘΡΗΣΚΕΥΜΑΤΩΝ ΠΑΙΔΑΓΩΓΙΚΟ ΙΝΣΤΙΤΟΥΤΟ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ Π ΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ Π ΕΡΙΒΑΛΛΟΝ Κ Υ Κ Λ Ο Υ Π Λ Η Ρ Ο Φ Ο Ρ Ι Κ Η Σ Κ Α Ι Υ Π Η Ρ Ε Σ Ι Ω Ν Τ Ε Χ Ν Ο Λ Ο Γ Ι Κ Η

Διαβάστε περισσότερα

Φυσικές και τεχνητές γλώσσες. Το αλφάβητο της ΓΛΩΣΣΑΣ, Τύποι Δεδομένων. Σταθερές, Μεταβλητές, Τελεστές, Συναρτήσεις, Δομή Προγράμματος

Φυσικές και τεχνητές γλώσσες. Το αλφάβητο της ΓΛΩΣΣΑΣ, Τύποι Δεδομένων. Σταθερές, Μεταβλητές, Τελεστές, Συναρτήσεις, Δομή Προγράμματος Φυσικές και τεχνητές γλώσσες. Το αλφάβητο της ΓΛΩΣΣΑΣ, Τύποι Δεδομένων. Σταθερές, Μεταβλητές, Τελεστές, Συναρτήσεις, Δομή Προγράμματος Ενότητες βιβλίου: 6.3, 7.1-7.6, 7.10, 8.1 Ώρες διδασκαλίας: 2 Φυσικές

Διαβάστε περισσότερα

Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα;

Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα; Εισαγωγή Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα; 1. Σελίδα μαθήματος Εγγραφή Ο κάθε φοιτητής πρέπει να κάνει εγγραφή στη σελίδα του μαθήματος στην πλατφόρμα e-class

Διαβάστε περισσότερα

ΕΝΟΤΗΤΑ 4 Λήψη Αποφάσεων και Συναρτήσεις Ελέγχου

ΕΝΟΤΗΤΑ 4 Λήψη Αποφάσεων και Συναρτήσεις Ελέγχου ΕΝΟΤΗΤΑ 4 Λήψη Αποφάσεων και Συναρτήσεις Ελέγχου Σκοπός και περίγραμμα της Ενότητας 4 Σκοπός της παρουσίασης Να μελετήσουμε τις συναρτήσεις που ελέγχουν την ροή και την εκτέλεση ενός προγράμματος Σύνοψη

Διαβάστε περισσότερα

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Εργαστήριο 1 Εισαγωγή στη C Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr Διαδικαστικά Ιστοσελίδα μαθήματος: http://eclass.uoa.gr/courses/f30/ Υποχρεωτική παρακολούθηση: Παρασκευή 14:00 16:00 στην

Διαβάστε περισσότερα

o AND o IF o SUMPRODUCT

o AND o IF o SUMPRODUCT Πληροφοριακά Εργαστήριο Management 1 Information Συστήματα Systems Διοίκησης ΤΕΙ Τμήμα Ελεγκτικής Ηπείρου Χρηματοοικονομικής (Παράρτημα Πρέβεζας) και Αντικείµενο: Μοντελοποίηση προβλήµατος Θέµατα που καλύπτονται:

Διαβάστε περισσότερα

ΜΑΘΗΜΑ: Εργαλεία Ανάπτυξης εφαρμογών internet.

ΜΑΘΗΜΑ: Εργαλεία Ανάπτυξης εφαρμογών internet. ΜΑΘΗΜΑ: Εργαλεία Ανάπτυξης εφαρμογών internet. ΩΡΕΣ ΔΙΔΑΣΚΑΛΙΑΣ: ΕΙΔΟΣ ΜΑΘΗΜΑΤΟΣ: Μικτό Γενικός σκοπός είναι να αποκτήσει ο καταρτιζόμενος τις αναγκαίες γνώσεις σχετικά με εργαλεία και τις τεχνικές για

Διαβάστε περισσότερα

Εισαγωγή στην γλώσσα προγραμματισμού C

Εισαγωγή στην γλώσσα προγραμματισμού C Εισαγωγή στην γλώσσα προγραμματισμού C Χαρακτηριστικά της C Ιδιαίτερα δημοφιλής Έχει χρησιμοποιηθεί για τον προγραμματισμό ευρέος φάσματος συστημάτων και εφαρμογών Γλώσσα μετρίου επιπέδου Φιλοσοφία: Ο

Διαβάστε περισσότερα

ΕΡΩΤΗΣΕΙΣ ΑΞΙΟΛΟΓΗΣΗΣ

ΕΡΩΤΗΣΕΙΣ ΑΞΙΟΛΟΓΗΣΗΣ Α) Να γράψετε στο τετράδιό σας τον αριθμό κάθε πρότασης και δίπλα το γράμμα "Σ", αν είναι σωστή, ή το γράμμα "Λ", αν είναι λανθασμένη. (Μονάδες 25) 1. Ένα αδόμητο πρόβλημα είναι ταυτόχρονα και ανοικτό

Διαβάστε περισσότερα

Κεφ. 1: Εισαγωγή στην έννοια του Αλγορίθμου και στον Προγραμματισμό. Η έννοια του προβλήματος

Κεφ. 1: Εισαγωγή στην έννοια του Αλγορίθμου και στον Προγραμματισμό. Η έννοια του προβλήματος Η έννοια του προβλήματος 1. Αναφέρετε μερικά από τα προβλήματα που συναντάτε στην καθημερινότητά σας. Απλά προβλήματα Ποιο δρόμο θα ακολουθήσω για να πάω στο σχολείο; Πως θα οργανώσω μια εκδρομή; Πως θα

Διαβάστε περισσότερα

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf(%u\n, x); Β. unsigned char ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εξετάσεις Β Περιόδου 2015 (8/9/2015) ΟΝΟΜΑΤΕΠΩΝΥΜΟ:................................................................................ Α.Μ.:...............................................

Διαβάστε περισσότερα

Γλώσσες υψηλού επιπέδου Περιέχουν περισσότερες εντολές για την εκτέλεση πολύπλοκων εργασιών Τα προγράµµατα µεταφράζονται σε γλώσσα µηχανής είτε από το

Γλώσσες υψηλού επιπέδου Περιέχουν περισσότερες εντολές για την εκτέλεση πολύπλοκων εργασιών Τα προγράµµατα µεταφράζονται σε γλώσσα µηχανής είτε από το Σηµαντικά σηµεία κεφαλαίου Τα τρία στάδια επίλυσης ενός προβλήµατος: Ακριβής προσδιορισµό του προβλήµατος Ανάπτυξη του αντίστοιχου αλγορίθµου. ιατύπωση του αλγορίθµου σε κατανοητή µορφή από τον υπολογιστή.

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 7 ο. Έτσι ο προγραµµατισµός µε τη ΓΛΩΣΣΑ εστιάζεται στην ανάπτυξη του αλγορίθµου και τη µετατροπή του σε σωστό πρόγραµµα.

ΚΕΦΑΛΑΙΟ 7 ο. Έτσι ο προγραµµατισµός µε τη ΓΛΩΣΣΑ εστιάζεται στην ανάπτυξη του αλγορίθµου και τη µετατροπή του σε σωστό πρόγραµµα. ΚΕΦΑΛΑΙΟ 7 ο 1. Επιλογή της κατάλληλης γλώσσας προγραµµατισµού Εκατοντάδες γλώσσες προγραµµατισµού χρησιµοποιούνται όπως αναφέρθηκε σήµερα για την επίλυση των προβληµάτων µε τον υπολογιστή, τη δηµιουργία

Διαβάστε περισσότερα

Εισαγωγή. Διαλέξεις στο μάθημα: Μεταφραστές Γιώργος Μανής

Εισαγωγή. Διαλέξεις στο μάθημα: Μεταφραστές Γιώργος Μανής Εισαγωγή Διαλέξεις στο μάθημα: Μεταφραστές Γιώργος Μανής Μεταγλωττιστής Αρχικό πρόγραμμα (source program) Μεταγλωττιστής Τελικό πρόγραμμα (object program) Διαγνωστικά μηνύματα Μεταγλωττιστής Παίρνει σαν

Διαβάστε περισσότερα

Προγραμματισμός ΙI (Θ)

Προγραμματισμός ΙI (Θ) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κεντρικής Μακεδονίας - Σέρρες Τμήμα Μηχανικών Πληροφορικής Προγραμματισμός ΙI (Θ) Δρ. Δημήτρης Βαρσάμης Επίκουρος Καθηγητής Μάρτιος 2017 Δρ. Δημήτρης Βαρσάμης Μάρτιος 2017

Διαβάστε περισσότερα