Sviluppo%20di%20un%20compilatore%20per%20un%20linguaggio%20imperativo. - PowerPoint PPT Presentation

About This Presentation
Title:

Sviluppo%20di%20un%20compilatore%20per%20un%20linguaggio%20imperativo.

Description:

Sviluppo di un compilatore per un linguaggio imperativo. Universit ... E' un programma che traduce un programma (sorgente) in un altro programma equivalente ... – PowerPoint PPT presentation

Number of Views:145
Avg rating:3.0/5.0
Slides: 17
Provided by: KKK75
Category:

less

Transcript and Presenter's Notes

Title: Sviluppo%20di%20un%20compilatore%20per%20un%20linguaggio%20imperativo.


1
Sviluppo di un compilatore per un linguaggio
imperativo.
Università degli studi di Roma Tor
Vergata Facoltà di Ingegneria Corso di laurea in
Ingegneria Informatica
Relatore Prof. Alberto Pettorossi
Laureando Fernando Iazeolla
Anno Accademico 2003-2004
2
Cosa e un compilatore
  • E un programma che traduce un programma
    (sorgente) in un altro programma equivalente

sorgente
compilatore
codice
3
Struttura di un compilatore
Front end
Back end
  • Front end lexical analizer parser
  • Back end encoder linker

4
Lexical analizer (1)
  • Riconosce i token dellinput stream
  • Token
  • Numeri
  • Identificatori
  • Simboli (punteggiatura)

5
Lexical analizer (2)
  • Numeri

digit ? 0123456789 digits ? digit digit optional_fraction ? . digits e optional_ exponent ? ( E ( - e ) digits) e number ? digits optional_fraction optional_exponent
6
Lexical analizer (3)
  • Identificatori

letter ? ABCZabcz digit ? 0123456789 id ? letter (letter digit )
7
parser (1)
  • Il linguaggio e riconosciuto dal parser tramite
    grammatiche context-free o BNF
  • Assumiamo il parser come una rappresentazione di
    un albero di parsing per i token generati dal
    lexical analizer

8
Parser (2)
Grammatica program?opt_sub mainp
opt_sub opt_sub?e sub id ( listargs ) statement
opt_sub mainp?main ( ) statement statement?
statement e statement?write ( id )
statement? id ( listargs )
Programma sub out(a) write(a) main()
out(1)
9
Albero di parsing
program
opt_sub
opt_sub
mainp
e
main
(
)
stmt
stmt
)
lstarg
(
id
sub
e
stmt


out
id

stmt

a
)
id
(
write


out
(
lstarg
)

1
a
10
Il mio compilatore
  • ha laritmetica dei puntatori
  • ha le funzioni con parametri
  • ha variabili globali
  • ha variabili locali
  • ha tipi di dato interi, puntatori, stringhe
  • e procedurale
  • adotta una sintassi C-like

11
Output del mio compilatore
Pseudo assembler
compilatore
sorgente
Assembler sorgente intel 80x86
Codice macchina intel 80x86
12
esempio
  • Programma sorgente
  • Pseudo assembler

1-jump 12 2- init_funz 3- create_local(2)
4- load stack_bp(6) 5- add stack_bp(4) 6-
store stack_bp(-2) 7- load stack_bp(-2) 8-
destroy_local(2) 9- end_funz 10-
destroy_local(2) 11- end_funz 12- init_funz 13-
loadc 1 14- push 0 15- loadc 3 16- push 0 17-
call 2 18- destroy_local(4) 19- store 23 20-
halt 21- destroy_local(0) 22- end_funz 23- dw
0 24- block(2)
sub somma(a,b) local(z) zab return(z)
main() xsomma(1,3)
13
esempio
00000100 0E push cs 00000101 1F
pop ds 00000102 E93400
jmp 0x39 00000105 90 nop 00000106
55 push bp 00000107 89E5
mov bp,sp 00000109 81EC0200 sub
sp,0x2 0000010D 89EB mov
bx,bp 0000010F 81C30600 add
bx,0x6 00000113 8B07 mov
ax,bx 00000115 89EB mov
bx,bp 00000117 81C30400 add
bx,0x4 0000011B 0307 add
ax,bx 0000011D 89EB mov
bx,bp 0000011F 81C3FEFF add
bx,0xfffe 00000123 8907 mov
bx,ax 00000125 89EB mov
bx,bp 00000127 81C3FEFF add
bx,0xfffe 0000012B 8B07 mov
ax,bx 0000012D 81C40200 add
sp,0x2 00000131 5D pop
bp 00000132 C3 ret 00000133
81C40200 add sp,0x2 00000137 5D
pop bp 00000138 C3
ret 00000139 90 nop 0000013A 55
push bp 0000013B 89E5
mov bp,sp 0000013D B80100 mov
ax,0x1 00000140 50 push
ax 00000141 B80300 mov
ax,0x3 00000144 50 push
ax 00000145 E8BDFF call 0x5 00000148
81C40400 add sp,0x4 0000014C A35701
mov 0x157,ax 0000014F CD20
int 0x20 00000151 81C40000 add
sp,0x0 00000155 5D pop
bp 00000156 C3 ret 00000157 0000
add bxsi,al 00000159 90
nop
Funzione somma
FFFF h
old bp
1
3
148 h
Funzione main
bp main
bp somma
z
0
14
Esempio (2)
  • Programma fattoriale

sub foo() return(5) sub fattoriale(a) loc
al(x,y,z) if(a1) return(1) za-1 yfattor
iale(z) xya return(x)
main() local(x,z) write("fattoriale") write
(crlf) xfattoriale(8) write(x) write(crlf)
if(xgt100) z4 else zfoo()
write("ciclo") write(crlf) while(zgt0) w
rite(z) write(crlf) zz-1
15
Esempio (2)
  • Output del programma fattoriale

16
Conclusioni
  • Conclusioni
  • Compilatore funzionante
  • Eseguibili DOS/Windows
  • Linguaggio C-like
  • Sviluppi futuri
  • Estenzione per un linguaggio ad oggetti
  • eseguibile per altri sistemi operativi
  • Sviluppare interfaccia grafica
Write a Comment
User Comments (0)
About PowerShow.com