1 ניתוח לקסיקלי wilhelm, and maurer – chapter 7 aho, sethi, and ullman – chapter 3...
Post on 21-Dec-2015
235 views
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
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לכל מילה •אנחנו נתעניין רק באוטומטים סופיים דטרמיניסטיים•משפט: לכל אוטומט לא דטרמיניסטי קיים אוטומט •
דטרמיניסטי שקולמשפט: לכל אוטומט סופי דטרמיניסטי קיים אוטומט סופי •
דטרמיניסטי שקול יחיד בעל מספר מצבים מינימאלי
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הקושי – התפשטות השגיאות. מנגנון אפשרי –