* הידור, למהדרין. שקפי הקורס מבוססים על שקפים מאת פרופ' מיכאל רודה.

Slides:



Advertisements
Similar presentations
Introduction to Compiler Construction
Advertisements

Object Oriented 33 MCSD DORON AMIR
ממיבחניםC שאלות ++.
תוכנה 1 סמסטר א ' תשע " ב תרגול מס ' 7 * מנשקים, דיאגרמות וביטים * לא בהכרח בסדר הזה.
Spring Compilers Software Eng. Dept. – Ort Braude Compilers Lecturer: Esti Stein brd4.braude.ac.il/~esti2.
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.
מכון ויצמן למדע - שמוליק מתוך 8 חישוב מקבילי ומבוזר מה זה יחידה חמישית במדעי המחשב... n ענף מתקדם במדעי המחשב העוסק במערכות ממוחשבות מרובות ישויות.
1 תורת הקומפילציה מרצה –פרופ"ח ארז פטרנק שעת קבלה – יום שני 13:30-14:30 טאוב 528 מתרגלים –קירה רדינסקי, מתרגלת אחראית –חגי טולדנו.
מרצה: פרופסור דורון פלד
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 מתרגלים –רותם אושמן, מתרגלת אחראית –סיוון ברקוביץ.
מערכות הפעלה ( אביב 2006) חגית עטיה © 1 סיכום הקורס.
תורת הקומפילציה * * הידור, מהדיר, למהדרין. שקפי הקורס מבוססים על שקפים מאת פרופ' מיכאל רודה.
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב' Templates תבניות.
מבוא למדעי המחשב תרגול 3 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
מבוא למדעי המחשב, סמסטר א ', תשע " א תרגול מס ' 1 נושאים  הכרת הקורס  פסאודו - קוד / אלגוריתם 1.
© , ד"ר עמיר תומר שיטות בהנדסת תוכנה (234321) אודות הקורס - 1 שיטות בהנדסת תוכנה Introduction to Software Engineering מרצה : פרופ ’ שמואל.
1 אופטימיזציה של קוד ASU פרק מה זה אופטימיזציה? שיפור ביצועי התוכנית. בניגוד למה שמשתמע מהשם, בדרך-כלל לא מגיעים לאופטימום.
בדיקת טיפוסים Aho, Sethi, Ullman – Chapter 6. בדיקת טיפוסים (type checking) המטרות העיקריות של בדיקת הטיפוסים בדיקת תקינות פתרון של בעיות overloadingו-
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.
BIT Presentation 6. Contents GENERATIONS OF LANGUAGES COMPILERS AND INTERPRETERS VIRTUAL MACHINES OBJECT-ORIENTED PROGRAMMING SCRIPTING LANGUAGES.
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.
Introduction to Compiler Construction Robert van Engelen COP5621 Compiler Construction Copyright Robert.
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.
CS 326 Programming Languages, Concepts and Implementation Instructor: Mircea Nicolescu Lecture 2.
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.
1.  10% Assignments/ class participation  10% Pop Quizzes  05% Attendance  25% Mid Term  50% Final Term 2.
1 מבוא למדעי המחשב הרצאה 21: Queue, Iterator & Iterable.
410/510 1 of 31 Week 1 – Lecture 1 Introduction The Textbook Assessment Overview Compiler Construction.
Compiler design Lecture 1: Compiler Overview Sulaimany University 2 Oct
Chapter 1 Introduction. Chapter 1 - Introduction 2 The Goal of Chapter 1 Introduce different forms of language translators Give a high level overview.
1 Compiler Design (40-414)  Main Text Book: Compilers: Principles, Techniques & Tools, 2 nd ed., Aho, Lam, Sethi, and Ullman, 2007  Evaluation:  Midterm.
. 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.
Yaron Doweck Yael Einziger Supervisor: Mike Sumszyk 1.
שיאון שחוריMilOSS-il מוטיבציה  python זה קל ו C זה מהיר. למה לא לשלב?  יש כבר קוד קיים ב C. אנחנו רוצים להשתמש בו, ולבסס מעליו קוד חדש ב python.
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.
1 תרגול 11: Design Patterns ומחלקות פנימיות אסף זריצקי ומתי שמרת 1 תוכנה 1.
תוכנה 1 תרגול 2: מערכים, לולאות והתמודדות עם שגיאות.
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.
COP4020 Programming Languages Introduction Prof. Robert van Engelen (modified by Prof. Em. Chris Lacher)
Compilers Design Chapter1 : Introduction, Structure of a Compiler
COMP 3002: Compiler Construction Pat Morin School of Computer Science.
Chapter 1. Introduction.
Compiler Design (40-414) Main Text Book:
PRINCIPLES OF COMPILER DESIGN
Chapter 1 Introduction.
Introduction to Compiler Construction
Introduction.
Chapter 1 Introduction.
课程名 编译原理 Compiling Techniques
Chapter 1: Introduction to Compiling (Cont.)
Introduction to Compiler Construction
תורת הקומפילציה הרצאה 1 מבוא; ניתוח לקסיקלי.
Shell Scripts בסביבת UNIX
COP4020 Programming Languages
Introduction to Compiler Construction
Introduction to Compiler Construction
Presentation transcript:

* הידור, למהדרין. שקפי הקורס מבוססים על שקפים מאת פרופ' מיכאל רודה. 236360 תורת הקומפילציה* * הידור, למהדרין. שקפי הקורס מבוססים על שקפים מאת פרופ' מיכאל רודה.

תורת הקומפילציה מרצה מתרגלים מר טל כהן רותם אושמן, מתרגלת אחראית ctal@cs.technion.ac.il לכלול את מספר הקורס בכותרת ההודעה אחרת אין לכם סיכוי לעבור את מסנני הזבל שלי. שעת קבלה – מיד בתום ההרצאה, בחדר 507 מתרגלים רותם אושמן, מתרגלת אחראית דני גז

חג שמח! Photograph by Toby Ord

לוגיסטיקה 30% - תרגילי בית 70% -- מבחן סוף הקורס 10% תרגילים "יבשים", רשות (מגן) 20% תרגילים "רטובים", חובה 70% -- מבחן סוף הקורס ציון נכשל בתרגילים הרטובים גורר כשלון בקורס, ללא קשר לציון המבחן. ציון נכשל במבחן גורר כשלון בקורס, ללא קשר לציון התרגילים.

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

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

הידור – מושגי יסוד זמן קומפילציה זמן ריצה compiler source program target program target program input output

שיטות הידור – שימושים יעד קוד מכונה: 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) שפות בקרה

ההקשר הרחב – דוגמא compiler Skeletal source program Preprocessor Target assembly program Assembler Relocateable machine code Loader/Link-editor Absolute machine code compiler Library, releasable, object files

אינטרפרטציה = פרשנות source program interpreter output input

הידור / אינטרפרטציה – הכללות Just In Time -- תוך כדי פרשנות התכנית, ה-interpreter מבצע קומפילציה של חלקי תוכנית על מנת שהמשך הביצוע יהיה מהיר יותר. דוגמא: Java Source to Source Virtual Machine Pre-processors Eiffel program translator C program compiler Java program Java bytecode program with embedded pre-pocessing statements (e.g., C’s #include, macros) preprocessor “pure” program

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

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

סקירה זריזה של שפות תכנות עיקריות קומפיילר של... סקירה זריזה של שפות תכנות עיקריות

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

FORTRAN, 1954-58, John Backus (IBM) תחום: חישוב מדעי אפיונים ביטויים אריתמטיים מערכים חסומים פרוצדורות common blocks call by reference קלט / פלט מודל מימוש דרישות שטח קבועות מראש דגש על אופטימיזציה של חישובים נומריים עדיין בשימוש

ALGOL 60, 57-60 Committee (Backus, McCathy, Naur, …) תחום: חישוב נומרי אפיונים הוגדר בקפידה – התחביר הוגדר ע"י BNF מבנה בלוקים פרוצדורות רקורסיביות הגדרה מפורשת של טיפוסים חוקי scoping העברת פרמטרים by value & ו-by name dynamic array bounds שימושים מעט, בעיקר באירופה השפעה רבה על התחום (על שפות מאוחרות יותר)

Pascal etc., 1971 (Niklaus Wirth) תחום: חישובים כללים, חינוך אפיונים פשטות במימוש ובשפה הגדרות של טיפוסים רבים מתודולוגיה של תכנות מובנה מתאים להוכחת נכונות של תכניות דיאלקטים שונים Modula-2 1970-81 Oberon, Oberon-2 1988-90, 1992 Modula-3 1988-89

COBOL 1959-61 DOD-led committee תחום: עבוד נתונים אפיונים תיאור ניפרד לנתונים מבנה נתונים של records תיאור קבצים ופעולות עליהם תחביר דמוי אנגלית עדיין בשימוש נרחב

C, 1972-1974, Dennis Ritchie (Bell Labs) תחום: תכנות מערכות (תכנות ה- Unix kernel והשירותים הנלווים) אפיונים כר נרחב של פעולות תחביר תמציתי תמיכה בגישה למשאבי המכונה בשימוש נרחב בכל תחום כמעט שפה פופולרית מאוד

C++, 1980-, Bjarne Stroustrup תחום: תכנות מערכות אבל גם פיתוח שימושים אפיונים הרחבה של C תמיכה עבור טיפוסים אבסטרקטיים (abstract data types) מונחת עצמים שפה עשירה ומסובכת בשימוש נרחב יותר נזק מתועלת?

Java, 1995-, Arnold & Gosling (Sun) תחום: מגוון רחב של שימושים, עם דגש על ניצול תשתיות תקשורת אפיונים ניהול אוטומטי של הזכרון (garbage collection) אי-תלות בחומרה (JVM) בשימוש נרחב

LISP, 1959-60, John McCarthy (MIT) תחום: בינה מלאכותית וחישובים סימבוליים אפיונים עיבוד רשימות (list processing) תחביר פשוט תכניות יכולות בקלות לנתח תכניות אחרות טיפוסים דינאמיים וריאציות רבות (Common Lisp, Scheme )

Prolog, 1972, Colmerauer and Kowalski שפת תכנות "לוגית" היוותה בסיס למחקר נרחב פרוייקט "הדור החמישי" ביפן מסדי נתונים רלציוניים, SQL בשימוש מועט הובילה לשפות לוגיות אחרות – כגון Datalog

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

החלק ה"קשה" לסטודנטים בקורס ייצוג ביניים + טבלת סמלים קומפילר – מבנה סכמתי תוכנית מקור תוכנית מטרה החלק ה"קשה" לסטודנטים בקורס analysis ייצוג ביניים + טבלת סמלים החלק הקשה בעולם האמיתי code optimization ייצוג ביניים code generation

ייצוג ביניים הניתוח מייצר קוד בשפה נמוכה מאוד מכילה בד"כ רק השמה, אריתמטיקה (פעולה אחת בשורה!), קפיצה (goto) וקפיצה מותנית משמשת כבסיס לייצור קוד מכונה כל שורה מכילה פקודה אחת אין ביטויים מורכבים

טבלת הסמלים כוללת שורה עבור כל סמל בתוכנית מידע רלוונטי לכל סמל שמות משתנים, מחלקות, פונקציות, פרוצדורות, מתודות, וכו' – תלוי בשפת התכנות מידע רלוונטי לכל סמל טיפוס (עבור משתנים, פונקציות) ערך (עבור קבועים) פרמטרים וטיפוסיהם (עבור פונקציות, פרוצדורות, מתודות) וכו' קיים בעיקר בזמן הקומפילצייה קיים בזמן ריצה רק למטרות de-bugging, או בשפות עם מנגנוני Reflection (כגון Java, C#, Eiffel) יש חלק מהמידע גם בזמן ריצה "רגילה"

למשל... int a, b; a = 2; b = a*2 + 1; a = 2 temp1 = a*2 b = temp1 + 1

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

שימוש חוזר ברכיבים של מישהו אחר כיום, שפות רבות "חוסכות" את הצורך לכתוב optimizers טובים במיוחד לפלטפורמות שונות. פשוט מתרגמים את הקוד ל-C, ומניחים שלכל פלטפורמה יש קומפיילר C ראוי לשמו. "cross-platform assembly" גם תרגום לשפת C הוא תהליך קומפילציה... גם כאן יש מקום לאופטימיזציות.

machine independent optimization machine dependent optimization קומפילר – מבנה סכמתי תוכנית מקור תוכנית מטרה front end analysis back end machine independent optimization machine dependent optimization code generation

front end – שלב הניתוח תוכנית מקור scanner lexical analysis תוכנית מטרה scanner lexical analysis token stream parser syntax analysis syntax tree semantic analysis decorated syntax tree

אנליזה של ביטוי

Abstract Syntax Tree – AST

Decorated/Annotated AST

כפל משמעות איך נראה ה-AST של הביטוי: 9-5+2 ?

כפל משמעות + - ?? - 2 9 + 9 5 5 2

דקדוקים ומשמעויות המשמעות ה"נכונה" נבחרת בהתאם לדקדוק פעמים רבות ניתן לכתוב את אותם הכללים בעזרת דקדוקים חד-משמעיים או דו-משמעיים נחשו מה עדיף. לשפות מורכבות מאוד (קרי: מציאותיות) בדרך-כלל אין דקדוק חד-משמעי או שהוא מורכב להחריד. יש פתרונות אחרים לדו-משמעויות...

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

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

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