1 תורת הקומפילציה 236360 מרצה –פרופ"ח ארז פטרנק שעת קבלה – יום שני 13:30-14:30 טאוב 528 מתרגלים –קירה רדינסקי, מתרגלת אחראית –חגי טולדנו.

Slides:



Advertisements
Similar presentations
Introduction to Compiler Construction
Advertisements

תוכנה 1 סמסטר א ' תשע " ב תרגול מס ' 7 * מנשקים, דיאגרמות וביטים * לא בהכרח בסדר הזה.
Spring Compilers Software Eng. Dept. – Ort Braude Compilers Lecturer: Esti Stein brd4.braude.ac.il/~esti2.
מבוא למדעי המחשב לתעשייה וניהול
Compiler Construction by Muhammad Bilal Zafar (AP)
Compiler Chang Chi-Chung Textbook Compilers: Principles, Techniques, and Tools, 2/E.  Alfred V. Aho, Columbia University  Monica S. Lam,
טבלאות סמלים נכתב ע"י אלכס קוגן סמסטר חורף, תשס"ח.
Lecture 01 - Introduction Eran Yahav 1. 2 Who? Eran Yahav Taub 734 Tel: Monday 13:30-14:30
Yu-Chen Kuo1 Chapter 1 Introduction to Compiling.
* הידור, למהדרין. שקפי הקורס מבוססים על שקפים מאת פרופ' מיכאל רודה.
תכנות תרגול 6 שבוע : תרגיל שורש של מספר מחושב לפי הסדרה הבאה : root 0 = 1 root n = root n-1 + a / root n-1 2 כאשר האיבר ה n של הסדרה הוא קירוב.
Slide 1 of 40. Lecture A מבוא למדעי המחשב. Slide 2 of 40. Lecture A Lesson A - Introduction Unit A1 – About This Course.
תהליכים  מהו תהליך ?  מבני הנתונים לניהול תהליכים.  החלפת הקשר.  ניהול תהליכים ע " י מערכת ההפעלה.
Compiler Chang Chi-Chung Textbook Compilers: Principles, Techniques, and Tools, 2/E.  Alfred V. Aho, Columbia University  Monica S. Lam,
תורת הקומפילציה * * הידור, למהדרין. שקפי הקורס מבוססים על שקפים מאת פרופ' מיכאל רודה.
Overview of Compiler Design CIS 631, CSE 691, CIS400, CSE 400 Compiler Design Dr. Nancy McCracken January 15, 2008.
תורת הקומפילציה מרצה –ד"ר שירלי גינסברג שעת קבלה – יום שני 9:30-10:30 טאוב 318 מתרגלים –רותם אושמן, מתרגלת אחראית –סיוון ברקוביץ.
Compiler Construction1 A Compulsory Module for Students in Computer Science Department Faculty of IT / Al – Al Bayt University First Semester 2009/2010.
תורת הקומפילציה * * הידור, מהדיר, למהדרין. שקפי הקורס מבוססים על שקפים מאת פרופ' מיכאל רודה.
מבוא למדעי המחשב, סמסטר א ', תשע " א תרגול מס ' 1 נושאים  הכרת הקורס  פסאודו - קוד / אלגוריתם 1.
1.3 Executing Programs. How is Computer Code Transformed into an Executable? Interpreters Compilers Hybrid systems.
Lecture 2 Phases of Compiler. Preprocessors, Compilers, Assemblers, and Linkers Preprocessor Compiler Assembler Linker Skeletal Source Program Source.
CPSC 388 – Compiler Design and Construction Lecture: MWF 11:00am-12:20pm, Room 106 Colton.
September 7, September 7, 2015September 7, 2015September 7, 2015 Azusa, CA Sheldon X. Liang Ph. D. Computer Science at Azusa Pacific University.
410/510 1 of 20 Week 1 – Lecture 1 Introduction The Textbook Assessment Programming & Tools A v. small compiler Compiler Construction.
COP4020 Programming Languages
Chapter 1. Introduction.
Chapter 1 Introduction Dr. Frank Lee. 1.1 Why Study Compiler? To write more efficient code in a high-level language To provide solid foundation in parsing.
Introduction to Compiler Construction Robert van Engelen COP5621 Compiler Construction Copyright Robert.
Compiler Construction1 COMP Compiler Construction Lecturer: Dr. Arthur Cater Teaching Assistant:
Compiler course 1. Introduction. Outline Scope of the course Disciplines involved in it Abstract view for a compiler Front-end and back-end tasks Modules.
CST320 - Lec 11 Why study compilers? n n Ties lots of things you know together: –Theory (finite automata, grammars) –Data structures –Modularization –Utilization.
1 COMP 3438 – Part II-Lecture 1: Overview of Compiler Design Dr. Zili Shao Department of Computing The Hong Kong Polytechnic Univ.
Compiler Construction 1장1장. 2 간략한 소개  Aho, Sethi and Ullman  Kenneth C. Louden  Thomas W. Parsons  관련 과목 –Theories of programming languages –Automata.
Unit-1 Introduction Prepared by: Prof. Harish I Rathod
1.  10% Assignments/ class participation  10% Pop Quizzes  05% Attendance  25% Mid Term  50% Final Term 2.
1 Chapter 1 Introduction. 2 Outlines 1.1 Overview and History 1.2 What Do Compilers Do? 1.3 The Structure of a Compiler 1.4 The Syntax and Semantics of.
Compiler design Lecture 1: Compiler Overview Sulaimany University 2 Oct
מבוא למדעי המחשב לתעשייה וניהול הרצאה 7. סברוטינות subroutines.
Introduction Lecture 1 Wed, Jan 12, The Stages of Compilation Lexical analysis. Syntactic analysis. Semantic analysis. Intermediate code generation.
Introduction to Compilers. Related Area Programming languages Machine architecture Language theory Algorithms Data structures Operating systems Software.
Topic #1: Introduction EE 456 – Compiling Techniques Prof. Carl Sable Fall 2003.
1 Compiler Design (40-414)  Main Text Book: Compilers: Principles, Techniques & Tools, 2 nd ed., Aho, Lam, Sethi, and Ullman, 2007  Evaluation:  Midterm.
國立台灣大學 資訊工程學系 薛智文 98 Spring Compiler TH 234, DTH 103.
. n COMPILERS n n AND n n INTERPRETERS. -Compilers nA compiler is a program thatt reads a program written in one language - the source language- and translates.
Compiler Introduction 1 Kavita Patel. Outlines 2  1.1 What Do Compilers Do?  1.2 The Structure of a Compiler  1.3 Compilation Process  1.4 Phases.
Chapter 1: Introduction 1 Compiler Designs and Constructions Chapter 1: Introduction Objectives: Course Objectives Introduction Dr. Mohsen Chitsaz.
The Model of Compilation Natawut Nupairoj, Ph.D. Department of Computer Engineering Chulalongkorn University.
What is a compiler? –A program that reads a program written in one language (source language) and translates it into an equivalent program in another language.
Compiler Construction CPCS302 Dr. Manal Abdulaziz.
ICS312 Introduction to Compilers Set 23. What is a Compiler? A compiler is software (a program) that translates a high-level programming language to machine.
Presented by : A best website designer company. Chapter 1 Introduction Prof Chung. 1.
Prologue Sung-Dong Kim, Dept. of Computer Engineering, Hansung University.
COMP 3002: Compiler Construction Pat Morin School of Computer Science.
Chapter 1. Introduction.
Compiler principles Compiler Jakub Yaghob.
Compiler Design (40-414) Main Text Book:
PRINCIPLES OF COMPILER DESIGN
Chapter 1 Introduction.
Introduction to Compiler Construction
Language Translation Compilation vs. interpretation.
Introduction.
Chapter 1 Introduction.
课程名 编译原理 Compiling Techniques
Chapter 1: Introduction to Compiling (Cont.)
Introduction to Compiler Construction
Course supervisor: Lubna Siddiqui
תורת הקומפילציה הרצאה 1 מבוא; ניתוח לקסיקלי.
Introduction to Compiler Construction
Introduction to Compiler Construction
Presentation transcript:

1 תורת הקומפילציה מרצה –פרופ"ח ארז פטרנק שעת קבלה – יום שני 13:30-14:30 טאוב 528 מתרגלים –קירה רדינסקי, מתרגלת אחראית –חגי טולדנו

2 אדמיניסטרציה אתר: 25% - תרגילי בית –5% תרגילים "יבשים", רשות (מגן) –20% תרגילים "רטובים", חובה 75% - מבחן סוף הקורס ציון נכשל במבחן גורר כשלון בקורס, ללא קשר לציון התרגילים. קדם: אוטומטים ושפות פורמליות מועד ג' למילואימניקים (בלבד). העתקות...

3 ספרות ספר עיקרי A.V. Aho, M. S. Lam, R. Sethi, and J.D. Ullman – “Compilers – Principles, Techniques, and Tools”, Addison-Wesley, 2007 ספר משני R. Wilhelm, and D. Maurer – “Compiler Design”, Addison- Wesley, 1995

4 ספרות-המשך ספר נוסף K.D.Cooper and L.Torczon “Engineering A Compiler”, Morgan Kaufmann, 2004

5 פרס טיורינג March 10, 2009: ACM has named Barbara Liskov the recipient of the 2008 ACM A.M. Turing Award for her contributions to practical and theoretical foundations of programming language and system design.

6 מורכבות קומפילציה שפות תכנות הנדסת תכנה מבנה מחשבים מערכות הפעלה שפות פורמליות אלגוריתמים מבני נתונים משלב תחומים רבים ממדעי המחשב משלב מחקר תיאורטי ומעשי

7 קומפילציה (הידור) – מושגי יסוד זמן קומפילציה זמן ריצה compiler source programtarget program target program outputinput

8 אינטרפרטציה )= פרשנות( interpreter source program input output שימושים: -שפות סקריפט שבהם כל שורה קוראת לביצוע של משהו מורכב (אין טעם ליעל) -שפות מאד גבוהות (APL) שבהן הנתונים מורכבים ואינם ידועים בעת הקומפילציה

9 דוגמא למבנה מודרני חשוב - Java source program input output Translator (javac) Intermediate program (bytecode) Bytecode is standard, machine-independent Just In Time -- תוך כדי פרשנות התכנית, ה- interpreter מבצע קומפילציה של חלקי תוכנית על מנת שהמשך הביצוע יהיה מהיר יותר. Java Virtual Machine Virtual machine- תלוי מכונה. מבצע טוב כפי יכולתו על המכונה הנתונה.

10 הידור / אינטרפרטציה – הכללות Source to Source Virtual Machine Pre-processors C ++ program C program translator Java bytecodeJava program compiler “pure” program program with embedded pre-pocessing statements (e.g., #include, macros) preprocessor

11 שימושים של קופיילרים יעד קוד מכונה: SPARC, P690, IA32 שפת אסמבלי קוד עבור אינטרפרטר: Java Virtual Machine, P-Code, … שפות עבוד טקסט: PostScript, TeX, html, RTF, … תוכנה למכשור מעגל חשמלי קלט שפות תכנות:C, Pascal, Assembler,... שפות לעיבוד טקסט: PostScript, TeX, html, RTF,… שפות scripting: C-shell, emacs, perl, Hypercard… שפות שאילתה לעבוד נתונים (SQL) שפות לתיאור חומרה (VHDL) שפות בקרה

12 כלים נוספים לעיבוד שפה – דוגמא Skeletal source program Preprocessor Source program Target assembly program Assembler Relocateable machine code Loader/Link-editor Absolute machine code compiler Library, releasable, object files איסוף מודולים, פתיחת מקרואים. כתובות יחסיות, הפניות לספריה כתובות יחסיות, לכל התוכנית Link: כתובות אבסולוטיות Load:

13 קומפילציה – חשיבות התחום לפיתוח שמושים מתקדמים –ניצול של כלים לפיתוח קומפיילרים להקלת מאמץ הפיתוח –קריאה (ו"הבנה") אוטומטית של קבצי קלט למפתחי תוכנה –הבנה של האבחנה בין זמן קומפילציה לזמן ריצה –הבנה של מה יעשה קומפיילר עם התוכנה שלכם (שיפור זמן ריצה, התראות של שגיאות) –שימוש נכון במבנים שונים של שפות התכנות –ניצול נכון של ארכיטקטורת המחשב

14 קומפילציה – חשיבות התחום לאנשי שפות תכנות –תמיכה יעילה בשפה חדשה לאנשי ארכיטקטורה של מחשבים –הבנה טובה של האיזון העדין שבין חומרה לתכנה –הבנה מעמיקה מה יעשה קומפיילר (כלומר: מה תעשה כל תוכנה) עם החומרה שלכם

15 תורת הקומפילציה – תוכן הקורס מבוא מבנה הקומפיילר ניתוח מילוני (lexical analysis) ניתוח תחבירי (parsing) ניתוח סמנטי יצירת קוד נושאים מתקדמים: –אופטימיזציות, ניתוח סטטי, Data-flow analysis, ניהול זיכרון, קומפיילרים Just-In-Time ו-Virtual Machines, קומפיילרים "פתוחים"

16 מבנה הקומפיילר – תמונה כללית Wilhelm and Maurer – Chapter 6 Aho, Sethi, and Ullman – Chapter 1 Cooper and Torczon – Chapter 1

17 קומפיילר – כקופסא שחורה target code int a, b; a = 2; b = a*2 + 1; SET R1,2 STORE #0,R1 SHIFT R1,1 STORE #1,R1 ADD R1,1 STORE #2,R1 source code מתרגם משפת המקור לשפת היעד תוכנית זהה סמנטית (עושה אותו דבר) כיוון שהתירגום מסובך, חילקו אותו לשלבים מודולריים סטנדרטיים.

18 קומפיילר – חלוקה גסה תוכנית מקור תוכנית מטרה analysis code optimization code generation יצוג ביניים ייצוג ביניים Front End Back End

19 מרכיבי הקומפיילר – חלוקה עדינה Character Stream Lexical Analyzer Token Stream Syntax Analyzer Syntax Tree Semantic Analyzer Decorated Syntax Tree Machine-Independent Code Optimization Intermediate Representation Code Generator Target Machine Code Machine-Dependent Code Optimization Intermediate Code Generator Intermediate Representation Target Machine Code

20 מרכיבי הקומפיילר – Front End Character Stream Lexical Analyzer Token Stream Syntax Analyzer Syntax Tree Semantic Analyzer Decorated Syntax Tree Intermediate Code Generator קל, טיפול בביטויים רגולריים יותר מסובך, רקורסיבי, עבודה עם דקדוק חסר הקשר. יותר מסובך, רקורסיבי, דורש עליה וירידה בעץ של הגזירה. השטחת העץ. חלק האופטימיזציות נח לעשות על עץ, וחלק על קוד

21 דוגמה לתפקידי החלקים

22 דוגמה לתפקידי החלקים

23 טבלת הסמלים מבנה נתונים לכל identifier. שומר את התכונות שלו (attributes) ומאפשר גישה מהירה. –לדוגמא: מיקום בזיכרון, טיפוס, scope. –הטבלה נבנית במהלך הניתוח. למשל: הניתוח הלקסיקלי לא מגלה מה הטיפוס. רק השלב של ייצור הקוד יודע את מיקום המשתנה בזיכרון, וכיו"ב.

24 הודעות שגיאה חלק חשוב של תהליך הקומפילציה כל שלב מגלה שגיאות ברמת הניתוח שלו של התוכנית. –מודיע על השגיאה –ומנסה כמיטב יכולתו להמשיך בקומפילציה

25 יתרון חשוב של מודולריות שפה א שפה ב... analysis 1 analysis n analysis 2 machine independent optimization machine dependent optimization code generation machine dependent optimization code generation מכונה 1מכונה m …

26 שפת ביניים שפה קלה לייצור, שקל לייצר ממנה קוד אמיתי, ונוחה לעבודה לאופטימיזציה. אנו נשתמש בצורה הנקראת three-address code שבה כל תא בזיכרון יכול לשמש פרמטר לכל פעולה. temp1 := inttoreal(60) temp2 := id3 * temp1 temp3 := id2 + temp2 id1 := temp3

27 שלב האופטימיזציה יצירת קוד הביניים נעשית בצורה אוטומטית. הקוד ניתן לשיפור temp1 := inttoreal(60) temp2 := id3 * temp1 temp3 := id2 + temp2 id1 := temp3 temp1 := id3 * 60.0 id1 := id2 + temp1

28 שלב האופטימיזציה Decorated Syntax Tree machine independent optimization דוגמאות –constant propogation –common subexpressions –dead code elimination

29 אופטימיזציה לא ניתן לייצר קוד אופטימלי (NP-שלם, לא ניתן להכרעה, תלוי מה מנסים לעשות...). לכן משתמשים בהיוריסטיקות. חובה לשמור על נכונות; צריך לשפר (כמעט תמיד); חישוב האופטימיזציה צריך להיות יעיל. שיפורים: מהירות, מקום, אנרגיה, וכו'. החלק שתופס זמן מירבי בתהליך הקומפילציה. השאלה העיקרית: כמה זמן שווה להשקיע באופטימיזציה עבור ייעול תוכנית המטרה. –התשובה מאוד משתנה עבור JIT.

30 אופטימיזציה מודרנית האתגר העיקרי הוא לנצל פלטפורמות מודרניות –Multicores –פקודות ווקטוריות –היררכית זיכרונות –האם הקוד מועבר ברשת (Java Bytecode)?

31 שלב הסינתזה ((back-end decorated syntax tree decorated syntax tree target program address assignmet code generation machine dependent optimization peephole optimizer

32 ייצור קוד (Code Generation) שלב אחרון: ייצור קוד של שפת המטרה. משימה חשובה: החלטה על מיקום המשתנים בזיכרון. האתגר העיקרי: לאיזה משתנים יוקצו רגיסטרים באיזה שלב של התוכנית? –פעולות על רגיסטרים מהירות משמעותית מפעולות על הזיכרון. השמה אופטימלית למקרה הגרוע ביותר היא קשה (NP- קשה), היוריסטיקות מאד טובות קיימות.

33 ה- back-end, דוגמא a = 2 temp1 = a*2 b = temp1 + 1 address assignment machine indep. optimization machine-dependent optimization a  0 temp1  1 b  2 a = 2 temp1 = a << 1 b = temp1 + 1 SET R1,2 STORE #0,R1 LOAD R1,#0 SHIFT R1,1 STORE #1,R1 LOAD R1,#1 ADD R1,1 STORE #2,R1 int a, b; a = 2; b = a*2 + 1; SET R1,2 STORE #0,R1 SHIFT R1,1 STORE #1,R1 ADD R1,1 STORE #2,R1 (front end) code generation

34 כלים חלק משמעותי מהמאמץ בכתיבת קומפיילרים חוזר על עצמו בין קומפיילקים שונים. כלים מיועדים לחסוך את החלק החוזר. –Parser generators: חלקם מתבססים על אלגוריתמים מורכבים. –Scanner generator (עבור ניתוח לקסיקאלי) –Syntax-directed translation engines מעבר על העץ האבסטרקטי ויצירת קוד ביניים ממנו ע"י ביצוע פעולה על כל צומת. –Data Flow Engines עבור אופטימיזציה.

35 לסיכום קומפיילר מתרגם משפת מקור לשפת יעד (ובדרך מספק בדיקת שגיאות חשובה). על מנת להקטין את הסיבוכיות התירגום מחולק למודולים ברורים ונפרדים. שלב ה-front-end מביא את התוכנית לייצוג ביניים שנוח לעבוד איתו באופן אוטומטי. שלב ה-back-end מבצע אופטימיזציות ומייצר קוד של שפת המטרה. בהמשך – נתחיל בהבנת ה-front-end.