Professional Documents
Culture Documents
OSS4
OSS4
ΕΑΠ – ΠΛΗ24
4η ΟΣΣ
ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ
ΚΑΝΟΝΙΚΕΣ ΕΚΦΡΑΣΕΙΣ
ΕΑΠ – ΠΛΗ24 2
ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ
ΠΕΠΕΡΑΣΜΕΝΑ ΑΥΤΟΜΑΤΑ
• Αφηρημένες μηχανές που είναι σε θέση να ‘αναγνωρίζουν’
γλώσσες που περιγράφονται με κανονικές εκφράσεις.
q o
0 q
Αναγνωρίζει τη γλώσσα που
συμπεριλαμβάνει τις λέξεις
2
1 1 1 1
που που έχουν άρτιο αριθμό
΄0΄ ή/και ΄1΄. Αναγνωρίζεται η
0 κενή λέξη;
q 1 q 3
ΕΑΠ – ΠΛΗ24 3
ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ
ΠΕΠΕΡΑΣΜΕΝΑ ΑΥΤΟΜΑΤΑ(2)
0
0
0 μονάδες.
0
ψηφίο
Αναγνωρίζει τους φυσικούς
αριθμούς.
ψηφίο
Κ.Ε.: [0-9]+
διαχωριστής
αρχή φυσικός τέλος
ΕΑΠ – ΠΛΗ24 4
ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ
ΓΡΑΜΜΑΤΙΚΕΣ
• Εργαλεία περιγραφής γλωσσών
(ισχυρότερες από τις κανονικές εκφράσεις).
Η κανονική έκφραση
(a | b) (a | b | 0 | 1)*
είναι ισοδύναμη της γραμματικής
S aA | bA
A aA | bA | 0A | 1A | ε
π.χ. S bA b0A b01A b011A b011ε b011
ΕΑΠ – ΠΛΗ24 5
ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ
Συντακτική Ανάλυση
ΕΑΠ – ΠΛΗ24 6
ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ
Bottom-up συντακτική ανάλυση
Shift-reduce
Από μια συμβολοσειρά εισόδου w προχωράμε
προς τη ρίζα. Παράδειγμα:
S aΑcBe
A Ab | b
Bd
w = abbcde
abbcde aAbcde aAcde aAcBe S
υλοποιείται με τη βοήθεια μιας στοίβας (stack)
Operator Precedence:
κατάλληλη για συντακτική ανάλυση
αριθμητικών εκφράσεων
ΕΑΠ – ΠΛΗ24 7
ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ
Τop-down συντακτική ανάλυση
Recursive descent – Αναδρομική κατάβαση
Ξεκινώντας από την αρχική μεταβλητή της
γραμματικής προσπαθούμε να
δημιουργήσουμε τη συμβολοσειρά.
Παράδειγμα:
S cΑd
A ab | a
w = cad
S cAd cabd : backtracking
(1)
(1) cad
Υλοποίηση: για κάθε τερματικό σύμβολο
μπορούμε να δημιουργήσουμε μια ρουτίνα
ΕΑΠ – ΠΛΗ24 8
ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ
ΕΑΠ – ΠΛΗ24 9
ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ
Όροι καταλληλότητας μιας γραμματικής
για αναδρομική κατάβαση
• Να μην είναι διφορούμενη
• Να μην υπάρχουν αριστερές
αναδρομές
• Κάθε κανόνας που περιέχει Ν
εναλλακτικά δεξιά μέρη να ξαναγραφεί
έτσι ώστε τουλάχιστον τα Ν-1 να
αρχίζουν με τερματικό σύμβολο
• Να είναι παραγοντοποιημένη
ΕΑΠ – ΠΛΗ24 10
ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ
Μετασχηματισμός Γραμματικών
Αντικατάσταση
Αν έχουμε
Αα|γ|δ
ΒβΑζ
τότε μπορούμε να κάνουμε τον
μετασχηματισμό
Β βαζ | βγζ | βδζ
• Παράδειγμα:
Y -> 2 | 3 | 4 T -> 121 | 131 | 141
T -> 1 L 1
ΕΑΠ – ΠΛΗ24 11
ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ
Έμμεση αναδρομή
A -> Sb => A -> Ab | aSb | c
A -> aSbB | cB
B -> bB | ε
ΕΑΠ – ΠΛΗ24 12
ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ
Αριστερά παραγοντοποίηση
Η απαλοιφή αριστερών αναδρομών δεν αρκεί:
S if C then S else S
| if C then S
Ο μεταγλωττιστής δεν θα ήξερε ποιός κανόνας
είναι προτιμότερος:
Γενική μορφή παραγοντοποίησης
Α αβ | αγ γίνεται Α αΑ’
Α’ β | γ
Παράδειγμα 4.7:
S iCtS | iCtSeS | a γίνεται S iCtSS’ | a
S’ eS | ε
ΕΑΠ – ΠΛΗ24 13
ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ
ΕΑΠ – ΠΛΗ24 14
ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ
Εμβέλεια Μεταβλητών (1)
ΕΑΠ – ΠΛΗ24 15
ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ
PROCEDURE main;
TYPE t = FLOAT; Ετικέτα Είδος Τύπος
VAR x,y,z:INTEGER; main Ρουτίνα
PROCEDURE sub1; x ΜεταβλητήINTEGER
TYPE t = STRING; sub1 Ρουτίνα
VAR a,y,z : BOOLEAN;
t Τύπος (= STRING)
PROCEDURE sub2;
VAR a,b,z: t;
y Μεταβλητή BOOLEAN
BEGIN sub2 Ρουτίνα
(* body of sub2 *) a Μεταβλητή t (= STRING)
END b Μεταβλητή t (= STRING)
BEGIN z Μεταβλητή t (= STRING)
(* body of sub1 *)
END
ΒEGIN
(* body of main *)
END
ΕΑΠ – ΠΛΗ24 16