Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
اصول طراحی کامپایلر
12-10و دوشنبه 12-10شنبه : ساعات رفع اشکال.ترفع اشکال در ساعتهای دیگر با تعیین وقت قبلی نیز ممکن اس
[email protected]:ایمیل37934060: تلفن
میان ترم % 25پایان ترم % 40(Javaترجیحا )پروژه ها % 20-15تکالیف ، امتحانک ها و فعالیت های کالسی% 15-20
نحوه ارزشیابی
:کتاب های مرجع
• Compilers: Principles, Techniques, and Tools, Aho, Sethi and Ullman (Dragon).
• Modern Compiler Implementation in Java, A. Apple (Tiger).
تاریخچه کامپایلر
وده استنوشتن برنامه به زبان ماشین وقتگیر و پر از خطا ب
PDP 8ماشین محاسباتی
یا 8ورودی ماشین عددهایی در مبنای بوده اند که بوسیله کلیدهای 16
ماشین دریافت می شدند و خروجی ش بصورت نوار یا در یک صفحه نمای
.داده می شده استی نوشتن برنامه با چنین ماشین های
ت بوده اساشتباه و همراه با وقتگیر
نوشتن برنامه به زبان ماشین وقتگیر و پر از خطا بوده است: مساله
. یکی از اولین قدم ها برای کاهش خطا و صرفه جویی استفاده از اسمبلر بوده است
ی تکه ای از زبان اسمبل
Assembler
زبان ماشین
تاریخچه کامپایلر
Grace Hopper1906-1992
John Bakus1924-2007
مادربزرگ کامپایلرنگلیسیانوشتن برنامه به زبانی نزدیک به زبان : ایده
موفق شد اولین زبانهای سطح 1950در اوایل دهه باالرا طراحی کند
•MATH-MATIC•FLOW-MATIC
(common business-oriented language) COBOL
Fortran:Formula Translated
تاریخچه کامپایلر
.ویندنیاز دارن که به آن کامپایلر می گ( واسط)زبانهای سطح باال به یک مترجم
(Source Language)زبان مبدا (Compiler)کامپایلر (Target Language) زبان مقصد
شته زبانی که کامپایلر با آن نومی می شود زبان میزبان گفته
(Host Language)شود
ی ، یا زبان مقصد می تواند زبان ماشین ، اسمبل Javaیا Cزبان های سطح باال مانند
(Source-to-Source Compiler )باشد
ی کند برنامه ای است که یک برنامه را به عنوان ورودی دریافت م: کامپایلرو آنرا به برنامه ای هم ارز در زبان دیگر ترجمه می کند
تاریخچه کامپایلر
(Language Processors)پردازشگر های زبان
(Compiler)کامپایلر
(Interpreter)مفسر
(Compiler)کامپایلر ان برنامه به زب
مبدا برنامه به زبان هدف
مفسر (Interpreter) خروجی برنامه
دابرنامه به زبان مب
ورودی برنامه
:ویزگیهای مفسرها در مقایسه با کامپایلر هاکندی در اجرای برنامه •هر خط برنامه اجرا می شود و)سرعت باالی کشف خطا •
.(خطا ها به سرعت کشف می شود
رهای تقسیم بندی پردازشگزبان
: زبان مفسری
Smalltalk(1980)
(Language Processors)پردازشگر های زبان
(Compiler)کامپایلر
(Interpreter)مفسر
(Compiler)کامپایلر ان برنامه به زب
مبدا برنامه به زبان هدف
مفسر (Interpreter) خروجی برنامه
دابرنامه به زبان مب
ورودی برنامه
ار با عث اینک)پردازشگر جاوا ترکیبی از کامپیلر و یک مفسر در برنامه نویسی های ( portability)خاصیت حمل پذیری
ین چون کامپایلر به تنهایی به نوع ماش. شبکه ای می شود(بستگی دارد
مفسر (Interpreter)
کامپایلر (Compiler)
دابرنامه به زبان مب
bytecode
ورودی برنامه
خروجی برنامه
پردازشگر جاوا
Bytecode روی هر سخت افزاری کهJVM دارد قابل تفسیر و اجراست
رهای تقسیم بندی پردازشگزبان
(Language Processors)پردازشگر های زبان
هاست تاکید درس اصول طراحی کامپایلر بر ساختار و معماری کامپیلر
.ه می کند برای اجرای یک برنامه در یک زبان خاص کامپایلر زبان از برنامه های دیگری نیزاستفادPre Processor
Source Program
Modified Source Program
Compiler
Target Assembly Program
Assembler
Relocatable Machine Code
Linker/Loader
Target Machine Code
Linker:یم و کدهای بزرگ به قسمتهای کوچکتر تقسبین قسمتهای Linkerکامپایل می شوند و
کوچکترکامپایل شده رابطه برقرار می کند
Loader : فایلها در حافظه قابل دسترسCPU قرار می دهد
PreProcessor :header files وmacros را بهبرنامه اضافه می کند
آدرس حافظه های مورد نیاز قابل تغییر.داردLoaderاست وبستگی به
چرا کامپایلر می خوانیم؟
اوت همیشه نیاز به زبانهای جدید با قابلیت های متف(Domain-Specific Languages)وجود دارد
زبانهای موجود به راحتی قابل تغییر نیستند . یادگرفتن زبانهای جدید آسانتر است
Scientific Computing:
1. Good Functional Programming
2. Good Arrays
3. Parallelism
Business Application:
1. Persistence
2. Report Generation
3. Data Analysis
System Programming (OS)
1. Resource Control
2. Real time constrains
FORTAN
SQL
C/C++
علل ایجاد زبانهای جدید
چرا کامپایلر می خوانیم؟
:به عنوان یک دانشجو کامپایلر می خوانیم که(NLPکاربردهای فراوان مثل )اصول پردازش زبان را بشناسیم . 1با رویکرد حل مساله و طراحی یک نرم افزار نسبتا پیچیده آشنا می شویم . 2نا شویمبه عنوان یک برنامه نویس با نرم افزارهای پشت پرده اجرای یک زبان برنامه نویس اش. 3.شاید از ما خواسته شود یک کامپایلر برای یک زبان جدید بنویسیم. 4
رساختار کامپایل
CompilerLexical Analysis (Scanner)
(تحلیل لغوی)
Syntax Analysis (Parser)(تحلیل نحوی)
Code Generator
Machine Dependent Code Opt.
Semantic Analysis (Type Checker,..)(تحلیل معنایی)
را فازهایی که مستقل از ماشین هستندFront-end و بقیه را . می گویندBack-endمی گویند
Source Program
Target Program
Intermediate Code Generator
Front-end
Back-end
Intermediate Code Opt.این دو فاز در کامپایلرهای اولیه موجود نداشته است
رساختار کامپایل
𝐸کتاب اژدها1.7شکل → 𝐸′ = 𝐸𝐸 → 𝐸 + 𝐸|𝐸 × 𝐸𝐸 → 𝑖𝑑𝐸′ → 𝑖𝑑 They may return an error!!
در تمام مراحل اجرای اده کامپایلر مورد استف
قرار می گیرد
The Structure of a Modern Compiler
Lexical Analysis
Syntax Analysis
Semantic Analysis
IR Generation
IR Optimization
Code Generation
Optimization
SourceCode
MachineCode
The Structure of a Modern Compiler
Lexical Analysis
Syntax Analysis
Semantic Analysis
IR Generation
IR Optimization
Code Generation
Optimization
SourceCode
MachineCode
Lexical Analysis
Syntax Analysis
Semantic Analysis
IR Generation
IR Optimization
Code Generation
Optimization
while (y < z) { int x = a + b; y += x;}
Lexical Analysis
Syntax Analysis
Semantic Analysis
IR Generation
IR Optimization
Code Generation
Optimization
while (y < z) { int x = a + b; y += x;}
Lexical Analysis
Syntax Analysis
Semantic Analysis
IR Generation
IR Optimization
Code Generation
Optimization
while (y < z) { int x = a + b; y += x;}
T_WhileT_LeftParenT_Identifier yT_LessT_Identifier zT_RightParenT_OpenBraceT_IntT_Identifier xT_AssignT_Identifier aT_PlusT_Identifier bT_SemicolonT_Identifier yT_PlusAssignT_Identifier xT_SemicolonT_CloseBrace
Lexical Analysis
Syntax Analysis
Semantic Analysis
IR Generation
IR Optimization
Code Generation
Optimization
while (y < z) { int x = a + b; y += x;}
T_WhileT_LeftParenT_Identifier yT_LessT_Identifier zT_RightParenT_OpenBraceT_IntT_Identifier xT_AssignT_Identifier aT_PlusT_Identifier bT_SemicolonT_Identifier yT_PlusAssignT_Identifier xT_SemicolonT_CloseBrace
Lexical Analysis
Syntax Analysis
Semantic Analysis
IR Generation
IR Optimization
Code Generation
Optimization
while (y < z) { int x = a + b; y += x;}
While
<
Sequence
=
x +
a b
=
y +
y x
y z
Lexical Analysis
Syntax Analysis
Semantic Analysis
IR Generation
IR Optimization
Code Generation
Optimization
while (y < z) { int x = a + b; y += x;}
While
Sequence
=
x +
a b
=
y +
y x
<
y z
Lexical Analysis
Syntax Analysis
IR Generation
IR Optimization
Code Generation
Optimization
while (y < z) { int x = a + b; y += x;}
While
Sequence
=
x +
a b
=
y +
y x
int
int int
int
int int
int
int int
int
void
void
Semantic Analysis
<
y z
int int
bool
Lexical Analysis
Syntax Analysis
Semantic Analysis
IR Generation
IR Optimization
Code Generation
Optimization
while (y < z) { int x = a + b; y += x;}
While
Sequence
=
x +
a b
=
y +
y x
int
int int
int
int int
int
int int
int
void
void
<
y z
int int
bool
Lexical Analysis
Syntax Analysis
Semantic Analysis
IR Optimization
Code Generation
Optimization
while (y < z) { int x = a + b; y += x;}
Loop: x = a + b y = x + y _t1 = y < z if _t1 goto Loop
IR Generation
Lexical Analysis
Syntax Analysis
Semantic Analysis
IR Generation
IR Optimization
Code Generation
Optimization
while (y < z) { int x = a + b; y += x;}
Loop: x = a + b y = x + y _t1 = y < z if _t1 goto Loop
Lexical Analysis
Syntax Analysis
Semantic Analysis
IR Generation
Code Generation
Optimization
while (y < z) { int x = a + b; y += x;}
x = a + bLoop: y = x + y _t1 = y < z if _t1 goto Loop
IR Optimization
Lexical Analysis
Syntax Analysis
Semantic Analysis
IR Generation
IR Optimization
Code Generation
Optimization
while (y < z) { int x = a + b; y += x;}
x = a + bLoop: y = x + y _t1 = y < z if _t1 goto Loop
Lexical Analysis
Syntax Analysis
Semantic Analysis
IR Generation
IR Optimization
Code Generation
Optimization
while (y < z) { int x = a + b; y += x;}
add $1, $2, $3Loop: add $4, $1, $4 slt $6, $1, $5 beq $6, loop
Lexical Analysis
Syntax Analysis
Semantic Analysis
IR Generation
IR Optimization
Code Generation
Optimization
while (y < z) { int x = a + b; y += x;}
add $1, $2, $3Loop: add $4, $1, $4 slt $6, $1, $5 beq $6, loop
Lexical Analysis
Syntax Analysis
Semantic Analysis
IR Generation
IR Optimization
Code Generation
Optimization
while (y < z) { int x = a + b; y += x;}
add $1, $2, $3Loop: add $4, $1, $4 blt $1, $5, loop
The Course Project: Decaf
● Custom programming language similar to Java or C++.
● Object-oriented with free functions.● Single inheritance with interfaces.
Programming Assignments
Lexical Analysis
Syntax Analysis
Semantic Analysis
IR Generation
IR Optimization
Code Generation
Optimization
SourceCode
MachineCode
Programming Assignments
Lexical Analysis
Syntax Analysis
Semantic Analysis
IR Generation
IR Optimization
Code Generation
Optimization
SourceCode
MachineCode
Next Time...
Lexical Analysis
Syntax Analysis
Semantic Analysis
IR Generation
IR Optimization
Code Generation
Optimization
SourceCode
MachineCode