ניתוח לקסיקלי wilhelm, and maurer – chapter 7 aho, sethi, and ullman – chapter 3...
Post on 22-Dec-2015
216 views
TRANSCRIPT
ניתוח לקסיקלי
Wilhelm, and Maurer – Chapter 7
Aho, Sethi, and Ullman – Chapter 3
Cooper and Torczon – Chapter 2
front endשלב הניתוח - תזכורת –
תוכנית מקור
Back end
lexical analysis
syntax analysis
semantic analysis
token stream
syntax tree
decorated syntax tree
scanner
parser
פישוט הניתוח הלקסיקלי )והגדרת השפה(•מודולריות• שימוש חוזר•יעילות•
מדוע מנתח לקסיקלי?
lexical analyzer + screenerניתוח לקסיקלי --
•lexeme נקרא לעיתים( לקסמה = סדרת אותיות = symbol)•token אסימון = עצם לשוני מוגדר; מכיל את סוג הלקסמה =
ותכונות שלה.דוגמא:•
idcounter name=“counter”
תוכנית מקור
scanner
screener
parser
symbol
token
get next symbol
get next token
מנתח לקסיקלי – מבנה סכמתי )לוגי(
errormessagemanager
scannerתפקידי ה-
קריאת הקלט•(symbolsהפרדת הקלט ליחידות לקסיקליות )= •דוגמאות•
screener ל-symbolsהעברת ה- •macros ו- include filesטיפול ב- •ספירת מספר שורות• לא חוקייםsymbolsדיווח על •
integer, realמשתניםbooleanהערות
סימנים מיוחדים )למשל )<=
string
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)
non-symbols
תוכנית המשתמש
comment */ignored/*
preprocessor directive#include <foo.h<
macro#define NUMS 5, 6
white space\t \n
– דוגמאות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 לא ברור מהו
scanner generatorsymbol specification
Input program
scanner
token stream
scanning table
: מפורמליזם לתוכנהscannerה-
יתרונות•המפרט – קצר יחסית–אפשר לוודא שהמפרט תקין )לא אוטומטית!(–התוכנה קלה לתחזוקה–
שימושים נוספים בקומפילציה ובשטחים generationלשיטת ה- •נוספים
scanner
scanning table
driver
: פורמליזם scannerה-
- ביטויים רגולריים tokenתאור ה- • – אוטומט סופיscannerמבנה ה- •
הוא שלד האוטומט driverה-– היא טבלת המצביםscanning tableה- –
רקע תיאורטי – מושגי יסוד
• Sאלפבית – S : S X: {1,…,n} מעל nמילה באורך •
X = X1 X2 . . . Xn
מילה ריקה: ••0 אוסף המילים באורך אפס – n אוסף המילים באורך – n* הסגור של( אוסף כל המילים –Kleene) + או יותר1 – אוסף המילים באורך •x.y מילה המהווה שרשור של – x -ו y בד"כ משמיטים את(
(x yאופרטור השרשור וכותבים •suffix, prefix, subword
Sרקע תיאורטי – שפות מעל
* שפה – תת קבוצה של•
שפות L, L1, L2יהיו •
–L1 L2 איחוד שפות –
–L1 L2 = {x1 x2 | x1 L1, x2 L2 }שרשור שפות –
–L המשלים של – L -המילים ב(* -שאינן ב L)–Ln שרשור של – L לעצמו nפעמים –L* הסגור של – L שרשור – L לעצמו מספר כלשהו של פעמים
ביטויים רגולריים, שפות רגולריות
הוא ביטוי רגולרי מעל המתאר את השפה הריקה הוא ביטוי רגולרי מעל המתאר את השפה }{ }a{ הוא ביטוי רגולרי המתאר את השפה a לכל • הם ביטויים רגולריים המתארים את השפות qו- p אם •
, אזי:Q ו- Pהרגולריות – p | qהוא ביטוי רגולרי המתאר את השפה הרגולרית P ∪ Q–( p q ) הוא ביטוי רגולרי המתאר את השפה P Q– (p *) הוא ביטוי רגולרי המתאר אתP*
הוא בעל הקדימות *הערה: על מנת לפשט את הסימונים, •הגבוהה ביותר, אח"כ שרשור, אח"כ סימן האלטרנטיבה
האותיות באדום הן מטה-אותיות•
בעזרת מצייני קבוצות ותחומיםsymbolsתיאור
נעשה שימוש בשמות של קבוצות וסימנים•
דוגמא:letter = a-z A-Zdigit = 0-9id = letter ) letter | digit ( * number = digit digit * ) | . digit digit * ) | E digit digit ( (
זיהוי שפות רגולריות – על ידי אוטומט סופי
= ) , Q , , q0 , F ( Mאוטומט – •
א"ב – • Qקבוצה סופית של מצבים –
•q0 Qמצב התחלתי –
•F Qקבוצת המצבים הסופיים – • Q ) \ { } ( Qיחס העברה
state
control
קלט
מתיאור בעזרת מצייני קבוצות לאוטומט לא דטרמיניסטי
: הצב וקבל סדרת ביטויים רגולריים טהורים1שלב •
המזהה את Ai לכל Mi: בנה אוטומט לא דטרמיניסטי 2שלב •Riהביטוי הרגולרי
אוטומט זה מזהה את כל M: בנה אוטומט משולב 3שלב •הביטויים הרגולריים
אוטומט דטרמיניסטי
הוא אוטומט דטרמיניסטי = ) , Q , , q0 , F ( Mאוטומט – •סופי אם
Q → Q : היא פונקציה חלקית כלומר אין מעברי – יש לכל היותר מעבר למצב יחידa ואות qלכל מצב –
, האוטומט יגיע למצב מסוים יחיד, אם בכללwלכל מילה •אנחנו נתעניין רק באוטומטים סופיים דטרמיניסטיים•משפט: לכל אוטומט לא דטרמיניסטי קיים אוטומט •
דטרמיניסטי שקולמשפט: לכל אוטומט סופי דטרמיניסטי קיים אוטומט סופי •
דטרמיניסטי שקול יחיד בעל מספר מצבים מינימאלי
Lookahead
הבעיה: לעיתים צריך לסרוק מספר אותיות קדימה על מנת • עליו אנחנו מתכונניםsymbolלהחליט מהו ה-
/( המציינת את מקום תחילת הפתרון: אות מיוחדת )למשל -• בייצוג האוטומט, המוחלפת ב- lookaheadה-
יכולה להיות גם FORTRAN ב- IFדוגמא: המילה השמורה •שם של משתנה
אותיות2 של lookahead מספיק ADAבפסקל ו- הערה:•
0 1 2 3 4 5 6I F )(
startletter
any
screenerה-
)scanner )LEXלעיתים – משולב כתוכנה "פתוחה" בתוך ה- • ואיסוף tokens – זיהוי ה- screenerתפקידו העיקרי של ה-•
עצמםlexemesאינפורמציה על ה-
: תפקידים נוספיםscreenerה-
-- מילות מפתח שאינן שמורות, יחסית ל- keywordsטיפול ב- •reserved words
compiler directivesטיפול במקרים פשוטים של •הדפסת הפלט•
שילוב הודעות שגיאה–מקרו––pretty printing
)מעשית יש לעקוב אחרי מספרי השורות והעמודות בהם מופיעים ה- tokens)
סיכום
• For most programming languages lexical analyzers can be easily constructed
• Exceptions– Fortran– PL/1
• Lexical analyzer generator tools exist; they are used beyond compilers