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



Σχετικά έγγραφα
ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΗΥ340

Ο πίνακας συμβόλων (symbol table) είναι μία δομή, όπου αποθηκεύεται πληροφορία σχετικά με τα σύμβολα του προγράμματος

alpha Language age (3/5) alpha Language Φροντιστήριο Syntax Directed Translation and

Slide 6 / 43. Slide 5 / 43. Α. Σαββίδης. Α. Σαββίδης. Slide 8 / 43. Slide 7 / 43. Α. Σαββίδης. Α. Σαββίδης HY340, 2009 HY340, 2009 HY340, 2009

HY340, 2009 Α. Σαββίδης Slide 2 / 143. HY340, 2009 Α. Σαββίδης Slide 3 / 143. HY340, 2009 Α. Σαββίδης Slide 4 / 143

Τι είναι ο Symbol Table. ΗΥ-340 Γλώσσες και Μεταφραστές Φροντιστήριο. Περιεχόμενη Πληροφορία. Table. Πίνακας Συμβόλων

a = false; else a = 3.33; b = (a and c); //?

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

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

Runtime Checking (1/3) Runtime Checking (2/3) Runtime Checking (3/3) ΗΥ 340 Γλώσσες και Μεταφραστές Φροντιστήριο

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

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

Μεταγλωττιστές. Εργαστήριο 5. Εισαγωγή στο BISON. Γεννήτρια Συντακτικών Αναλυτών. 2 η Φάση Μεταγλώττισης Συντακτική Ανάλυση

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

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

Φροντιστήριο 3 ο Παραγωγή Ενδιάμεσου Κώδικα. Σημασιολογία της γλώσσας alpha (1/7) Type Checking

ΦΥΣ-151. Ηλεκτρονικοί Υπολογιστές Ι (FORTRAN 77) (Άνοιξη 2004)

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

HY340, 2010 Α. Σαββίδης. Slide 3 / 43. Slide 4 / 43

Θα χρησιμοποιήσουμε το bison, μια βελτιωμένη έκδοση του yacc. Φροντιστήριο 2ο Εισαγωγή στο YACC. Yacc. Δομή Προγράμματος Yacc

Εισαγωγή στον Προγραμματισμό

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

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

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

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 8 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

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

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

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

Λεκτικός Αναλυτής. Διαλέξεις στο μάθημα: Μεταφραστές Γιώργος Μανής

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

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

Γλώσσες Προγραμματισμού Μεταγλωττιστές. Συντακτική Ανάλυση με το Εργαλείο BISON

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

Μεταγλωττιστές. Δημήτρης Μιχαήλ. Ακ. Έτος Ανοδικές Μέθοδοι Συντακτικής Ανάλυσης. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

// MATHIMA 2, // s.boot; s.makewindow.boot; // boot server!

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

Φροντιστήριο 1ο Εισαγωγή στο FLEX. Flex. Regular Expressions (1/4)

Εισαγωγή στον Προγραμματισμό με C++

Παρουσίαση του εργαλείου BISON

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

ΕΠΛ 012. JavaScripts

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (Programming in the large)

- Αναπαράσταση ακέραιας τιµής : - Εύρος ακεραίων : - Ακέραιοι τύποι: - Πράξεις µε ακεραίους (DIV - MOD)

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

Εργασία Προγραµµατισµού

ΚΕΦΑΛΑΙΟ 6: Γλώσσες. 6.1 Ιστορική εξέλιξη 6.4 Υλοποίηση γλώσσας. Κεφάλαιο 6: «Γλώσσες Προγραµµατισµού»

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

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

Η τιµή εξόδου κάποιας συνάρτησης µπορεί να είναι δείκτης, π.χ.

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

Χρησιμοποιείται για να αποφασίσει το πρόγραμμα αν θα κάνει κάτι σε ένα σημείο της εκτέλεσής του, εξετάζοντας αν ισχύει ή όχι μια συνθήκη.

Προγραμματισμός Η/Υ (ΤΛ2007 )

Εισαγωγή στον Προγ/μό Υπολογιστών

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

Σημειωματάριο Δευτέρας 30 Οκτ. 2017

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 2 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

Μεταγλωττιστές. Σημασιολογική Ανάλυση. Εργαστήριο 9. Διδάσκοντες: Δρ. Γεώργιος Δημητρίου Δρ. Άχμεντ Μάχντι

Παρουσίαση του εργαλείου BISON

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

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

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

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

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

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

Κεφάλαιο 2.6: Είσοδος / Έξοδος εδοµένων, Μορφοποίηση εδοµένων Εξόδου. ( ιάλεξη 7) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Προγραµµατιστικές Τεχνικές

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

Pascal - Βασικές Έννοιες

ASPA: A translator from ASP to PHP

Τι είναι το yacc. Δομή ενός αρχείου yacc. Πρόλογος. ΗΥ 340 Γλώσσες και Μεταφραστές Φροντιστήριο. Ο yacc είναι ένας γενικού σκοπού parser generator.

Εισαγωγή στον Προγραµµατισµό. Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ

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

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

Οντοκεντρικός Προγραμματισμός

Γλώσσα Προγραμματισμού C++ Εισαγωγή - Μια πρώτη ματιά

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

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα.

Κεφάλαιο 3.1, : Συναρτήσεις I. ( ιάλεξη 11) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Δομημένος Προγραμματισμός

Βασικά στοιχεία της Java

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

Εισαγωγή στην PHP. ΕΣΔ 232 Διαχείριση Δεδομένων στη Κοινωνία της Πληροφορίας. Περιεχόμενα. Περιεχόμενα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΜΟΣ Εντολές επιλογής και αποφάσεων 1 ο Φύλλο Εργασιών Εισαγωγικές ασκήσεις για την εντολή if ΑΠΑΝΤΗΣΕΙΣ

Κεφάλαιο , 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

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

HY340, 2009 Α. Σαββίδης. Slide 3 / 39. Slide 4 / 39

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal

Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής

Εισαγωγή στον Προγραμματισμό

Προγραμματισμός Ι (ΗΥ120)

Προγραμματισμός Η/Υ. Ενότητα 2β: Εισαγωγή στη C (Μέρος Δεύτερο)

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ PASCAL

Transcript:

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΗΥ340 ΕΑΡΙΝΟ ΕΞΑΜΗΝΟ 2010 Ι ΑΣΚΩΝ: ΑΝΤΩΝΙΟΣ ΣΑΒΒΙ ΗΣ ΒΑΣΙΚΗ ΕΡΓΑΣΙΑ ΦΑΣΗ 2η από 5 Ανάθεση: Πέµπτη 15 Απριλίου 2010, 11:00 (πρωί) Παράδοση: ευτέρα 26 Απριλίου 2010, 24:00 (µεσάνυχτα)

HY 340 / Εαρινό εξάµηνο 2010 Σελ 2 Γενικά Στη 2 η φάση θα κατασκευάσετε έναν απλό Συντακτικό Αναλυτή για τη γλώσσα alpha ο οποίος θα κάνει τα εξής: Εκτυπώνει στην έξοδο τους γραµµατικούς κανόνες όπως τους «ανάγει» κάθε φορά κατά τη διάρκεια της συντακτικής ανάλυσης. ιατηρεί κατάλληλο πίνακα συµβόλων symbol table (π.χ. για µεταβλητές και συναρτήσεις). Εκτυπώνει στο τέλος της συντακτικής ανάλυσης τον πίνακα σύµβόλων (άρα δεν θα κάνετε free κανένα σύµβολο θα δηµιουργήσουµε two-phase compiler), αναγράφοντας: το όνοµα του κάθε συµβόλου, τον τύπο του (π.χ. µεταβλητή, τυπικό όρισµα συνάρτησης, συνάρτηση προγραµµατιστή, συνάρτηση βιβλιοθήκης), τη γραµµή ορισµού (1 ης εµφάνισης) στον κώδικα (0 για συναρτήσεις βιβλιοθήκης) την εµβέλεια του (π.χ. τοπική ή καθολική). Αντικείµενο εργασίας Η κατασκευή του συντακτικού αναλυτή θα γίνει χρησιµοποιώντας το εργαλείο YACC (ή Bison) στη γλώσσα C ή C++, µε χρήση του Λεξικογραφικού Αναλυτή της 1 ης φάσης. Επιπλέον, θα θέσετε και τις βάσεις για την κατασκευή του πίνακα συµβόλων (πληροφορία βοηθητική υπάρχει σε εκτυπωµένο υλικό που θα σας δοθεί από τους βοηθούς). Γραµµατική Η γραµµατική της γλώσσας alpha δίνεται παρακάτω (τα σύµβολα και έχουν την ερµηνεία που γνωρίζετε ήδη από τις κανονικές εκφράσεις), ενώ ότι δίδεται ανάµεσα σε [ και ] σηµαίνει ότι είναι προαιρετικό προσοχή, µην τα συγχέετε µε τα tokens [ και ]: program stmt stmt expr ; ifstmt whilestmt forstmt returnstmt break ; continue; block funcdef ; expr assignexpr expr op expr term op + - * / % > >= < <= ==!= && term ( expr )

- expr! expr ++lvalue lvalue++ --lvalue lvalue primary HY 340 / Εαρινό εξάµηνο 2010 Σελ 3 assginexpr primary lvalue member lvalue = expr lvalue call objectdef ( funcdef ) const id local id :: id member lvalue. id lvalue [ expr ] call. id call [ expr ] call call ( elist ) lvalue callsuffix ( funcdef) ( elist ) callsuffix normcall methodcall normcall ( elist ) methodcall.. id ( elist ) // equivalent to lvalue.id(lvalue, elist) elist [ expr [, expr] ] objectdef [ [elist indexed] ] indexed [indexedelem [, indexedelem] ] indexedelem { expr : expr block { [stmt ] funcdef function [id] (idlist) block const number string nil true false idlist [id [, id] ]

ifstmt if ( expr ) stmt [ else stmt ] whilestmt while ( expr ) stmt forstmt for ( elist; expr; elist) stmt returnstmt return [expr]; HY 340 / Εαρινό εξάµηνο 2010 Σελ 4 Κανόνες προτεραιότητας και προσεταιριστικότητας Προτεραιότητα (υψηλή προς χαµηλή) () []...! ++ -- - * / % + - > >= < <= ==!= && = Προσεταιριστικότητα εν υφίσταται > >= < <= ==!= εξιά! ++ -- - Αριστερή Όλοι οι υπόλοιποι τελεστές Συναρτήσεις βιβλιοθήκης Οι παρακάτω συναρτήσεις θεωρούνται συναρτήσεις βιβλιοθήκης, που σηµαίνει ότι αντιµετωπίζονται ως ήδη δηλωµένα καθολικά αναγνωριστικά τύπου «library function». Έτσι ξεχωρίζουν από αυτές που είναι «user-defined function», δηλ. τις συναρτήσεις που ορίζει ο προγραµµατιστής. print input objectmemberkeys objecttotalmembers objectcopy totalarguments argument typeof strtonum sqrt cos sin

HY 340 / Εαρινό εξάµηνο 2010 Σελ 5 Χώροι εµβέλειας Οι συναρτήσεις βιβλιοθήκης, συναρτήσεις προγράµµατος, οι µεταβλητές και τα τυπικά ορίσµατα συναρτήσεων, συνιστούν όλα έναν ενιαίο χώρο ονοµάτων. Άρα, στον ίδιο χώρο εµβέλειας συγκρούονται. Επιπλέον, δεν επιτρέπεται να οριστεί µεταβλητή η συνάρτηση µε όνοµα ίδιο κάποιας συνάρτησης βιβλιοθήκης, δηλ. τα library functions δεν µπορούν ποτέ να γίνουν ποτέ «shadowed» από µεταβλητές ή συναρτήσεις χρήστη. εν επιτρέπεται να οριστεί µεταβλητή µε όνοµα συνάρτησης της οποίας η εµβέλεια είναι ενεργή Επίσης, το όνοµα µίας συνάρτησης χρήστη είναι πάντοτε r-value, δηλαδή δεν επιτρέπεται εκχώρηση σε αυτό (άρα είναι ουσιαστικά constant, όχι variable). Ως καθολική εµβέλεια (global) ορίζεται αυτή εκτός block και συνάρτησης (ως αντιστοιχία αυτό θα ισοδυναµούσε µε το χώρο καθολικών δηλώσεων της C). Όλες οι µεταβλητές και οι συναρτήσεις προγραµµατιστή που ορίζονται σε καθολική εµβέλεια, καθώς και οι συναρτήσεις βιβλιοθήκης, έχουν scope 0, το οποίο και σηµαίνει ουσιαστικά καθολική εµβέλεια (ή global scope). Η είσοδος σε block αυξάνει το scope κατά 1, ενώ η έξοδος από το block το µειώνει αντίστοιχα κατά 1. Η είσοδος σε ορισµό συνάρτησης σηµατοδοτείται από την παρένθεση πριν τα τυπικά ορίσµατα και αυξάνει το scope κατά 1, ενώ η έξοδος σηµατοδοτείται µε την έξοδο από το block της συνάρτησης µειώνοντας το scope κατά 1. o προσοχή (ειδική περίπτωση): το block της συνάρτησης δεν αυξάνει επιπλέον το scope κατά +1 άρα το κεντρικό block της συνάρτησης σε σύγκριση µε το scope πριν από την είσοδο στην συνάρτηση έχει διαφορά κατά +1 Όταν µειώνεται το scope, τότε όλες οι µεταβλητές και συναρτήσεις που έχουν οριστεί σε αυτό το scope απενεργοποιούνται, δηλ. δε σβήνονται, απλώς «µαρκάρονται» ως «µη χρησιµοποιήσιµες». Έτσι, όταν βγαίνουµε από ένα block ή ορισµό συνάρτησης, οι τοπικές µεταβλητές δεν είναι συντακτικά ορατές (syntactically visible). Σε µία συνάρτηση επιτρέπεται πρόσβαση µόνο σε: τοπικές µεταβλητές της ίδιας της συνάρτησης που είναι σε ορατή εµβέλεια (enclosing block) τυπικά ορίσµατα της ίδιας της συνάρτησης καθολικές µεταβλητές (δηλ. αυτές µόνο µε scope 0, ούτε καν αυτές που είναι σε καθολικά ορισµένο κώδικα, όµως µέσα σε κάποιο block) οποιεσδήποτε άλλες συναρτήσεις µε ενεργή εµβέλεια ηλ., µία συνάρτηση που ορίζεται µέσα σε µία άλλη ποτέ δεν έχει πρόσβαση σε καµία από τις µεταβλητές ή τα τυπικά ορίσµατα οποιασδήποτε ιεραρχικά περιέχουσας συνάρτησης. Επίσης, µία συνάρτηση που ορίζεται µέσα σε ένα block, ποτέ δεν θα έχει πρόσβαση στις µεταβλητές του block.

HY 340 / Εαρινό εξάµηνο 2010 Σελ 6 Κανόνες εµβέλειας αναγνωριστικών ονοµάτων Εάν χρησιµοποιείται ένα id µεταβλητής η συνάρτησης χρήστη / βιβλιοθήκης σε κάποιο εκάστοτε χώρο εµβέλειας τότε: εάν έχει ίδιο όνοµα µε κάποιο ενεργό αναγνωριστικό Α στην ίδια εµβέλεια τότε το id αναφέρεται σε αυτό το Α o αλλά, δεν επιτρέπεται να αλλάζει το είδος χρήσης ενός ονόµατος στην ίδια εµβέλεια: µία µεταβλητής δεν µπορεί ορίζεται εκ νέου ως συνάρτηση, ενώ µία συνάρτηση δεν µπορεί να χρησιµοποιείται ως µεταβλητή (είναι constant) x = 10; function x(){ // error: var redefined as a function function f(){ f = 10; // error: function used as an l-value αλλιώς εάν έχει ίδιο όνοµα µε κάποιο αναγνωριστικό Α σε περιέχουσα εµβέλεια στην οποία υπάρχει νόµιµη πρόσβαση τότε το id αναφέρεται σε αυτό το Α o Υπενθύµιση: δεν επιτρέπεται η πρόσβαση στις τοπικές µεταβλητές ή τυπικά ορίσµατα οποιασδήποτε περιέχουσας συνάρτησης σε συναρτήσεις η πρόσβαση είναι απολύτως νόµιµη. function f(y) { function g(x) { return x*y; // error: var f::y not accessible in g return g(x); function g() { function h() { return g(); // ::g is visible in g::h αλλιώς δηµιουργείται νέο αναγνωριστικό Α βάσει του id στην εµβέλεια αυτή και το id αναφέρεται σε αυτό το Α, µε τύπο ανάλογο µε το είδος της δήλωσης (µεταβλητή ή συνάρτηση) function f () { local f = 10; // f inside f is a new variable now function h () { return f;// error, f::f (local) not accessible in h return ::f(); // ok, we access global ::f Ειδικά στην περίπτωση τυπικών ορισµάτων συνάρτησης επειδή έχουµε ένα είδος δήλωσης πάντοτε δηµιουργούνται νέα αναγνωριστικά. Εάν χρησιµοποιείται το :: id σε κάποιο εκάστοτε χώρο εµβέλειας τότε: εάν έχει ίδιο όνοµα µε κάποιο αναγνωριστικό Α σε καθολική εµβέλεια (scope 0, εκτός block) τότε το ::id αναφέρεται στο καθολικό Α αλλιώς µήνυµα λάθους «δεν βρέθηκε το καθολικό id» Εάν χρησιµοποιείται το local id σε κάποιο χώρο εµβέλειας (οποιονδήποτε) τότε: εάν έχει ίδιο όνοµα µε κάποια µεταβλητή Α ή συνάρτηση στην ίδια ακριβώς εµβέλεια τότε το local id αναφέρεται στη µεταβλητή ή συνάρτηση Α, αλλιώς εάν δεν υπάρχει σύγκρουση µε όνοµα συνάρτησης βιβλιοθήκης (error) δηµιουργείται νέα µεταβλητή Α βάσει του id στην εµβέλεια αυτή και το local id αναφέρεται σε αυτό το Α.

HY 340 / Εαρινό εξάµηνο 2010 Σελ 7 Για τα είδη των µεταβλητών, έχουµε ουσιαστικά τρεις γενικές κατηγορίες, όπως φαίνεται παρακάτω. Να αποθηκεύετε και αυτή την κατηγορία στον πίνακα συµβόλων, θα δούµε ότι θα µας χρησιµεύσει ιδιαίτερα στην παραγωγή κώδικα. 1. global (scope 0), 2. τυπικά ορίσµατα 3. και τοπικές µεταβλητές (scope >= 0 και όχι τυπικά ορίσµατα) Παραδείγµατα input(x); print(typeof(x)); ::print(::typeof(::x)); function g(x,y) { print(x+y); local print = y; ::print(print); function h() { return x+y; return h; add = (function(x,y){return x+y; ); { local x = ::x; local f = (function(){return x; ); function f(a,b) { local a = local b; Αυτόµατη δήλωση global x, χρήση global input library function χρήση global print, typeof και x χρήση global print, typeof και x g global, x,y local µε scope 1, τυπικά ορίσµατα x, y είναι τα arguments (local) της συνάρτησης g error δεν επιτρέπεται shadowing of library functions και τα δύο αναφέρονται στο print library function νέα συνάρτηση h µε scope 1 error τα x και y είναι formal της g. το h είναι η αναγνωριστικό τοπικής συνάρτησης µε scope 1 το add είναι global, τα x,y είναι local arguments µε scope 1. το x είναι νέο local µε scope 1, το ::x είναι το global x. το f είναι νέο local µε scope 1, η πρόσβαση στο x είναι το προηγούµενο local µε scope 1 (εκτός της f, αλλά όχι top global δηλ. error reporting). τα a,b είναι arguments µε scope 1 τα local a και local b είναι αναφορές στα τυπικά ορίσµατα (αφού είναι στο ίδιο scope) Ποσοστά συµµετοχής 1 η φάση 5% 2 η φάση 10% 3 η φάση 40% 4 η φάση 10% 5 η φάση 35%