1 ניתוח לקסיקלי wilhelm, and maurer – chapter 7 aho, sethi, and ullman – chapter 3...

34
1 ייייי יייייייWilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2

Post on 21-Dec-2015

235 views

Category:

Documents


0 download

TRANSCRIPT

1

ניתוח לקסיקלי

Wilhelm, and Maurer – Chapter 7

Aho, Sethi, and Ullman – Chapter 3

Cooper and Torczon – Chapter 2

2

front-endשלב הניתוח – תזכורת

בקומפיילרים רבים השלבים במסומנים בקו מרוסק משולבים זה בזה•decorated syntax treeבקומפיילרים רבים ייצוג הביניים הוא •

תוכנית מקור

Back end

lexical analysis

screening

syntax analysis

semantic analysis

symbol string

token string

syntax tree

decorated syntax tree

symboltable

errormessages

3

פישוט הניתוח הלקסיקלי )והגדרת השפה(•מודולריות• שימוש חוזר•יעילות•

מדוע מנתח לקסיקלי?

4

+ lexical analyzerניתוח לקסיקלי -- screener

•lexeme נקרא לעיתים( לקסמה = סדרת אותיות = symbol)•token אסימון = עצם לשוני מוגדר; מכיל את סוג הלקסמה =

ותכונות שלה.•Pattern כלל המגדיר את אוסף הלקסמות עבור = token

מסוים.דוגמא:•

idcounter name=“counter”

5

תוכנית מקור

scanner

screener

parser

symbol

token

get next symbol

get next token

מנתח לקסיקלי – מבנה סכמתי )לוגי(

errormessagemanager

6

scannerתפקידי ה-

קריאת הקלט•(symbolsהפרדת הקלט ליחידות לקסיקליות )= •דוגמאות•

screener ל-symbolsהעברת ה- •macros ו- include filesטיפול ב- •ספירת מספר שורות• לא חוקייםsymbolsדיווח על •

integer, realמשתניםbooleanהערות

סימנים מיוחדים )למשל )<=

string

7

symbol classes

symbol classתוכנית המשתמש

IDfoo n_14 last

NUM73 00 517 082

REAL66.1. 5 10 .1e67 5.5e-10

IFif

COMMA,

NOTEQ=!

LPAREN(

RPAREN)

8

non-symbols

תוכנית המשתמש

comment */ignored/*

preprocessor directive#include <foo.h<

macro#define NUMS 5, 6

white space\t \n

9

– דוגמאותscannerתפקידי ה-

בשפת פסקל•const pi = 3.1416;

Fortranב-•do 5 I = 1.2

Fortranב-•do 5 I = 1 , 2

lookaheadכאן רואים את הצורך ב-

)אבל כיום לא עושים את זה כך...!( אינם נחשבים שברים, כי אחרת .10 ו- .Ada 1 ו- Pascalב-•

(scanner )זה מקשה על ה -10..1לא ברור מהו

10

scanner generatorsymbol specification

Input program

scanner

token stream

scanning table

: מפורמליזם לתוכנהscannerה-

יתרונות•המפרט – קצר יחסית–אפשר לוודא שהמפרט תקין )לא אוטומטית!(–התוכנה קלה לתחזוקה–

שימושים נוספים בקומפילציה ובשטחים generationלשיטת ה- •נוספים

scanner

scanning table

driver

11

: פורמליזםscannerה-

- ביטויים רגולריים tokenתאור ה- • – אוטומט סופיscannerמבנה ה- •

הוא שלד האוטומטdriverה-– היא טבלת המצביםscanning tableה- –

12

רקע תיאורטי – מושגי יסוד

• אלפבית – : X: {1,…,n} מעל nמילה באורך •

X = X1 X2 . . . Xn

מילה ריקה: ••0אוסף המילים באורך אפס – n אוסף המילים באורך – n הסגור של( אוסף כל המילים –* Kleene) + או יותר1 – אוסף המילים באורך •x.y מילה המהווה שרשור של – x -ו y בד"כ משמיטים את(

(x yאופרטור השרשור וכותבים •suffix, prefix, subword

13

רקע תיאורטי – שפות מעל

* שפה – תת קבוצה של •

שפותL, L1, L2יהיו •

–L1 L2 איחוד שפות –

–L1 L2 = {x1 x2 | x1 L1, x2 L2 }שרשור שפות –

–L המשלים של – L -המילים ב(* -שאינן ב L)–Ln שרשור של – L לעצמו nפעמים –L הסגור של – *L שרשור – L לעצמו מספר כלשהו של פעמים

14

ביטויים רגולריים, שפות רגולריות

הוא ביטוי רגולרי מעל המתאר את השפה הריקה הוא ביטוי רגולרי מעל } המתאר את השפה { }a הוא ביטוי רגולרי המתאר את השפה { a לכל • הם ביטויים רגולריים המתארים את השפות qו- pאם •

, אזי:Q ו- Pהרגולריות – p | q הוא ביטוי רגולרי המתאר את השפה הרגולריתP U Q– (p q הוא ביטוי רגולרי המתאר את השפה ) P Q– (p*) הוא ביטוי רגולרי המתאר אתP*

הערה: על מנת לפשט את הסימונים, * הוא בעל הקדימות •הגבוהה ביותר, אח"כ שרשור, אח"כ סימן האלטרנטיבה

האותיות באדום הן מטה-אותיות•

15

באמצאות ביטויים רגולרייםsymbolsתיאור

דוגמא: מספר שלם או שבור•

) 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 (

) 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 (*

) | . ) 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 (

) 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 (*

) | E ) 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 (

) 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 ( ( (שיטת תיאור זאת – קשה לשימוש•

16

בעזרת מצייני קבוצות symbolsתיאור ותחומים

נעשה שימוש בשמות של קבוצות וסימנים•

דוגמא:letter = a-z A-Zdigit = 0-9id = letter ) letter | digit ( * number = digit digit * ) | . digit digit * ) | E digit digit ( (

17

בעזרת מצייני קבוצות – מבנה כלליsymbolsתיאור

= שונים זה מזה;A1, A2 ,.., Anנניח ש- •

•Ri הוא ביטוי מעלAi-1} U {A1,…,

אזי –

A1 = R1

A2 = R2

.

.

An = Rn

הם מצייני קבוצות

דוגמאות•integer = digit )digit (*

real = integer . integer )E digit digit | (

18

זיהוי שפות רגולריות – על ידי אוטומט סופי

= ) , Q , , q0 , F ( Mאוטומט – •

א"ב – • Qקבוצה סופית של מצבים –

•q0 Qמצב התחלתי –

•F Qקבוצת המצבים הסופיים – • Q ) \ { } ( Qיחס העברה

state

control

קלט

19

מתיאור בעזרת מצייני קבוצות לאוטומט לא דטרמיניסטי

: הצב וקבל סדרת ביטויים רגולריים טהורים1שלב •

המזהה את Ai לכל Mi: בנה אוטומט לא דטרמיניסטי 2שלב •Riהביטוי הרגולרי

אוטומט זה מזהה את כל M: בנה אוטומט משולב 3שלב •הביטויים הרגולריים

20

אוטומט דטרמיניסטי

= ) הוא אוטומט דטרמיניסטי , Q , , q0 , F ( Mאוטומט – •סופי אם

Q → Q : היא פונקציה חלקית כלומר אין מעברי – יש לכל היותר מעבר למצב יחידa ואות qלכל מצב –

, האוטומט יגיע למצב מסוים יחיד, אם בכללwלכל מילה •אנחנו נתעניין רק באוטומטים סופיים דטרמיניסטיים•משפט: לכל אוטומט לא דטרמיניסטי קיים אוטומט •

דטרמיניסטי שקולמשפט: לכל אוטומט סופי דטרמיניסטי קיים אוטומט סופי •

דטרמיניסטי שקול יחיד בעל מספר מצבים מינימאלי

21

22

23

24

25

26

27

28

29

30

31

Lookahead

הבעיה: לעיתים צריך לסרוק מספר אותיות קדימה על מנת • עליו אנחנו מתכונניםsymbolלהחליט מהו ה-

הפתרון: אות מיוחדת )למשל - /( המציינת את מקום תחילת • בייצוג האוטומט, המוחלפת ב- lookaheadה-

יכולה להיות גם FORTRAN ב- IFדוגמא: המילה השמורה •שם של משתנה

אותיות2 של lookahead מספיק ADAהערה: בפסקל ו-•

0 1 2 3 4 5 6I F )(

startletter

any

32

screenerה-

)scanner )LEXלעיתים – משולב כתוכנה "פתוחה" בתוך ה- • ואיסוף tokens – זיהוי ה- screenerתפקידו העיקרי של ה-•

עצמםlexemesאינפורמציה על ה-

33

: תפקידים נוספיםscreenerה-

-- מילות מפתח שאינן שמורות, יחסית ל- keywordsטיפול ב- •reserved words

compiler directivesטיפול במקרים פשוטים של •הדפסת הפלט•

שילוב הודעות שגיאה–מקרו––pretty printing

)מעשית יש לעקוב אחרי מספרי השורות והעמודות בהם מופיעים (tokensה-

טיפול בשגיאות•bufferהשמטת כל האותיות שהצטברו ב- –השמטת האות הנוכחית–

error tokensהקושי – התפשטות השגיאות. מנגנון אפשרי –

34

סיכום

לרוב שפות התכנות ניתן לבנות מנתח לקסיקלי בקלות•יוצאי דופן:•

–Fortran–PL/1

ישנם כלים שבונים מנתח לקסיקלי מתוך הגדרה בעזרת •ביטויים רגולריים. יש להם שימושים גם מחוץ לתחום

הקומפיילרים.Lexבתרגולים ובתרגיל הבית תכירו כלי אחד כזה: –