Ç ãëþóóá Alan. ÌåôáãëùôôéóôÝò 2011 ÈÝìá åñãáóßáò

Σχετικά έγγραφα
Μεταγλωττιστές 2018 Θέμα εργασίας

Ç ãëþóóá Grace. ÌåôáãëùôôéóôÝò 2009 ÈÝìá åñãáóßáò

Μεταγλωττιστές 2017 Θέμα εργασίας

Ç ãëþóóá Dana. ÌåôáãëùôôéóôÝò 2008 ÈÝìá åñãáóßáò

Ç ãëþóóá Tony. ÌåôáãëùôôéóôÝò 2010 ÈÝìá åñãáóßáò

Μεταγλωττιστές 2019 Θέμα εργασίας

ÓÕÍÄÕÁÓÔÉÊÇ É, ÓÅÐÔÅÌÂÑÉÏÓ ÏÌÁÄÁ ÈÅÌÁÔÙÍ B

ÓÕÍÄÕÁÓÔÉÊÇ É, ÓÅÐÔÅÌÂÑÉÏÓ ÏÌÁÄÁ ÈÅÌÁÔÙÍ Á

Τυπικές Γλώσσες. Μεταγλωττιστές. (μέρος 1ο) Νίκος Παπασπύου, Κωστής Σαγώνας

ÊåöÜëáéï 3 ÏÑÉÆÏÕÓÅÓ. 3.1 ÅéóáãùãÞ

ÊåöÜëáéï 4 ÄÉÁÍÕÓÌÁÔÁ. 4.1 ÅéóáãùãÞ (ÃåùìåôñéêÞ)

Ó ÅÄÉÁÓÌÏÓ - ÊÁÔÁÓÊÅÕÇ ÓÔÏÌÉÙÍ & ÅÉÄÉÊÙÍ ÅÎÁÑÔÇÌÁÔÙÍ ÊËÉÌÁÔÉÓÌÏÕ V X

( ) ξî τέτοιο, + Ý åé ìßá ôïõëü éóôïí ñßæá óôï äéüóôçìá ( ) h x =,να δείξετε ότι υπάρχει ( α,β) x ΕΦΑΡΜΟΓΕΣ ΣΤΙΣ ΠΑΡΑΓΩΓΟΥΣ

16. ÌåëÝôç ôùí óõíáñôþóåùí y=çìx, y=óõíx êáé ôùí ìåôáó çìáôéóìþí ôïõò.

Τυπικές Γλώσσες. Μεταγλωττιστές. (μέρος 2ο) Νίκος Παπασπύου, Κωστής Σαγώνας

ÊåöÜëáéï 5 ÄÉÁÍÕÓÌÁÔÉÊÏÉ ÙÑÏÉ. 5.1 ÅéóáãùãÞ. 56 ÊåöÜëáéï 5. ÄÉÁÍÕÓÌÁÔÉÊÏÉ ÙÑÏÉ

ÄéáêñéôÝò êáé óõíå åßò ôõ áßåò ìåôáâëçôýò ÁóêÞóåéò

Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο. Λεκτική Ανάλυση. Μεταγλωττιστές. Νίκος Παπασπύου, Κωστής Σαγώνας

Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Μεταγλωττιστές Ενδιάμεσος Κώδικας Νίκος Παπασπύου, Κωστής Σαγώνας

3.1 Íá âñåèåß ôï ðåäßï ïñéóìïý ôçò óõíüñôçóçò f: 4 x. (iv) f(x, y, z) = sin x 2 + y 2 + 3z Íá âñåèïýí ôá üñéá (áí õðüñ ïõí): lim

ÓÕÍÈÇÊÇ ÁÌÅÔÁÈÅÔÏÔÇÔÁÓ ÓÕÓÔÇÌÁÔÏÓ ÔÏÉ ÙÌÁÔÙÍ ÐÁÑÁÑÔÇÌÁ Â

ÏñãÜíùóç ÐñïãñÜììáôïò

ΕΛΕΝΗ ΓΕΡΟΥΛΑΝΟΥ. Εικονογράφηση ΔΡΑΣΤΗΡΙΟΤΗΤΕΣ ΓΙΑ ΠΑΙΔΙΑ ΝΗΠΙΑΓΩΓΕΙΟΥ ΛΗΔΑ ΒΑΡΒΑΡΟΥΣΗ ΕΚΔΟΣΕΙΣ ΠΑΠΑΔΟΠΟΥΛΟΣ

7. ÂáóéêÜ óôïé åßá ðñïãñáììáôéóìïý

Μεταγλωττιστές 2015 Θέμα εργασίας. Η γλώσσα Tony. Sir Charles Antony (Tony) Richard Hoare (1934 ) Prof. Emeritus, Oxford University.

2.4 ñçóéìïðïéþíôáò ôïí êáíüíá áëõóßäáò íá âñåèåß ç dr

3.1 H Ýííïéá ôçò óõíüñôçóçò ÐÁÑÁÄÅÉÃÌÁÔÁ - ÅÖÁÑÌÏÃÅÓ

Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο. Εισαγωγή. Μεταγλωττιστές. Νίκος Παπασπύου, Κωστής Σαγώνας

Ανώτερα Μαθηματικά Ι. Ανοικτά Ακαδημαϊκά Μαθήματα. Ενότητα 7: Οριακή Τιμή Συνάρτησης. Αθανάσιος Μπράτσος. Τμήμα Ναυπηγών Μηχανικών ΤΕ

1.1 Ïé öõóéêïß áñéèìïß - ÄéÜôáîç öõóéêþí, Óôñïããõëïðïßçóç

¼ñãáíá Èåñìïêñáóßáò - ÓõóêåõÝò Øõêôéêþí Ìç áíçìüôùí

Áóõìðôùôéêïß Óõìâïëéóìïß êáé Éåñáñ ßá ÓõíáñôÞóåùí

Συντακτική ανάλυση. Μεταγλωττιστές. (μέρος 3ον) Νίκος Παπασπύου, Κωστής Σαγώνας

Estimation Theory Exercises*

ÁðáñéèìçôÝò- ÓõãêñéôÝò

ιαδικασία åãêáôüóôáóçò MS SQL Server, SingularLogic Accountant, SingularLogic Accountant Ìéóèïäïóßá

ÐÉÍÁÊÅÓ ÔÉÌÙÍ ÁÍÔÉÊÅÉÌÅÍÉÊÙÍ ÁÎÉÙÍ

ÏÑÉÁÊÇ ÔÉÌÇ ÓÕÍÁÑÔÇÓÇÓ

ÖÅÊ 816 ÅÖÇÌÅÑÉÓ ÔÇÓ ÊÕÂÅÑÍÇÓÅÙÓ (ÔÅÕ ÏÓ ÄÅÕÔÅÑÏ) ÏÄÇÃÉÅÓ ÐÁ ÔÇ ÓÕÌÐËÇÑÙÓÇ ÔÇÓ ÁÉÔÇÓÇÓ ÅÃÊÅÊÑÉÌÅÍÏÕ ÁÐÏÈÇÊÅÕÔÇ Ï ÇÌÁÔÙÍ 1. ÇÌÅÑÏÌÇÍÉÁ: ÁíáãñÜöåô

ÌÁÈÇÌÁÔÉÊÇ ËÏÃÉÊÇ Ë1 5ï ðáêýôï áóêþóåùí

Cel animation. ÅöáñìïãÝò ðïëõìýóùí

å) Íá âñåßôå ôï äéüóôçìá ðïõ äéáíýåé ôï êéíçôü êáôü ôï ñïíéêü äéüóôçìá áðü ôï ðñþôï Ýùò ôï Ýâäïìï äåõôåñüëåðôï ôçò êßíçóþò ôïõ.

8. ÅðéëïãÞ êáé åðáíüëçøç

9. ÁíÜðôõîç ðñïãñáììüôùí ìå ñïíéêýò ëåéôïõñãßåò.

ÁíÜðôõîç åöáñìïãþí óå ðñïãñáììáôéóôéêü ðåñéâüëëïí

Óõíå Þ êëüóìáôá & Áöáéñåôéêüò Åõêëåßäåéïò áëãüñéèìïò

ÓÅÉÑÅÓ TAYLOR ÊÁÉ LAURENT

Σημασιολογική ανάλυση

Ãëþóóá ôåôñüäùí. ÌïñöÞ ôåôñüäáò: n: op, x, y, z üðïõ:

1. i) ÊÜèå üñïò ðñïêýðôåé áðü ôçí ðñüóèåóç ôïõ óôáèåñïý áñéèìïý 3 óôïí ðñïçãïýìåíï, ïðüôå Ý ïõìå áñéèìçôéêþ ðñüïäï á í ìå ðñþôï üñï

B i o f l o n. Ãéá åöáñìïãýò ìåôáöïñüò çìéêþí

Íá èõìçèïýìå ôç èåùñßá...

Η γλώσσα Edsger. Μεταγλωττιστές 2016 Θέμα εργασίας

ÅÍÏÔÇÔÁ 6ç ÑÏÍÏÓ-ÄÉÁÄÏ Ç

Ενότητα 7: Διαδικασιακός Προγραμματισμός

SPLINES. ÌÜèçìá ÓõíÜñôçóç spline Ïñéóìïß êáé ó åôéêü èåùñþìáôá

Chi-Square Goodness-of-Fit Test*

ÐïëëÝò åôáéñßåò ðñïóöýñïõí õðçñåóßåò

ÐÑÏÓÅÃÃÉÓÇ ÐÁÑÁÃÙÃÙÍ

ÅñãáóôÞñéï 1. ÄïìÝò ÄåäïìÝíùí. 1.1 Óôü ïé. 1.2 Áðáñáßôçôï Õëéêü

Ðñïêýðôïõí ôá ðáñáêüôù äéáãñüììáôá.

Ανώτερα Μαθηματικά Ι. Ανοικτά Ακαδημαϊκά Μαθήματα. Ενότητα 11: Διανυσματική Συνάρτηση. Αθανάσιος Μπράτσος. Τμήμα Ναυπηγών Μηχανικών ΤΕ

Program first(input, output); begin. end {first}.

1. Íá ëõèåß ç äéáöïñéêþ åîßóùóç (15 ìïí.) 2. Íá âñåèåß ç ãåíéêþ ëýóç ôçò äéáöïñéêþò åîßóùóçò (15 ìïí.)

Σχολή Εφαρμοσμένων Μαθηματικών και Φυσικών Επιστημών Εθνικό Μετσόβιο Πολυτεχνείο. Μαθηματική Λογική. Αναδρομικές Συναρτήσεις.

3524 ÅÖÇÌÅÑÉÓ ÔÇÓ ÊÕÂÅÑÍÇÓÅÙÓ (ÔÅÕ ÏÓ ÄÅÕÔÅÑÏ)

: Ï ðáñþí ïäçãüò åîçãåß ôïí ôñüðï ñþóçò ðñïáéñåôéêþí åîùôåñéêþí óõóêåõþí ìå ôïí õðïëïãéóôþ.

ÓÔÁÔÉÊÏÓ ÇËÅÊÔÑÉÓÌÏÓ Ðåñéå üìåíá

ÌÉÃÁÄÉÊÅÓ ÓÕÍÁÑÔÇÓÅÉÓ

DOS Microsoft Windows... 65

Ανώτερα Μαθηματικά Ι. Ανοικτά Ακαδημαϊκά Μαθήματα. Ενότητα 8: Συνέχεια Συνάρτησης. Αθανάσιος Μπράτσος. Τμήμα Ναυπηγών Μηχανικών ΤΕ

ÓÕÍÅ ÅÉÁ ÓÕÍÁÑÔÇÓÇÓ. 8.1 ÃåíéêÝò Ýííïéåò êáé ïñéóìïß

Union of Pure and Applied Chemistry).

4.5 ÁóêÞóåéò çìéêþò éóïññïðßáò ìå åðßäñáóç óôç èýóç éóïññïðßáò

ÓÕÍÁÑÔÇÓÅÉÓ ÐÏËËÙÍ ÌÅÔÁÂËÇÔÙÍ

ÁñéèìçôéêÞ ÁíÜëõóç É - ÓÅÌÖÅ Åñãáóßá 2 ìåóåò êáé åðáíáëçðôéêýò ìýèïäïé

Κίνδυνοι στο facebook WebQuest Description Grade Level Curriculum Keywords

Üóêçóç 15. ÕëéêÜ - åîáñôþìáôá äéêôýïõ ðåðéåóìýíïõ áýñá êáé ðíåõìáôéêýò óõóêåõýò

[ ] ÐáñÜñôçìá É : Éóüôñïðåò ôáíõóôéêýò óõíáñôþóåéò 1. Ïñéóìüò: Ï óõììåôñéêüò ôáíõóôþò B êáëåßôáé éóüôñïðç óõíüñôçóç ôïõ óõììåôñéêïý ôáíõóôþ A (Á.

Η γλώσσα Pazcal Μεταγλωττιστές

Ανώτερα Μαθηματικά Ι. Ανοικτά Ακαδημαϊκά Μαθήματα. Ενότητα 15: Ορισμένο Ολοκλήρωμα Μέρος ΙΙΙ - Εφαρμογές. Αθανάσιος Μπράτσος

ÅõñùðáúêÞ íùóç Áëïõìéíßïõ Ý åé äçìïóéåýóåé Ýíáí ìßíé - ïäçãü åðåîþãçóçò

ÐÑÏÓÅÃÃÉÓÇ ÅËÁ ÉÓÔÙÍ ÔÅÔÑÁÃÙÍÙÍ

ÁÑÉÈÌÇÔÉÊÇ ËÕÓÇ ÓÕÍÇÈÙÍ ÄÉÁÖÏÑÉÊÙÍ ÅÎÉÓÙÓÅÙÍ

ÄÉÁÍÕÓÌÁÔÉÊÏÓ ÄÉÁÖÏÑÉÊÏÓ ËÏÃÉÓÌÏÓ

ôéò óçìåéþóåéò Þ ôï âéâëßï ôïõ ìáèþìáôïò (åöüóïí Ý ïõí ìïéñáóôåß).

Ìáèáßíïõìå ôéò áðïäåßîåéò

ΣΕΡΙΦΟΣ ΣΕΡΙΦΟΥ ΓΑΛΑΝΗΣ

ÓÅÉÑÅÓ. ÌÜèçìá Áêïëïõèßåò áñéèìþí Ïñéóìüò áêïëïõèßáò

Προτεινόμενα θέματα Πανελλαδικών εξετάσεων. Χημεία Θετικής Κατεύθυνσης ΕΛΛΗΝΟΕΚΔΟΤΙΚΗ

Artwork Package GK Issue 2.0

Μαθηματικά ΙΙΙ. Ανοικτά Ακαδημαϊκά Μαθήματα. Ενότητα 15: Προσέγγιση συνήθων διαφορικών εξισώσεων Μέρος Ι. Αθανάσιος Μπράτσος

ÅñãáóôÞñéï 5. ÄïìÝò ÄåäïìÝíùí. 5.1 Óôü ïé. 5.2 Áðáñáßôçôï Õëéêü. 5.3 Ðñïåôïéìáóßá ôïõ Ç/Õ

Ανώτερα Μαθηματικά Ι. Ανοικτά Ακαδημαϊκά Μαθήματα. Ενότητα 5: Μιγαδικές Συναρτήσεις. Αθανάσιος Μπράτσος. Τμήμα Ναυπηγών Μηχανικών ΤΕ

ÄÉÁÍÕÓÌÁÔÉÊÅÓ ÓÕÍÁÑÔÇÓÅÉÓ

Μαθηματικά ΙΙΙ. Ανοικτά Ακαδημαϊκά Μαθήματα. Ενότητα 16: Προσέγγιση συνήθων διαφορικών εξισώσεων Μέρος ΙΙ. Αθανάσιος Μπράτσος

ÁíÜðôõîç åöáñìïãþí óå ðñïãñáììáôéóôéêü ðåñéâüëëïí

Ανώτερα Μαθηματικά Ι. Ανοικτά Ακαδημαϊκά Μαθήματα. Ενότητα 12: Αόριστο Ολοκλήρωμα. Αθανάσιος Μπράτσος. Τμήμα Ναυπηγών Μηχανικών ΤΕ

MultiBoot :

Αποκαλύπτουµε το µυστικό υπερόπλο του Μεσαίωνα

Transcript:

Åèíéêü Ìåôóüâéï Ðïëõôå íåßï Ó ïëþ Çëåêôñïëüãùí Ìç áíéêþí & Ìç áíéêþí Õðïëïãéóôþí ÔïìÝáò Ôå íïëïãßáò ÐëçñïöïñéêÞò & Õðïëïãéóôþí ÅñãáóôÞñéï Ôå íïëïãßáò Ëïãéóìéêïý ÌåôáãëùôôéóôÝò 0 ÈÝìá åñãáóßáò Ç ãëþóóá Alan Alan Mathison Turing (11{1) ÌåôáãëùôôéóôÝò http://courses.softlab.ntua.gr/compilers/ ÄéäÜóêïíôåò: Âïçèïß: Íßêïò Ðáðáóðýñïõ ÊùóôÞò Óáãþíáò Ðñüäñïìïò Ãåñáêéüò Ãéþñãïò ÊïñöéÜôçò ããåëïò Ìáíïõóáñßäçò Ìé Üëçò ÐáðáêõñéÜêïõ ÁèÞíá, ÌÜñôéïò 0

ÈÅÌÁ: Íá ó åäéáóôåß êáé íá õëïðïéçèåß áðü êüèå ïìüäá äýï óðïõäáóôþí Ýíáò ìåôáãëùôôéóôþò ãéá ôç ãëþóóá Alan. Ãëþóóá õëïðïßçóçò ìðïñåß íá åßíáé ìßá áðü ôéò C/C++, Java, SML Þ OCaml. Ç åðéëïãþ êüðïéáò Üëëçò ãëþóóáò õëïðïßçóçò ìðïñåß íá ãßíåé êáôüðéí óõíåííüçóçò ìå ôïõò äéäüóêïíôåò. ÅðéôñÝðåôáé íá ñçóéìïðïéçèïýí êáé åðßóçò óõíéóôüôáé ç ñþóç åñãáëåßùí, ð.. flex/ml-lex/ocamllex, bison/ml-yacc/ocamlyacc, JavaCC, ê.ëð. Ðåñéóóüôåñåò ðëçñïöïñßåò ó åôéêýò ìå áõôü ôá åñãáëåßá èá äïèïýí óôéò ðáñáäüóåéò ôïõ åñãáóôçñßïõ. ÐáñáäïôÝá, çìåñïìçíßåò êáé âáèìïëüãçóç Ôá ôìþìáôá ôïõ ìåôáãëùôôéóôþ êáé ç êáôáíïìþ ìïíüäùí öáßíïíôáé óôïí ðáñáêüôù ðßíáêá. Ïé çìåñïìçíßåò ðáñüäïóçò áíáãñüöïíôáé óôç óåëßäá ôïõ ìáèþìáôïò. ÔìÞìá ôïõ ìåôáãëùôôéóôþ ÌïíÜäåò Bonus Ëåêôéêüò áíáëõôþò 0. { Óõíôáêôéêüò áíáëõôþò 0. { Óçìáóéïëïãéêüò áíáëõôþò 1.0 { ÅíäéÜìåóïò êþäéêáò 1.0 { Âåëôéóôïðïßçóç 1.0 1.0 Ôåëéêüò êþäéêáò 1.0 1.0 ÓõíïëéêÞ åñãáóßá êáé Ýêèåóç.0.0 Ãéá ôá äéüöïñá ôìþìáôá ôçò åñãáóßáò ðñýðåé íá ðáñáäßäåôáé åìðñüèåóìá áðü êüèå ïìüäá ï áíôßóôïé ïò êþäéêáò óå çëåêôñïíéêþ ìïñöþ, êáèþò êáé óáöåßò ïäçãßåò ãéá ôçí ðáñáãùãþ åíüò åêôåëýóéìïõ ðñïãñüììáôïò åðßäåéîçò ôçò ëåéôïõñãßáò ôïõ áíôßóôïé ïõ ôìþìáôïò, áðü ôïí êþäéêá áõôüí. ÊáèõóôåñçìÝíåò áóêþóåéò èá âáèìïëïãïýíôáé ìå ìéêñüôåñï âáèìü, áíôéóôñüöùò áíüëïãá ðñïò ôï ñüíï êáèõóôýñçóçò. Ðáñáêáëïýìå, ìçí ðáñáäßäåôå ôõðùìýíåò åñãáóßåò! ÐñïáéñåôéêÜ ôìþìáôá êáé ìïíüäåò bonus Ôï óýíïëï ôùí ìïíüäùí ôçò ðáñïýóáò åñãáóßáò åßíáé. Áðü áõôýò, ïé ìïíüäåò åßíáé bonus (ðïõ óçìáßíåé üôé ôï óýíïëï ìïíüäùí ôïõ ìáèþìáôïò åßíáé 1) êáé áíôéóôïé ïýí óå ôìþìáôá ôçò åñãáóßáò ðïõ åßíáé ðñïáéñåôéêü. ÓõãêåêñéìÝíá: (0%) Âåëôéóôïðïßçóç åíäéüìåóïõ êþäéêá. ÏôéäÞðïôå áðáéôåß áíüëõóç ñïþò åëýã ïõ Þ/êáé áíüëõóç ñïþò äåäïìýíùí. (0%) ÄÝóìåõóç êáôá ùñçôþí êáé âåëôéóôïðïßçóç ôåëéêïý êþäéêá.

Ðåñéå üìåíá 1 ÐåñéãñáöÞ ôçò ãëþóóáò Alan 1.1 ËåêôéêÝò ìïíüäåò.................................... 1. Ôýðïé äåäïìýíùí.................................... 1. ÄïìÞ ôïõ ðñïãñüììáôïò................................ 1..1 ÌåôáâëçôÝò................................... 1.. ÓõíáñôÞóåéò................................... 1. ÅêöñÜóåéò êáé óõíèþêåò................................ 1..1 L-values..................................... 1.. ÓôáèåñÝò.................................... 1.. ÔåëåóôÝò.................................... 1.. ÊëÞóç óõíáñôþóåùí.............................. 1. ÅíôïëÝò......................................... 1. ÂéâëéïèÞêç Ýôïéìùí óõíáñôþóåùí........................... 1..1 Åßóïäïò êáé Ýîïäïò............................... 1.. ÓõíáñôÞóåéò ìåôáôñïðþò............................ 1.. ÓõíáñôÞóåéò äéá åßñéóçò óõìâïëïóåéñþí................... ÐëÞñçò ãñáììáôéêþ ôçò Alan Ðáñáäåßãìáôá.1 Ðåò ãåéá!........................................ 1. Ïé ðýñãïé ôïõ Hanoi.................................. 1. Ðñþôïé áñéèìïß..................................... 1. ÁíôéóôñïöÞ óõìâïëïóåéñüò............................... 1. Ôáîéíüìçóç ìå ôç ìýèïäï ôçò öõóáëßäáò....................... 1 Ïäçãßåò ãéá ôçí ðáñüäïóç 1

1 1 1 1 1 1 1 1 1 0 1 0 1 1 ÐåñéãñáöÞ ôçò ãëþóóáò Alan Ç ãëþóóá Alan åßíáé ìéá áðëþ ãëþóóá ðñïóôáêôéêïý ðñïãñáììáôéóìïý. Ôá êýñéá áñáêôçñéóôéêü ôçò åí óõíôïìßá åßíáé ôá åîþò: ÁðëÞ äïìþ êáé óýíôáîç åíôïëþí êáé åêöñüóåùí. Âáóéêïß ôýðïé äåäïìýíùí ãéá áêýñáéïõò áñéèìïýò äýï ìåãåèþí êáé ìïíïäéüóôáôïé ðßíáêåò. ÁðëÝò óõíáñôþóåéò, ðýñáóìá êáô' áîßá Þ êáô' áíáöïñü. ÅìâÝëåéá ìåôáâëçôþí üðùò óôçí Pascal. ÂéâëéïèÞêç óõíáñôþóåùí. Ðåñéóóüôåñåò ëåðôïìýñåéåò ôçò ãëþóóáò äßíïíôáé óôéò ðáñáãñüöïõò ðïõ áêïëïõèïýí. 1.1 ËåêôéêÝò ìïíüäåò Ïé ëåêôéêýò ìïíüäåò ôçò ãëþóóáò Alan ùñßæïíôáé óôéò ðáñáêüôù êáôçãïñßåò: Ôéò ëýîåéò êëåéäéü, ïé ïðïßåò åßíáé ïé ðáñáêüôù: byte else false if int proc reference return while true Ôá ïíüìáôá, ôá ïðïßá áðïôåëïýíôáé áðü Ýíá ãñüììá ôïõ ëáôéíéêïý áëöáâþôïõ, ðéèáíþò áêïëïõèïýìåíï áðü ìéá óåéñü ãñáììüôùí, äåêáäéêþí øçößùí Þ áñáêôþñùí õðïãñüììéóçò (underscore). Ôá ïíüìáôá äåí ðñýðåé íá óõìðßðôïõí ìå ôéò ëýîåéò êëåéäéü ðïõ áíáöýñèçêáí ðáñáðüíù. Ôéò áêýñáéåò óôáèåñýò ùñßò ðñüóçìï, ðïõ áðïôåëïýíôáé áðü Ýíá Þ ðåñéóóüôåñá äåêáäéêü øçößá. Ðáñáäåßãìáôá áêýñáéùí óôáèåñþí åßíáé ôá áêüëïõèá: 0 1 0000 Ôïõò óôáèåñïýò áñáêôþñåò, ðïõ áðïôåëïýíôáé áðü Ýíá áñáêôþñá ìýóá óå áðëü åéóáãùãéêü. Ï áñáêôþñáò áõôüò ìðïñåß íá åßíáé ïðïéïóäþðïôå êïéíüò áñáêôþñáò Þ áêïëïõèßá äéáöõãþò (escape sequence). Êïéíïß áñáêôþñåò åßíáé üëïé ïé åêôõðþóéìïé áñáêôþñåò ðëçí ôùí áðëþí êáé äéðëþí åéóáãùãéêþí êáé ôïõ áñáêôþñá \ (backslash). Ïé áêïëïõèßåò äéáöõãþò îåêéíïýí ìå ôï áñáêôþñá \ (backslash) êáé ðåñéãñüöïíôáé óôïí ðßíáêá 1. Ðáñáäåßãìáôá óôáèåñþí áñáêôþñùí åßíáé ïé áêüëïõèåò: 'a' '1' '\n' '\'' '\x1d' Ôéò óôáèåñýò óõìâïëïóåéñýò, ðïõ áðïôåëïýíôáé áðü ìéá áêïëïõèßá êïéíþí áñáêôþñùí Þ áêïëïõèéþí äéáöõãþò ìýóá óå äéðëü åéóáãùãéêü. Ïé óõìâïëïóåéñýò äåí ìðïñïýí íá åêôåßíïíôáé óå ðåñéóóüôåñåò áðü ìéá ãñáììýò ðñïãñüììáôïò. Ðáñáäåßãìáôá óôáèåñþí óõìâïëïóåéñþí åßíáé ïé áêüëïõèåò: "abc" "Route " "Hello world!\n" "Name:\t\"Douglas Adams\"\nValue:\t\n" Ôïõò óõìâïëéêïýò ôåëåóôýò, ïé ïðïßïé åßíáé ïé ðáñáêüôù: = + - * / %! & ==!= < > <= >=

Áêïëïõèßá äéáöõãþò Ðßíáêáò 1: Áêïëïõèßåò äéáöõãþò (escape sequences). ÐåñéãñáöÞ \n ï áñáêôþñáò áëëáãþò ãñáììþò (line feed) \t ï áñáêôþñáò óôçëïèýôçóçò (tab) \r ï áñáêôþñáò åðéóôñïöþò óôçí áñ Þ ôçò ãñáììþò (carriage return) \0 ï áñáêôþñáò ìå ASCII êùäéêü 0 \\ ï áñáêôþñáò \ (backslash) \' ï áñáêôþñáò ' (áðëü åéóáãùãéêü) \" ï áñáêôþñáò " (äéðëü åéóáãùãéêü) \xnn ï áñáêôþñáò ìå ASCII êùäéêü nn óôï äåêáåîáäéêü óýóôçìá 1 1 Ôïõò äéá ùñéóôýò, ïé ïðïßïé åßíáé ïé ðáñáêüôù: ( ) [ ] {, : ; Åêôüò áðü ôéò ëåêôéêýò ìïíüäåò ðïõ ðñïáíáöýñèçêáí, Ýíá ðñüãñáììá Alan ìðïñåß åðßóçò íá ðåñéý åé ôá ðáñáêüôù, ôá ïðïßá äéá ùñßæïõí ëåêôéêýò ìïíüäåò êáé áãíïïýíôáé: Êåíïýò áñáêôþñåò, äçëáäþ áêïëïõèßåò áðïôåëïýìåíåò áðü êåíü äéáóôþìáôá (space), áñáêôþñåò óôçëïèýôçóçò (tab), áñáêôþñåò áëëáãþò ãñáììþò (line feed) Þ áñáêôþñåò åðéóôñïöþò óôçí áñ Þ ôçò ãñáììþò (carriage return). Ó üëéá ìéáò ãñáììþò, ôá ïðïßá áñ ßæïõí ìå ôçí áêïëïõèßá áñáêôþñùí -- êáé ôåñìáôßæïíôáé ìå ôï ôýëïò ôçò ôñý ïõóáò ãñáììþò. Ó üëéá ðïëëþí ãñáììþí, ôá ïðïßá áñ ßæïõí ìå ôçí áêïëïõèßá áñáêôþñùí (* êáé ôåñìáôßæïíôáé ìå ôçí áêïëïõèßá áñáêôþñùí *). Ôá ó üëéá áõôþò ôçò ìïñöþò åðéôñýðåôáé íá åßíáé öùëéáóìýíá. 1 1 1 1 1 1 1 0 1 1. Ôýðïé äåäïìýíùí Ç Alan õðïóôçñßæåé äýï âáóéêïýò ôýðïõò äåäïìýíùí: int: áêýñáéïé áñéèìïß ìåãýèïõò ôïõëü éóôïí 1 bit ( Ýùò ), êáé byte: ìç áñíçôéêïß áêýñáéïé áñéèìïß ôùí bit (0 Ýùò ). Åêôüò áðü ôïõò âáóéêïýò ôýðïõò, ç Alan õðïóôçñßæåé åðßóçò ôýðïõò ðéíüêùí ìéáò äéüóôáóçò, ïé ïðïßïé óõìâïëßæïíôáé ìå t [], üðïõ ï t ðñýðåé íá åßíáé êüðïéïò âáóéêüò ôýðïò. Õðïóôçñßæåé åðßóçò Ýììåóá Ýíáí ôýðï ëïãéêþí åêöñüóåùí, ï ïðïßïò üìùò ñçóéìïðïéåßôáé ìüíï óôéò óõíèþêåò ôùí åíôïëþí if êáé while. Äåí åðéôñýðåôáé ç äþëùóç ìåôáâëçôþí ëïãéêïý ôýðïõ, ïýôå õðüñ åé áíüãêç áíáðáñüóôáóçò ëïãéêþí ôéìþí óôç ìíþìç. 1. ÄïìÞ ôïõ ðñïãñüììáôïò Ç ãëþóóá Alan åßíáé ìéá äïìçìýíç (block structured) ãëþóóá. íá ðñüãñáììá Ý åé ïíôñéêü ôçí ßäéá äïìþ ìå Ýíá ðñüãñáììá Pascal. Ïé óõíáñôþóåéò ìðïñïýí íá åßíáé öùëéáóìýíåò ç ìßá ìýóá óôçí Üëëç êáé ïé êáíüíåò åìâýëåéáò åßíáé ïé ßäéïé ìå áõôïýò ôçò Pascal.

1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 1..1 ÌåôáâëçôÝò Ïé äçëþóåéò ìåôáâëçôþí ãßíïíôáé ìå áíáãñáöþ ôïõ ïíüìáôïò êáé ôïõ ôýðïõ ôçò ìåôáâëçôþò. Óôçí ðåñßðôùóç ðïõ ï ôýðïò ôçò ìåôáâëçôþò åßíáé ôýðïò ðßíáêá, áíüìåóá óôéò áãêýëåò ðñýðåé íá áíáãñüöåôáé ôï ìýãåèïò ôïõ ðßíáêá, ôï ïðïßï ðñýðåé íá åßíáé èåôéêþ áêýñáéá óôáèåñü. Ðáñáäåßãìáôá äçëþóåùí ìåôáâëçôþí åßíáé: i : int; b : byte; s : byte [0]; Áò óçìåéùèåß üôé äåí åßíáé äõíáôþ ç ôáõôü ñïíç äþëùóç ðåñéóóüôåñùí ìåôáâëçôþí ìå ôïí ßäéï ôýðï. 1.. ÓõíáñôÞóåéò ÊÜèå óõíüñôçóç åßíáé ìéá äïìéêþ ìïíüäá êáé áðïôåëåßôáé áðü ôçí åðéêåöáëßäá ôçò, ôéò ôïðéêýò äçëþóåéò êáé ôï óþìá ôçò. Óôçí åðéêåöáëßäá áíáöýñåôáé ôï üíïìá ôçò óõíüñôçóçò, ïé ôõðéêýò ôçò ðáñüìåôñïé ìýóá óå ðáñåíèýóåéò êáé ï ôýðïò åðéóôñïöþò. Ïé ðáñåíèýóåéò åßíáé õðï ñåùôéêýò áêüìá êáé áí ìéá óõíüñôçóç äåí Ý åé ôõðéêýò ðáñáìýôñïõò. Ï ôýðïò åðéóôñïöþò äåí ìðïñåß íá åßíáé ôýðïò ðßíáêá. Ï åéäéêüò ôýðïò åðéóôñïöþò proc ñçóéìïðïéåßôáé ãéá íá äçëþóåé üôé ìéá óõíüñôçóç äåí åðéóôñýöåé áðïôýëåóìá (üðùò ôï void óôç C). ÊÜèå ôõðéêþ ðáñüìåôñïò áñáêôçñßæåôáé áðü ôï üíïìü ôçò, ôïí ôýðï ôçò êáé ôïí ôñüðï ðåñüóìáôïò. Ç ãëþóóá Alan õðïóôçñßæåé ðýñáóìá ðáñáìýôñùí êáô' áîßá (by value) êáé êáô' áíáöïñü (by reference). Áí óôç äþëùóç ìéáò ôõðéêþò ðáñáìýôñïõ ðñïçãåßôáé ôïõ ôýðïõ ç ëýîç êëåéäß reference, ôüôå áõôþ ðåñíü êáô' áíáöïñü, äéáöïñåôéêü ðåñíü êáô' áîßá. Áðáãïñåýåôáé ôï ðýñáóìá ðáñáìýôñùí ôýðïõ ðßíáêá êáô' áîßá. Áêïëïõèïýí ðáñáäåßãìáôá åðéêåöáëßäùí óõíáñôþóåùí. p1 () : proc p (n : int) : proc p (a : int, b : int, b : reference byte) : proc f1 (int x) : int f (s : reference byte []) : int Ïé ôïðéêýò äçëþóåéò ìéáò óõíüñôçóçò áêïëïõèïýí ôçí åðéêåöáëßäá. Ç Alan áêïëïõèåß ôïõò êáíüíåò åìâýëåéáò ôçò Pascal, üóïí áöïñü óôçí ïñáôüôçôá ôùí ïíïìüôùí ìåôáâëçôþí, óõíáñôþóåùí êáé ðáñáìýôñùí. Ôï óþìá ìéáò óõíüñôçóçò åßíáé ìéá óåéñü ìçäýí Þ ðåñéóóüôåñùí åíôïëþí ðïõ ðåñéêëåßåôáé ìýóá óå Üãêéóôñá { êáé. 1. ÅêöñÜóåéò êáé óõíèþêåò ÊÜèå Ýêöñáóç ôçò Alan äéáèýôåé Ýíá ìïíáäéêü ôýðï êáé ìðïñåß íá áðïôéìçèåß äßíïíôáò ùò áðïôýëåóìá ìéá ôéìþ áõôïý ôïõ ôýðïõ. Ïé åêöñüóåéò äéáêñßíïíôáé óå äýï êáôçãïñßåò: áõôýò ðïõ äßíïõí l-values, ïé ïðïßåò ðåñéãñüöïíôáé óôçí åíüôçôá 1..1 êáé áõôýò ðïõ äßíïõí r-values, ðïõ ðåñéãñüöïíôáé óôéò åíüôçôåò 1.. ùò 1... Ôá äõï åßäç ôéìþí l-value êáé r-value Ý ïõí ðüñåé ôï üíïìü ôïõò áðü ôç èýóç ôïõò óå ìéá åíôïëþ áíüèåóçò: ïé l-values åìöáíßæïíôáé óôï áñéóôåñü ìýëïò ôçò áíüèåóçò åíþ ïé r-values óôï äåîéü. Åí áíôéèýóåé ìå ôéò l-values, ïé r-values äåí ìðïñïýí íá Ý ïõí ôýðï ðßíáêá. Ïé óõíèþêåò ôçò Alan ðåñéãñüöïíôáé óôéò åíüôçôåò 1.. êáé 1... ñçóéìïðïéïýíôáé ìüíï óå óõíäõáóìü ìå ôéò åíôïëýò if êáé while êáé ï õðïëïãéóìüò ôïõò äßíåé ùò áðïôýëåóìá ìéá ëïãéêþ ôéìþ (áëçèþ Þ øåõäþ). Ïé åêöñüóåéò êáé ïé óõíèþêåò ìðïñïýí íá åìöáíßæïíôáé ìýóá óå ðáñåíèýóåéò, ðïõ ñçóéìïðïéïýíôáé ãéá ëüãïõò ïìáäïðïßçóçò.

1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 1..1 L-values Ïé l-values áíôéðñïóùðåýïõí áíôéêåßìåíá ðïõ êáôáëáìâüíïõí þñï óôç ìíþìç ôïõ õðïëïãéóôþ êáôü ôçí åêôýëåóç ôïõ ðñïãñüììáôïò êáé ôá ïðïßá ìðïñïýí íá ðåñéý ïõí ôéìýò. ÔÝôïéá áíôéêåßìåíá åßíáé ïé ìåôáâëçôýò, ïé ðáñüìåôñïé ôùí óõíáñôþóåùí, ôá óôïé åßá ðéíüêùí êáé ïé óôáèåñýò óõìâïëïóåéñýò. ÓõãêåêñéìÝíá: Ôï üíïìá ìéáò ìåôáâëçôþò Þ ìéáò ðáñáìýôñïõ óõíüñôçóçò åßíáé l-value êáé áíôéóôïé åß óôï åí ëüãù áíôéêåßìåíï. Ï ôýðïò ôçò l-value åßíáé ï ôýðïò ôïõ áíôßóôïé ïõ áíôéêåéìýíïõ. Áí a åßíáé ìéá Ýêöñáóç ôýðïõ t [] êáé i ìéá Ýêöñáóç ôýðïõ int, ôüôå a[i] åßíáé ìéá l-value ìå ôýðï t, ðïõ áíôéóôïé åß óôï i-ïóôü óôïé åßï ôïõ ðßíáêá a. Ìéá óôáèåñþ óõìâïëïóåéñü, üðùò ðåñéãñüöåôáé óôçí åíüôçôá 1.1, åßíáé l-value ìå ôýðï byte[n + 1], üðïõ n ôï ìþêïò ôçò óõìâïëïóåéñüò. ÊÜèå ôýôïéá l-value åßíáé Ýíáò ðßíáêáò áíôéêåßìåíùí ôýðïõ byte, óå êüèå Ýíá áðü ôá ïðïßá âñßóêïíôáé áðïèçêåõìýíïé ìå ôç óåéñü ïé ASCII êùäéêïß ôùí áñáêôþñùí ôçò óõìâïëïóåéñüò. Óôï ôýëïò ôïõ ðßíáêá áðïèçêåýåôáé áõôüìáôá ï áñéèìüò 0, óýìöùíá ìå ôç óýìâáóç ðïõ áêïëïõèåß ç ãëþóóá C ãéá ôéò óõìâïëïóåéñýò. Áí ìéá l-value ñçóéìïðïéçèåß ùò Ýêöñáóç, ç ôéìþ áõôþò ôçò Ýêöñáóçò åßíáé ßóç ìå ôçí ôéìþ ðïõ ðåñéý åôáé óôï áíôéêåßìåíï ðïõ áíôéóôïé åß óôçí l-value. 1.. ÓôáèåñÝò Óôéò r-values ôçò ãëþóóáò Alan óõãêáôáëýãïíôáé ïé áêüëïõèåò óôáèåñýò: Ïé áêýñáéåò óôáèåñýò ùñßò ðñüóçìï, üðùò ðåñéãñüöïíôáé óôçí åíüôçôá 1.1. ïõí ôýðï int êáé ç ôéìþ ôïõò åßíáé ßóç ìå ôïí ìç áñíçôéêü áêýñáéï áñéèìü ðïõ ðáñéóôüíïõí. Ïé óôáèåñïß áñáêôþñåò, üðùò ðåñéãñüöïíôáé óôçí åíüôçôá 1.1. ïõí ôýðï byte êáé ç ôéìþ ôïõò åßíáé ßóç ìå ôïí êùäéêü ASCII ôïõ áñáêôþñá ðïõ ðáñéóôüíïõí. Åðßóçò, óôéò óõíèþêåò ôçò Alan óõãêáôáëýãïíôáé ïé áêüëïõèåò óôáèåñýò: Ïé ëýîåéò êëåéäéü true êáé false. 1.. ÔåëåóôÝò Ïé ôåëåóôýò ôçò Alan äéáêñßíïíôáé óå ôåëåóôýò ìå Ýíá Þ äýï ôåëïýìåíá. Ïé ôåëåóôýò ìå Ýíá ôåëïýìåíï ãñüöïíôáé ðñßí áðü áõôü (postx), åíþ ïé ôåëåóôýò ìå äýï ôåëïýìåíá ãñüöïíôáé ðüíôá ìåôáîý ôùí ôåëïõìýíùí (inx). Ç áðïôßìçóç ôùí ôåëïõìýíùí ãßíåôáé áðü áñéóôåñü ðñïò ôá äåîéü. ¼ëïé ïé ôåëåóôýò ôçò Alan Ý ïõí ùò áðïôýëåóìá r-value Þ óõíèþêç. ÐåñéãñÜöïíôáé åêôåíþò ðáñáêüôù. Ïé ôåëåóôýò ìå Ýíá ôåëïýìåíï + êáé - õëïðïéïýí ôïõò ôåëåóôýò ðñïóþìïõ. Ôï ôåëïýìåíï ðñýðåé íá åßíáé Ýêöñáóç ôýðïõ int êáé ôï áðïôýëåóìá åßíáé r-value ôïõ ßäéïõ ôýðïõ. Ï ôåëåóôþò ìå Ýíá ôåëïýìåíï! õëïðïéåß ôç ëïãéêþ Üñíçóç. Ôï ôåëïýìåíü ôïõ ðñýðåé íá åßíáé óõíèþêç êáé ôï ßäéï åßíáé ôï áðïôýëåóìü ôïõ. Ïé ôåëåóôýò ìå äýï ôåëïýìåíá +, -, *, / êáé % õëïðïéïýí ôéò áñéèìçôéêýò ðñüîåéò. Ôá ôåëïýìåíá ðñýðåé íá åßíáé åêöñüóåéò ôïõ ßäéïõ ôýðïõ int Þ byte êáé ôï áðïôýëåóìá åßíáé r-value ôïõ ßäéïõ ôýðïõ. Ïé ôåëåóôýò ==,!=, <, >, <= êáé >= õëïðïéïýí ôéò ó Ýóåéò óýãêñéóçò ìåôáîý áñéèìþí. Ôá ôåëïýìåíá ðñýðåé íá åßíáé åêöñüóåéò ôïõ ßäéïõ ôýðïõ int Þ byte êáé ôï áðïôýëåóìá åßíáé óõíèþêç.

Ðßíáêáò : Ðñïôåñáéüôçôá êáé ðñïóåôáéñéóôéêüôçôá ôùí ôåëåóôþí ôçò Alan. ÔåëåóôÝò ÐåñéãñáöÞ Áñéèìüò ôåëïõìýíùí ÈÝóç êáé ðñïóåôáéñéóôéêüôçôá + -! Ðñüóçìá, ëïãéêþ Üñíçóç 1 prex * / % Ðïëëáðëáóéáóôéêïß ôåëåóôýò inx, áñéóôåñþ + - Ðñïóèåôéêïß ôåëåóôýò inx, áñéóôåñþ ==!= > < <= >= Ó åóéáêïß ôåëåóôýò inx, êáìßá & ËïãéêÞ óýæåõîç inx, áñéóôåñþ ËïãéêÞ äéüæåõîç inx, áñéóôåñþ 1 1 1 1 1 1 1 1 1 0 1 0 Ïé ôåëåóôýò & êáé õëïðïéïýí áíôßóôïé á ôéò ðñüîåéò ôçò ëïãéêþò óýæåõîçò êáé äéüæåõîçò. Ôá ôåëïýìåíá ðñýðåé íá åßíáé óõíèþêåò êáé ôï ßäéï åßíáé êáé ôï áðïôýëåóìá. Ç áðïôßìçóç óõíèçêþí ðïõ ñçóéìïðïéïýí áõôïýò ôïõò ôåëåóôýò ãßíåôáé ìå âñá õêýêëùóç (shortcircuit). ÄçëáäÞ, áí ôï áðïôýëåóìá ôçò óõíèþêçò åßíáé ãíùóôü áðü ôçí áðïôßìçóç êáé ìüíï ôïõ ðñþôïõ ôåëïýìåíïõ, ôï äåýôåñï ôåëïýìåíï äåí áðïôéìüôáé êáèüëïõ. Óôïí ðßíáêá ïñßæåôáé ç ðñïôåñáéüôçôá êáé ç ðñïóåôáéñéóôéêüôçôá ôùí ôåëåóôþí ôçò Alan. Ïé ãñáììýò ðïõ âñßóêïíôáé õøçëüôåñá óôïí ðßíáêá ðåñéý ïõí ôåëåóôýò ìåãáëýôåñçò ðñïôåñáéüôçôáò. ÔåëåóôÝò ðïõ âñßóêïíôáé óôçí ßäéá ãñáììþ Ý ïõí ôçí ßäéá ðñïôåñáéüôçôá. 1.. ÊëÞóç óõíáñôþóåùí Áí f åßíáé ôï üíïìá ìéáò óõíüñôçóçò ìå áðïôýëåóìá ôýðïõ t, üðïõ ï ôýðïò åðéóôñïöþò t äåí åßíáé proc, ôüôå ç Ýêöñáóç f(e 1,..., e n ) åßíáé ìéá r-value ìå ôýðï t. Ï áñéèìüò ôùí ðñáãìáôéêþí ðáñáìýôñùí n ðñýðåé íá óõìðßðôåé ìå ôïí áñéèìü ôùí ôõðéêþí ðáñáìýôñùí ôçò f. Åðßóçò, ï ôýðïò êáé ôï åßäïò êüèå ðñáãìáôéêþò ðáñáìýôñïõ ðñýðåé íá óõìðßðôåé ìå ôïí ôýðï êáé ôïí ôñüðï ðåñüóìáôïò ôçò áíôßóôïé çò ôõðéêþò ðáñáìýôñïõ, óýìöùíá ìå ôïõò ðáñáêüôù êáíüíåò. Áí ç ôõðéêþ ðáñüìåôñïò åßíáé ôýðïõ t êáé ðåñíü êáô' áîßá, ôüôå ç áíôßóôïé ç ðñáãìáôéêþ ðáñüìåôñïò ðñýðåé íá åßíáé Ýêöñáóç ôýðïõ t. Áí ç ôõðéêþ ðáñüìåôñïò åßíáé ôýðïõ t êáé ðåñíü êáô' áíáöïñü, ôüôå ç áíôßóôïé ç ðñáãìáôéêþ ðáñüìåôñïò ðñýðåé íá åßíáé l-value ôýðïõ t. ÊáôÜ ôçí êëþóç ìéáò óõíüñôçóçò, ïé ðñáãìáôéêýò ðáñüìåôñïé áðïôéìþíôáé áðü áñéóôåñü ðñïò ôá äåîéü. 1. ÅíôïëÝò Ïé åíôïëýò ðïõ õðïóôçñßæåé ç ãëþóóá Alan åßíáé ïé áêüëïõèåò: Ç êåíþ åíôïëþ ; ðïõ äåí êüíåé êáìßá åíýñãåéá. Ç åíôïëþ áíüèåóçò l = e; ðïõ áíáèýôåé ôçí ôéìþ ôçò Ýêöñáóçò e óôçí l-value l. Ç l-value l ðñýðåé íá åßíáé ôýðïõ t ðïõ äåí åßíáé ôýðïò ðßíáêá, åíþ Þ Ýêöñáóç e ðñýðåé íá åßíáé ôïõ ßäéïõ ôýðïõ t. Ç óýíèåôç åíôïëþ, ðïõ áðïôåëåßôáé áðü ìéá óåéñü Ýãêõñùí åíôïëþí áíüìåóá óå Üãêéóôñá { êáé. Ïé åíôïëýò áõôýò åêôåëïýíôáé äéáäï éêü, åêôüò áí êüðïéá åßíáé åíôïëþ Üëìáôïò. Ç åíôïëþ êëþóçò óõíüñôçóçò f(e 1,..., e n );, ìå ôéò ßäéåò ðñïûðïèýóåéò üðùò óôçí åíüôçôá 1.. ìå ôç äéáöïñü üôé ï ôýðïò åðéóôñïöþò ôçò óõíüñôçóçò f ðñýðåé íá åßíáé proc.

1 Ç åíôïëþ åëýã ïõ if (c) s 1 else s, üðïõ c ðñýðåé íá åßíáé ìéá Ýãêõñç óõíèþêç êáé s 1, s íá åßíáé Ýãêõñåò åíôïëýò. Ôï ôìþìá else åßíáé ðñïáéñåôéêü. Ç óçìáóéïëïãßá áõôþò ôçò åíôïëþò åßíáé üðùò óôç C. Ç åíôïëþ åëýã ïõ while (c) s, üðïõ c ðñýðåé íá åßíáé ìéá Ýãêõñç óõíèþêç êáé s ìéá Ýãêõñç åíôïëþ. Ç óçìáóéïëïãßá áõôþò ôçò åíôïëþò åßíáé üðùò óôç C. Ç åíôïëþ Üëìáôïò return e ; ðïõ ôåñìáôßæåé ôçí åêôýëåóç ôçò ôñý ïõóáò óõíüñôçóçò êáé åðéóôñýöåé ôçí ôéìþ ôçò e ùò áðïôýëåóìá ôçò óõíüñôçóçò. Áí ç ôñý ïõóá óõíüñôçóç Ý åé ôýðï åðéóôñïöþò proc ôüôå ç Ýêöñáóç e ðñýðåé íá ðáñáëåßðåôáé. ÄéáöïñåôéêÜ, ç Ýêöñáóç e ðñýðåé íá Ý åé ôýðï ßäéï ìå ôïí ôýðï åðéóôñïöþò ôçò ôñý ïõóáò óõíüñôçóçò. 1 1 1 1. ÂéâëéïèÞêç Ýôïéìùí óõíáñôþóåùí Ç Alan õðïóôçñßæåé Ýíá óýíïëï ðñïêáèïñéóìýíùí óõíáñôþóåùí, ïé ïðïßåò Ý ïõí õëïðïéçèåß óå assembly ôïõ 0x ùò ìéá âéâëéïèþêç Ýôïéìùí óõíáñôþóåùí (run-time library). Åßíáé ïñáôýò óå êüèå äïìéêþ ìïíüäá, åêôüò áí åðéóêéüæïíôáé áðü ìåôáâëçôýò, ðáñáìýôñïõò Þ Üëëåò óõíáñôþóåéò ìå ôï ßäéï üíïìá. ÐáñáêÜôù äßíïíôáé ïé ôýðïé ôïõò êáé åîçãåßôáé ç ëåéôïõñãßá ôïõò. 1 1 1 1 1 1..1 Åßóïäïò êáé Ýîïäïò writeinteger (n : int) : proc writebyte (b : byte) : proc writechar (b : byte) : proc writestring (s : reference byte []) : proc 0 1 Ïé óõíáñôþóåéò áõôýò ñçóéìïðïéïýíôáé ãéá ôçí åêôýðùóç ôéìþí ðïõ áíþêïõí óôïõò âáóéêïýò ôýðïõò ôçò Alan, êáèþò êáé ãéá ôçí åêôýðùóç óõìâïëïóåéñþí. Ïé writebyte êáé writechar äéáöýñïõí ùò ðñïò ôï üôé ç ðñþôç åêôõðþíåé ôçí áñéèìçôéêþ ôéìþ ôïõ byte åíþ ç äåýôåñç ôï áñáêôþñá ðïõ áíôéóôïé åß óå áõôüí ôïí ASCII êùäéêü. readinteger () : int readbyte () : byte readchar () : byte readstring (n : int, s : reference byte []) : proc 0 1 Áíôßóôïé á, ïé ðáñáðüíù óõíáñôþóåéò ñçóéìïðïéïýíôáé ãéá ôçí åéóáãùãþ ôéìþí ðïõ áíþêïõí óôïõò âáóéêïýò ôýðïõò ôçò Alan êáé ãéá ôçí åéóáãùãþ óõìâïëïóåéñþí. Ç óõíüñôçóç readstring ñçóéìïðïéåßôáé ãéá ôçí áíüãíùóç ìéáò óõìâïëïóåéñüò ìý ñé ôïí åðüìåíï áñáêôþñá áëëáãþò ãñáììþò. Ïé ðáñüìåôñïé ôçò êáèïñßæïõí ôï ìýãéóôï áñéèìü áñáêôþñùí (óõìðåñéëáìâáíïìýíïõ ôïõ ôåëéêïý '\0') ðïõ åðéôñýðåôáé íá äéáâáóôïýí êáé ôïí ðßíáêá áñáêôþñùí óôïí ïðïßï áõôïß èá ôïðïèåôçèïýí. Ï áñáêôþñáò áëëáãþò ãñáììþò äåí áðïèçêåýåôáé. Áí ôï ìýãåèïò ôïõ ðßíáêá åîáíôëçèåß ðñéí óõíáíôçèåß áñáêôþñáò áëëáãþò ãñáììþò, ç áíüãíùóç èá óõíå éóôåß áñãüôåñá áðü ôï óçìåßï üðïõ äéáêüðçêå. 1.. ÓõíáñôÞóåéò ìåôáôñïðþò extend (b : byte) : int shrink (i : int) : byte 0 Ç ðñþôç åðåêôåßíåé ìéá ôéìþ ôýðïõ byte óôïí áíôßóôïé ï áñéèìü ôýðïõ int. Ç äåýôåñç åðéóôñýöåé ìéá ôéìþ ôýðïõ byte ðïõ ðåñéý åé ôá ëéãüôåñï óçìáíôéêü bits ôçò ðáñáìýôñïõ ôçò.

1 1.. ÓõíáñôÞóåéò äéá åßñéóçò óõìâïëïóåéñþí strlen (s : reference byte []) : int strcmp (s1 : reference byte [], s : reference byte []) : int strcpy (trg : reference byte [], src : reference byte []) : proc strcat (trg : reference byte [], src : reference byte []) : proc Ïé óõíáñôþóåéò áõôýò Ý ïõí áêñéâþò ôçí ßäéá ëåéôïõñãßá ìå ôéò óõíþíõìýò ôïõò óôç âéâëéïèþêç óõíáñôþóåùí ôçò ãëþóóáò C. ÐëÞñçò ãñáììáôéêþ ôçò Alan Ç óýíôáîç ôçò ãëþóóáò Alan äßíåôáé ðáñáêüôù óå ìïñöþ EBNF. Ç ãñáììáôéêþ ðïõ áêïëïõèåß åßíáé äéöïñïýìåíç, ïé áìöéóçìßåò üìùò ìðïñïýí íá îåðåñáóèïýí áí ëüâåé êáíåßò õðüøç ôïõò êáíüíåò ðñïôåñáéüôçôáò êáé ðñïóåôáéñéóôéêüôçôáò ôùí ôåëåóôþí, üðùò ðåñéãñüöïíôáé óôïí ðßíáêá. Ôá óýìâïëá id, int-const, char-const êáé string-literal åßíáé ôåñìáôéêü óýìâïëá ôçò ãñáììáôéêþò. 1 1 1 1 1 1 1 1 1 0 1 program ::= func-def func-def ::= id \(" [ fpar-list ] \)" \:" r-type ( local-def ) compound-stmt fpar-list ::= fpar-def ( \," fpar-def ) fpar-def ::= id \:" [ \reference" ] type data-type ::= \int" \byte" type ::= data-type [ \[" \]" ] r-type ::= data-type \proc" local-def ::= func-def var-def var-def ::= id \:" data-type [ \[" int-const \]" ] \;" stmt ::= \;" l-value \=" expr \;" compound-stmt func-call \;" \if" \(" cond \)" stmt [ \else" stmt ] \while" \(" \cond" \)" stmt \return" [ expr ] \;" compound-stmt ::= \{" ( stmt ) \" func-call ::= id \(" [ expr-list ] \)" expr-list ::= expr ( \," expr ) expr ::= int-const char-const l-value \(" expr \)" func-call ( \+" \-" ) expr expr ( \+" \-" \*" \/" \%" ) expr l-value ::= id [ \[" expr \]" ] string-literal cond ::= \true" \false" \(" cond \)" \!" cond expr ( \==" \!=" \<" \>" \<=" \>=" ) expr cond ( \&" \ " ) cond Ðáñáäåßãìáôá Óôçí ðáñüãñáöï áõôþ äßíïíôáé Ýîé ðáñáäåßãìáôá ðñïãñáììüôùí óôç ãëþóóá Alan, ç ðïëõðëïêüôçôá ôùí ïðïßùí êõìáßíåôáé óçìáíôéêü. Ãéá êüðïéá áðü áõôü ôá ðáñáäåßãìáôá (Þ ãéá ðáñüìïéá ðñïãñüììáôá), ìðïñåßôå íá âñåßôå ôïí áñ éêü, ôïí åíäéüìåóï êþäéêá ( ùñßò âåëôéóôïðïßçóç), ôç ìïñöþ ôùí åããñáöçìüôùí äñáóôçñéïðïßçóçò ôùí äïìéêþí ìïíüäùí, êáèþò êáé ôïí ôåëéêü êþäéêá

left middle right Ó Þìá 1: Ïé ðýñãïé ôïõ Hanoi. óå áíôßóôïé á öõëëüäéá ðåñéãñáöþò ãëùóóþí ðïõ äüèçêáí ùò èýìáôá åñãáóßáò óôï ßäéï ìüèçìá óå ðñïçãïýìåíá Ýôç, ìýóù ôçò éóôïóåëßäáò ôïõ ìáèþìáôïò, Þ óôï Moodle..1 Ðåò ãåéá! Ôï ðáñáêüôù ðáñüäåéãìá åßíáé ôï áðëïýóôåñï ðñüãñáììá óôç ãëþóóá Alan ðïõ ðáñüãåé êüðïéï áðïôýëåóìá ïñáôü óôï ñþóôç. Ôï ðñüãñáììá áõôü ôõðþíåé áðëþò Ýíá ìþíõìá. 1 hello () : proc { writestring("hello world!\n");. Ïé ðýñãïé ôïõ Hanoi Ôï ðñüãñáììá ðïõ áêïëïõèåß ëýíåé ôï ðñüâëçìá ôùí ðýñãùí ôïõ Hanoi. Ìéá óýíôïìç ðåñéãñáöþ ôïõ ðñïâëþìáôïò äßíåôáé ðáñáêüôù. ÕðÜñ ïõí ôñåéò óôýëïé, óôïí ðñþôï áðü ôïõò ïðïßïõò åßíáé ðåñáóìýíïé n ôï ðëþèïò äáêôýëéïé. Ïé åîùôåñéêýò äéüìåôñïé ôùí äáêôõëßùí åßíáé äéáöïñåôéêýò êáé áõôïß åßíáé ðåñáóìýíïé áðü êüôù ðñïò ôá ðüíù óå öèßíïõóá óåéñü åîùôåñéêþò äéáìýôñïõ, üðùò öáßíåôáé óôï ó Þìá 1. Æçôåßôáé íá ìåôáöåñèïýí ïé äáêôýëéïé áðü ôïí ðñþôï óôïí ôñßôï óôýëï ( ñçóéìïðïéþíôáò ôï äåýôåñï ùò âïçèçôéêü þñï), áêïëïõèþíôáò üìùò ôïõò åîþò êáíüíåò: ÊÜèå öïñü åðéôñýðåôáé íá ìåôáöåñèåß Ýíáò ìüíï äáêôýëéïò, áðü êüðïéï óôýëï óå êüðïéïí Üëëï óôýëï. Áðáãïñåýåôáé íá ôïðïèåôçèåß äáêôýëéïò ìå ìåãáëýôåñç äéüìåôñï ðüíù áðü äáêôýëéï ìå ìéêñüôåñç äéüìåôñï. Ôï ðñüãñáììá óôç ãëþóóá Alan ðïõ ëýíåé áõôü ôï ðñüâëçìá äßíåôáé ðáñáêüôù. Ç óõíüñôçóç hanoi åßíáé áíáäñïìéêþ. 1 solve () : proc hanoi (rings : int, source : reference byte [], target : reference byte [], auxiliary : reference byte []) : proc move (source : reference byte [], target : reference byte[]) : proc { writestring("moving from "); writestring(source); 1

1 1 1 1 1 1 1 1 0 1 writestring(" to "); writestring(target); writestring(".\n"); { -- hanoi if (rings >= 1) { hanoi(rings-1, source, auxiliary, target); move(source, target); hanoi(rings-1, auxiliary, target, source); -- hanoi NumberOfRings : int; { -- solve writestring("rings: "); NumberOfRings = readinteger(); hanoi(numberofrings, "left", "right", "middle"); -- solve. Ðñþôïé áñéèìïß Ôï ðáñáêüôù ðáñüäåéãìá ðñïãñüììáôïò óôç ãëþóóá Alan åßíáé Ýíá ðñüãñáììá ðïõ õðïëïãßæåé ôïõò ðñþôïõò áñéèìïýò ìåôáîý 1 êáé n, üðïõ ôï n êáèïñßæåôáé áðü ôï ñþóôç. Ôï ðñüãñáììá áõôü ñçóéìïðïéåß Ýíáí áðëü áëãüñéèìï ãéá ôïí õðïëïãéóìü ôùí ðñþôùí áñéèìþí. Ìéá äéáôýðùóç áõôïý ôïõ áëãïñßèìïõ óå øåõäïãëþóóá äßíåôáé ðáñáêüôù. ËáìâÜíåôáé õðüøç üôé ïé áñéèìïß êáé åßíáé ðñþôïé, êáé óôç óõíý åéá åîåôüæïíôáé ìüíï ïé áñéèìïß ôçò ìïñöþò k ± 1, üðïõ k öõóéêüò áñéèìüò. Êýñéï ðñüãñáììá ôýðùóå ôïõò áñéèìïýò êáé ãéá t := ìý ñé n ìå âþìá êüíå ôá åîþò: áí ï áñéèìüò t 1 åßíáé ðñþôïò ôüôå ôýðùóý ôïí áí ï áñéèìüò t + 1 åßíáé ðñþôïò ôüôå ôýðùóý ôïí Áëãüñéèìïò åëýã ïõ (åßíáé ï áñéèìüò t ðñþôïò;) áí t < 0 ôüôå Ýëåãîå ôïí áñéèìü t áí t < ôüôå ï t äåí åßíáé ðñþôïò áí t = ôüôå ï t åßíáé ðñþôïò áí ï t äéáéñåßôáé ìå ôï ôüôå ï t äåí åßíáé ðñþôïò ãéá i := ìý ñé t/ ìå âþìá êüíå ôá åîþò: áí ï t äéáéñåßôáé ìå ôïí i ôüôå ï t äåí åßíáé ðñþôïò o t åßíáé ðñþôïò Ôï áíôßóôïé ï ðñüãñáììá óôç ãëþóóá Alan åßíáé ôï áêüëïõèï. 1 main () : proc prime (n : int) : int i : int; { if (n < 0) return prime(-n); else if (n < ) return 0; else if (n == ) return 1; 1

1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 else if (n % == 0) return 0; else { i = ; while (i <= n / ) { if (n % i == 0) return 0; i = i + ; return 1; limit : int; number : int; counter : int; { -- main writestring("limit: "); limit = readinteger(); writestring("primes:\n"); counter = 0; if (limit >= ) { counter = counter + 1; writeinteger(); writestring("\n"); if (limit >= ) { counter = counter + 1; writeinteger(); writestring("\n"); number = ; while (number <= limit) { if (prime(number - 1) == 1) { counter = counter + 1; writeinteger(number - 1); writestring("\n"); if (number!= limit & prime(number + 1) == 1) { counter = counter + 1; writeinteger(number + 1); writestring("\n"); number = number + ; writestring("\ntotal: "); writeinteger(counter); writestring("\n"); -- main. ÁíôéóôñïöÞ óõìâïëïóåéñüò Ôï ðñüãñáììá ðïõ áêïëïõèåß óôç ãëþóóá Alan åêôõðþíåé ôï ìþíõìá \Hello world!" áíôéóôñýöïíôáò ôç äïèåßóá óõìâïëïóåéñü. 1 main () : proc 1

1 1 1 1 1 1 1 1 0 1 r : byte []; reverse (s : reference byte []) : proc i : int; l : int; { l = strlen(s); i = 0; while (i < l) { r[i] = s[l-i-1]; i = i+1; r[i] = '\0'; { -- main reverse("\n!dlrow olleh"); writestring(r); -- main. Ôáîéíüìçóç ìå ôç ìýèïäï ôçò öõóáëßäáò Ï áëãüñéèìïò ôçò öõóáëßäáò (bubble sort) åßíáé Ýíáò áðü ôïõò ðéï ãíùóôïýò êáé áðëïýò áëãïñßèìïõò ôáîéíüìçóçò. Ôï ðáñáêüôù ðñüãñáììá óå Alan ôïí ñçóéìïðïéåß ãéá íá ôáîéíïìþóåé Ýíáí ðßíáêá áêåñáßùí áñéèìþí êáô' áýîïõóá óåéñü. Áí x åßíáé ï ðßíáêáò ðïõ ðñýðåé íá ôáîéíïìçèåß êáé n åßíáé ôï ìýãåèüò ôïõ (èåùñïýìå óýìöùíá ìå ôç óýìâáóç ôçò Alan üôé ôá óôïé åßá ôïõ åßíáé ôá x[0], x[1],... x[n 1]), ìéá ðáñáëëáãþ ôïõ áëãïñßèìïõ ðåñéãñüöåôáé ìå øåõäïêþäéêá ùò åîþò: Áëãüñéèìïò ôçò öõóáëßäáò (bubble sort) åðáíüëáâå ôï åîþò: ãéá i áðü 0 ùò n áí x[i] > x[i + 1] áíôßóôñåøå ôá x[i] êáé x[i + 1] üóï ìåôáâüëëåôáé ç óåéñü ôùí óôïé åßùí ôïõ x Ôï áíôßóôïé ï ðñüãñáììá óå ãëþóóá Alan åßíáé ôï åîþò: 1 1 1 1 1 1 1 1 1 main () : proc bsort (n : int, x : reference int []) : proc swap (x : reference int, y : reference int) : proc t : int; { t = x; x = y; y = t; changed : byte; i : int; { -- bsort changed = 'y'; while (changed == 'y') { changed = 'n'; 1

0 1 0 1 0 1 0 1 i = 0; while (i < n-1) { if (x[i] > x[i+1]) { swap(x[i], x[i+1]); changed = 'y'; i = i+1; -- bsort writearray (msg : reference byte [], n : int, x : reference int []) : proc i : int; { writestring(msg); i = 0; while (i < n) { if (i > 0) writestring(", "); writeinteger(x[i]); i = i+1; writestring("\n"); seed : int; x : int [1]; i : int; { -- main seed = ; i = 0; while (i < 1) { seed = (seed * 1 + 0 + i) % 1; x[i] = seed; i = i+1; writearray("initial array: ", 1, x); bsort(1, x); writearray("sorted array: ", 1, x); -- main 1

Ïäçãßåò ãéá ôçí ðáñüäïóç Ï ôåëéêüò ìåôáãëùôôéóôþò ðñýðåé íá ìðïñåß íá åîüãåé êáôü âïýëçóç åíäéüìåóï êáé ôåëéêü êþäéêá. Åöüóïí äåí Ý ïõí êáèïñéóèåß ïé ðáñüìåôñïé ëåéôïõñãßáò -f Þ -i, ðïõ åîçãïýíôáé ðáñáêüôù, ï ìåôáãëùôôéóôþò èá äý åôáé ôï ðçãáßï ðñüãñáììá áðü Ýíá áñ åßï ìå ïðïéáäþðïôå êáôüëçîç (ð. *.alan) ðïõ èá äßíåôáé ùò ôï ìïíáäéêü ôïõ üñéóìá. Ï åíäéüìåóïò êþäéêáò èá ôïðïèåôåßôáé óå áñ åßï ìå êáôüëçîç *.imm êáé ï ôåëéêüò óå áñ åßï ìå êáôüëçîç *.asm. Ôá áñ åßá áõôü èá âñßóêïíôáé óôïí ßäéï êáôüëïãï êáé èá Ý ïõí ôï ßäéï êõñßùò üíïìá. Ð.. áðü ôï ðçãáßï áñ åßï /tmp/hello.alan èá ðáñüãïíôáé ôá /tmp/hello.imm êáé /tmp/hello.asm. To åêôåëýóéìï ôïõ ôåëéêïý ìåôáãëùôôéóôþ èá ðñýðåé íá äý åôáé ôéò ðáñáêüôù ðáñáìýôñïõò: -Ï óçìáßá âåëôéóôïðïßçóçò (ðñïáéñåôéêþ). -f ðñüãñáììá óôï standard input, Ýîïäïò ôåëéêïý êþäéêá óôï standard output. -i ðñüãñáììá óôï standard input, Ýîïäïò åíäéüìåóïõ êþäéêá óôï standard output. Åðßóçò, ç ôéìþ ðïõ èá åðéóôñýöåôáé óôï ëåéôïõñãéêü óýóôçìá áðü ôï ìåôáãëùôôéóôþ èá ðñýðåé íá åßíáé ìçäåíéêþ óôçí ðåñßðôùóç åðéôõ ïýò ìåôáãëþôôéóçò êáé ìç ìçäåíéêþ óå áíôßèåôç ðåñßðôùóç. Ãéá ôçí åýêïëç áíüðôõîç ôïõ ìåôáãëùôôéóôþ ðñïôåßíåôáé ç ñþóç åíüò áñ åßïõ Makefile ìå ôá åîþò (ôïõëü éóôïí) áñáêôçñéóôéêü: Ìå áðëü make, èá äçìéïõñãåß ôï åêôåëýóéìï ôïõ ôåëéêïý ìåôáãëùôôéóôþ. Ìå make clean, èá óâþíåé üëá áíåîáéñýôùò ôá áñ åßá ðïõ ðáñüãïíôáé áõôüìáôá (ð.. áõôü ðïõ ðáñüãïõí bison êáé flex, ôá object les êáé ôï ôåëéêü åêôåëýóéìï). íá ðáñüäåéãìá åíüò ôýôïéïõ Ìakefile, õðïèýôïíôáò üôé ãëþóóá õëïðïßçóçò åßíáé ç C êáé ãßíåôáé ñþóç ôùí åñãáëåßùí flex êáé bison, åßíáé ôï ðáñáêüôù. CC=gcc CFLAGS=-Wall compiler: compiler.lex.o compiler.tab.o symbol.o symbolc.o $(CC) $(CFLAGS) -o compiler compiler.lex.o compiler.tab.o \ symbol.o symbolc.o compiler.lex.c: compiler.l compiler.tab.h flex -it compiler.l > compiler.lex.c compiler.tab.c compiler.tab.h: compiler.y bison -dv compiler.y clean: $(RM) *.o compiler.tab.c compiler.tab.h compiler.lex.c \ compiler core Ç ìïñöþ åìöüíéóçò ôùí ôåôñüäùí êáé ôïõ ôåëéêïý êþäéêá èá ðñýðåé íá åßíáé áõôþ ðïõ ðñïôåßíåôáé óôï âéâëßï êáé óôéò äéáëýîåéò. Åðßóçò íá ëçöèïýí õðüøç ïé ðáñáêüôù ïäçãßåò: ÅíäéÜìåóïò êþäéêáò: íá õéïèåôçèåß ìïñöïðïßçóç éóïäýíáìç ìå printf("%d: %s, %s, %s, %s\n",...) Ôåëéêüò êþäéêáò: ðñïóï Þ íá äïèåß óôç óôçëïèýôçóç (indentation). Íá áêïëïõèçèåß ôï ðáñáêüôù õðüäåéãìá: åôéêýôôá: <tab> åíôïëþ <tab> üñéóìá-1, üñéóìá- <tab> åíôïëþ <tab> üñéóìá-1, üñéóìá- 1