ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΗΥ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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Pascal. 15 Νοεμβρίου 2011

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

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

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

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

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

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ

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

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

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

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

Λογικός τύπος Τελεστές σύγκρισης Λογικοί τελεστές Εντολές επιλογής Εμβέλεια Μαθηματικές συναρτήσεις Μιγαδικός τύπος ΔΕΥΤΕΡΗ ΔΙΑΛΕΞΗ

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

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

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

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

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

Pascal, απλοί τύποι, τελεστές και εκφράσεις

ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡ/ΣΜΟΣ C++

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

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

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

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

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

Σχεδίαση Γλωσσών Προγραμματισμού Λεξική Ανάλυση Ι. Εαρινό Εξάμηνο Lec 05 & & 26 /02/2019 Διδάσκων: Γεώργιος Χρ.

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

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

Κεφάλαιο 4 Σημασιολογία μιας Απλής Προστακτικής Γλώσσας

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Προγραμματισμός Η/Υ

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

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

Ρητή μετατροπή αριθμητικής τιμής σε άλλο τύπο. Τι θα τυπωθεί στον παρακάτω κώδικα;

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

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

Σύντομες εισαγωγικές σημειώσεις για την. Matlab

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

Γλώσσες Προγραμματισμού Μεταγλωττιστές

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

ΤΕΜ-101 Εισαγωγή στους Η/Υ Εξεταστική Ιανουαρίου 2011 Θέματα Β

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

Πολλοί τρόποι περιγραφής αλγορίθμων. Όλοι είναι μηχανιστικά ισοδύναμοι και ειδικά ισοδύναμοι με μερικές αναδρομικές συναρτήσεις.

Υπο-προγράμματα στη Fortran

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

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

Περιεχόμενα. Πρόλογος...11

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

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

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

Αντικειμενοστρεφής Προγραμματισμός -Python. Κ.Π. Γιαλούρης

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

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

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

Transcript:

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

HY 340 / Εαρινό εξάμηνο 2008 Σελ 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 / Εαρινό εξάμηνο 2008 Σελ 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 / Εαρινό εξάμηνο 2008 Σελ 4 Κανόνες προτεραιότητας και προσεταιριστικότητας Προτεραιότητα (υψηλή προς χαμηλή) () []...! ++ -- - * / % + - > >= < <= ==!= && = Προσεταιριστικότητα Δεν υφίσταται > >= < <= ==!= Δεξιά! ++ -- - Αριστερή Όλοι οι υπόλοιποι τελεστές Συναρτήσεις βιβλιοθήκης Οι παρακάτω συναρτήσεις θεωρούνται συναρτήσεις βιβλιοθήκης, που σημαίνει ότι αντιμετωπίζονται ως ήδη δηλωμένα καθολικά αναγνωριστικά τύπου «library function». Έτσι ξεχωρίζουν από αυτές που είναι «user-defined function», δηλ. τις συναρτήσεις που ορίζει ο προγραμματιστής. print input objectmemberkeys objecttotalmembers objectcopy totalarguments argument typeof strtonum sqrt cos sin

HY 340 / Εαρινό εξάμηνο 2008 Σελ 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. Όταν μειώνεται το scope, τότε όλες οι μεταβλητές και συναρτήσεις που έχουν οριστεί σε αυτό το scope απενεργοποιούνται, δηλ. δε σβήνονται, απλώς «μαρκάρονται» ως «μη χρησιμοποιήσιμες». Έτσι, όταν βγαίνουμε από ένα block ή ορισμό συνάρτησης, οι τοπικές μεταβλητές δεν είναι συντακτικά ορατές (syntactically visible). Σε μία συνάρτηση επιτρέπεται πρόσβαση μόνο σε: τοπικές μεταβλητές της ίδιας της συνάρτησης που είναι σε ορατή εμβέλεια τυπικά ορίσματα της ίδιας της συνάρτησης καθολικές μεταβλητές (δηλ. αυτές μόνο με scope 0, ούτε καν αυτές που είναι σε καθολικά ορισμένο κώδικα, όμως μέσα σε κάποιο block) οποιεσδήποτε άλλες συναρτήσεις με ενεργή εμβέλεια Δηλ., μία συνάρτηση που ορίζεται μέσα σε μία άλλη ποτέ δεν έχει πρόσβαση σε καμία από τις μεταβλητές ή τα τυπικά ορίσματα οποιασδήποτε ιεραρχικά περιέχουσας συνάρτησης. Επίσης, μία συνάρτηση που ορίζεται μέσα σε ένα block, ποτέ δεν θα έχει πρόσβαση στις μεταβλητές του block.

HY 340 / Εαρινό εξάμηνο 2008 Σελ 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() { retun g(); // ::g is visible in g::h αλλιώς δημιουργείται νέο αναγνωριστικό Α βάσει του id στην εμβέλεια αυτή και το id αναφέρεται σε αυτό το Α, με τύπο ανάλογο με το είδος της δήλωσης (μεταβλητή ή συνάρτηση) function f () { local f = 10; // f::f is a variable now function h () { return f();// error, f::f not accessible in h return ::f(); // ok, we access global ::f Εάν χρησιμοποιείται το :: id σε κάποιο εκάστοτε χώρο εμβέλειας τότε: εάν έχει ίδιο όνομα με κάποιο αναγνωριστικό Α σε καθολική εμβέλεια (scope 0, εκτός block) τότε το ::id αναφέρεται στο καθολικό Α αλλιώς μήνυμα λάθους «δεν βρέθηκε το καθολικό id» Εάν χρησιμοποιείται το local id σε κάποιο χώρο εμβέλειας (οποιοδήποτε) τότε: εάν έχει ίδιο όνομα με κάποια μεταβλητή Α στην ίδια ακριβώς εμβέλεια τότε το local id αναφέρεται στη μεταβλητή Α, εάν έχει ίδιο όνομα με συνάρτηση Α στην ίδια ακριβώς εμβέλεια τότε έχουμε μήνυμα λάθους ότι ορίζουμε υπάρχουσα συνάρτηση πλέον ως μεταβλητή αλλιώς δημιουργείται νέο αναγνωριστικό Α βάσει του id στην εμβέλεια αυτή και το local id αναφέρεται σε αυτό το Α.

HY 340 / Εαρινό εξάμηνο 2008 Σελ 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 2 error τα x και y είναι formal της g. το h είναι η αναγνωριστικό τοπικής συνάρτησης με scope 2 το add είναι global, τα x,y είναι local arguments με scope 1. το x είναι νέο local με scope 1, το ::x είναι το global x. το f είναι νέο local με scope 1, το x είναι το προηγούμενο local με scope 2 (άρα error reporting). τα a,b είναι arguments με scope 1 τα a,b είναι νέα locals με scope 2 (κρύβουν τα arguments αλλά είναι απολύτως νόμιμο! ένα warning επιβάλλεται σε αυτή την περίπτωση) Ποσοστά συμμετοχής 1 η φάση 5% 2 η φάση 10% 3 η φάση 40% 4 η φάση 10% 5 η φάση 35%