ΤΜΗΜΑ
ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ
ΤΟΜΕΑΣ
ΠΛΗΡΟΦΟΡΙΚΗΣ
ΕΞΕΤΑΣΕΙΣ ΣΤΟ
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ
ΔΙΔΑΣΚΩΝ: Ε.
ΣΚΟΡΔΑΛΑΚΗΣ
28 ΙΟΥΝΙΟΥ 1999
 
ΘΕΜΑ 1
(0.5 μονάδες) 
Να  σχεδιασθεί  ένα  διάγραμμα μετάβασης για  την  αναγνώριση  δεκαδικών 
σταθερών οι
οποίες  αποτελούνται από
 μηδέν ή περισσότερα
δεκαδικά ψηφία 
που  ακολουθούνται  από  μία τελεία η οποία  ακολουθείται  από  μηδέν  ή 
περισσότερα
δεκαδικά ψηφία αλλά κάθε  τέτοια σταθερά έχει τουλάχιστο ένα 
δεκαδικό ψηφίο. 
    
ΘΕΜΑ 2 
(1.5 μονάδες)
Να δοθεί ο συντακτικός
ανάλυτής  αναδρομικής κατάβασης,
συμπεριλαμβανομένου του λεκτικού αναλυτή, για τη γραμματική με κανόνες: 
 
    1. Ε->-Ε
    2. Ε->(E)
3. E->VE'
4. E'->-E
5. E'->ε
6. V->iV'
7. V'->(E)
8. V'->ε
 
    Μετά να δοθεί το συντακτικό δένδρο   αναγνώρισης  της συμβολοσειράς 
i--i((i))
 
ΘΕΜΑ 3
(1.5 μονάδες)
Για  το  πρόγραμμα Pascal που δίνεται παρακάτω να παραχθεί ο  ενδιάμεσος 
κώδικας.
 
1. program excj99;
2. var a,x,y,z,r,s,i,n:integer;
3. procedure proc1(x:integer;var y:integer);
4. var q:integer;
5. begin {of proc1}
6. y:=a+x*z
7. end; {of proc1}
8. begin {of excj99}
 
  9. 
if  a+x>y  then    while  i<=n 
do  begin  s:=s+i;  i:=i+1 end
else if x>y or x<z then z:=3
else proc1(x+y,r)
10. end. {of excj99}
 
ΘΕΜΑ 4
 (1.5 μονάδες)
Για  το  πρόγραμμα Pascal που δίνεται παρακάτω να παραχθεί ο τελικός
κώδικας για τις τετράδες 9 έως 14. Ο κώδικας αυτός να παραχθεί με τη μέθοδο της
 κατ ευθείαν
εντολής-προς-εντολή παραγωγής. Να περιγραφούν και τα εγγραφήματα δραστηριοποίησης.
 
1. progam p; 1: unit,p,-,-
2. var a,b,c:integer;
3. procedure p1; 2: unit,p1,-,-
4. var b,c:integer;
5. procedure p21( x,y:integer;var z:integer); 3: unit,p21,-,-
6. var c:integer;
7. begin
8. c:=3; 4: :=,3,-,c
9. z:=x+y+c; 5: +,x,y,$1
6: +,$1,c,$2
7: :=,$2,-,z
10 . end; {p21} 8: endu,p21,-,-
11. procedure p22; 9: unit,p22,-,-
12. var c:integer;
13. begin
14. p21(a,b,c); 10: par,a,V,-
11: par,b,V,-
12: par,c,R,-
13: call,-,-,p21
15. end; {p22} 14: endu,,p22,-,-
16. begin
17. p22; 15: call,-,-,p22
18. end; {p1} 16: endu,p1,-,-
19. begin
20. p1; 17: call.-,-,p1
21. end.. {p} 18: endu,p,-,-

procedure main();
begin
la();
E();
if
next_token<>Eof then ERROR();
end;
 
procedure E();
begin
     if next_token=Minus then begin la(); E()
end;
     if next_token=LPar then begin
la(); E();
if next_token=RPar then la();
else ERROR()
     end;
     if next_token = 'i' then begin V();
EPRIME() end
end;
 
procedure EPRIME();
begin
     if next_token=Minus then begin la(); E()
end
end;
 
procedure V();
begin
     if next_token='i' then begin la(); VPRIME()
end;
     else ERROR()
end;
 
procedure VPRIME();
begin
     if next_token=LPar then begin
la(); E();
if next_token=RPar then la();
else ERROR
     end
end;
 
procedure la();
begin
     c=getnextchar();
     if eof then return eof;
     else return c
end

1.             
unit, proc1, -,
-
2.             
*, x, z, $1
3.             
+, 1, $1, $2
4.             
:=, $2, -, y
5.             
endu, proc1, -,
-
 
6.             
unit, excj99,
-, -
7.             
+, a, x, $3
8.             
>, $3, y, 10
9.             
jmp, -, - , 18
10.        
<=, i, n, 12
11.        
jmp, -, -, 17
12.        
+, s, i, $4
13.        
:=, $4, -, s
14.        
+, i, 1, $5
15.        
:=, $5, -, i
16.        
jmp, -, -, 10
17.        
jmp, -, -, 29
18.        
>, x, y, 22
19.        
jmp, -, -, 20
20.        
<, z, x, 22
21.        
jmp, -, -, 24
22.        
:=, 3, -, z
23.        
jmp, -, -, 29
24.        
+, x, y, $6
25.        
par, V, $6, -
26.        
par, V, r, -
27.        
call, -, -,
proc1
28.        
jmp, -, -, 29
29.        
endu, excj99,
-, -
Τελικός κώδικας
για τις τετράδες 9-14:
            _p_22_3   proc near               ;unit,
p22, -, -
              push bp
              mov bp,sp
              sub sp,2      
              mov si, word ptr[bp+4]  ;par, a, V, -
              mov si, word ptr[si+4]
     mov
si, word ptr[si-2]
     push
ax
     mov
si, word ptr[bp+4]  ;par, b, V, -
     mov
si, word ptr[si-2]
     push
ax
     lea
si, word ptr[bp-2]  ;par, c, R, -
     push
si
     sup
sp,2                ;call, -, -, p21
     push
word ptr[bp+4]
     call
near ptr _p_21_2
     add
sp,10
     @p22_2:   mov
sp, bp              ;endu, p22, -, -
              pop bp
              ret
     _p22_p    endp
 
Στον τελικό
κώδικα χρησιμοποιήθηκαν σύνδεσμοι προσπέλασης.
 
Εγγραφήματα
δραστηριοποίησης
 
| 
   Θέση  | 
  
   Πρόγραμμα p  | 
  
   Διαδικασία p1  | 
  
   Διαδικασία p21  | 
  
   Διαδικασία p22  | 
 
| 
   bp+12  | 
  
      | 
  
      | 
  
   Παράμετρος x  | 
  
      | 
 
| 
   bp+10  | 
  
      | 
  
      | 
  
   Παράμετρος y  | 
  
      | 
 
| 
   bp+8  | 
  
      | 
  
      | 
  
   Παράμετρος z  | 
  
      | 
 
| 
   bp+6  | 
  
   Διεύθυνση
  αποτελέσματος  | 
  
   Διεύθυνση
  αποτελέσματος  | 
  
   Διεύθυνση
  αποτελέσματος  | 
  
   Διεύθυνση
  αποτελέσματος  | 
 
| 
   bp+4  | 
  
   Σύνδεσμος
  προσπέλασης  | 
  
   Σύνδεσμος
  προσπέλασης  | 
  
   Σύνδεσμος
  προσπέλασης  | 
  
   Σύνδεσμος
  προσπέλασης  | 
 
| 
   bp+2  | 
  
   Διεύθυνση
  επιστροφής  | 
  
   Διεύθυνση
  επιστροφής  | 
  
   Διεύθυνση
  επιστροφής  | 
  
   Διεύθυνση
  επιστροφής  | 
 
| 
   bp  | 
  
   Προηγούμενο bp  | 
  
   Προηγούμενο bp  | 
  
   Προηγούμενο bp  | 
  
   Προηγούμενο bp  | 
 
| 
   bp-2  | 
  
   Τοπική a  | 
  
   Τοπική b  | 
  
   Τοπική c  | 
  
   Τοπική c  | 
 
| 
   bp-4  | 
  
   Τοπική b  | 
  
   Τοπική c  | 
  
   Προσωρινή $1  | 
  
      | 
 
| 
   bp-6  | 
  
   Τοπική c  | 
  
      | 
  
   Προσωρινή $2  | 
  
      |