การแปลภาษาและการประมวลผล (Language translation and processing) 1

Download Report

Transcript การแปลภาษาและการประมวลผล (Language translation and processing) 1

1
การแปลภาษาและการ
ประมวลผล
(LANGUAGE TRANSLATION
AND PROCESSING)
อินเตอร์พรีตเตอร์
2


ทำหน ้ำทีแ
่ ปลคำสงั่ ในภำษำระดับสูงให ้เป็ น
ภำษำเครือ
่ งพร ้อมทัง้ สงั่ กำรประมวลผลคำสงั่
รับอินพุตเป็ นโปรแกรมต ้นทำง (source program)
้
และรับข ้อมูลทีอ
่ ำจต ้องใชประกอบกำรท
ำงำนของ
โปรแกรมต ้นทำง
3
ขัน
้ ตอนกำรทำงำนของอินเตอร์พรีต
เตอร์


เริม
่ ต ้นจำกกำรอ่ำนคำสงั่ ในโปรแกรมต ้นทำงทีละ
คำสงั่ แปลควำมหมำยของคำสงั่ และสงั่ กำรเครือ
่ ง
ให ้ประมวลผลตำมคำสงั่ นัน
้ จำกนัน
้ ก็จะอ่ำนคำสงั่
ต่อไป, แปล และสงั่ กำรประมวลผลวนเวียนเป็ นวัฏ
่ นีไ
จักรเชน
้ ปจนจบคำสงั่ ในโปรแกรม
้
่ ยกว่า
สอดคล ้องกับขันตอนการท
างานภายใน CPU ทีเรี
……………………
่
……………….ซึงประกอบด
้วย
……………………………………………….
…………………………………………………………………………
………..
4
5
กำรแสดงข ้อผิดพลำดของ
อินเตอร์พรีตเตอร์

่ เขียน
กรณีมข
ี ้อผิดพลำดในโปรแกรมต ้นทำง เชน
คำสงั่ ผิดไวยำกรณ์ อินเตอร์พรีตเตอร์จะแสดง
ข ้อควำมเตือนเหตุผด
ิ พลำด (error message) และ
้
หยุดกระบวนกำรแปล จนกว่ำผู ้ใชจะแก
้ไข
ข ้อผิดพลำดก่อน และสงั่ ให ้อินเตอร์พรีตเตอร์เริม
่ ต ้น
ทำงำนใหม่
คอมไพเลอร์
6

โปรแกรมทีท
่ ำหน ้ำทีแ
่ ปลคำสงั่ ในภำษำระดับสูง และ
สงั่ กำรประมวลผลเหมือนกับอินเตอร์พรีตเตอร์ แต่ม ี
ั ซอนกว่
้
ข ้อแตกต่ำงทีก
่ ำรทำงำนซบ
ำ และแยกกำร
แปลออกจำกกำรประมวลผล
ขัน
้ ตอนกำรแปลของคอมไพเลอร์
7




่ ้นจากร ับอินพุตเป็ นโปรแกรมต ้นทาง แล ้ว
การทางานเริมต
่ ่ในภาษาระดับต่า (แต่
แปลเป็ น object program ซึงอยู
ยังไม่สามารถประมวลผลได ้เพราะยังไม่ได ้แปลงเป็ น
่
ภาษาเครือง)
้
่ อยู
่ ่
ต่อไปจะนา object program นี ไปอ
้างอิงกับคาสังที
่
้ั
ในไลบรารี เช่น คาสัง่ write เมือแปลคร
งแรกจะถู
ก
่
่ นคาสังอ
่ ้างอิงไปยังไฟล ์ใน
เปลียนเป็
น write_cmd ซึงเป็
ไลบรารี pascal.lib
่ อยู
่ ่ในไลบรารี มาแทนทีค
่ าสัง่ write โดย
แล ้วดึงชุดคาสังที
้
้
เกิดขึนในขั
นตอนการลิ
งค ์ (linker)
่
หลังจากการเชือมโยงจึ
งจะได ้โปรแกรมในรูปแบบ
่ สมบู
่
ภาษาเครืองที
รณ์ เรียกว่า โปรแกรมพร ้อมกระทาการ
8
ขัน
้ ตอนกำรสงั่ ประมวลผลของ
คอมไพเลอร์



เมือ
่ จบขัน
้ ตอนกำรแปล เรำจะได ้โปรแกรมในรูปแบบ
ภำษำเครือ
่ งทีส
่ ำมำรถบันทึกเก็บไว ้ได ้
เมือ
่ ต ้องกำรสงั่ ประมวลผล เรำจะเรียกโปรแกรม
พร ้อมกระทำกำร โดยป้ อนข ้อมูลเข ้ำกับโปรแกรมได ้
ทันที
ข ้อดี คือ
……………………………………………..โดยไม่
ี เวลำแปลซำ้ ซงึ่ ต่ำงจำกอินเตอร์พรีตเตอร์ท ี่
ต ้องเสย
ไม่สำมำรถบันทึกโปรแกรมพร ้อมกระทำกำรไว ้ได ้ จึง
ต ้องแปลคำสงั่ ใหม่ทก
ุ ครัง้ ทีส
่ งั่ ประมวลผลโปรแกรม
ต ้นทำง
9
กำรแปลแบบแยกสว่ นของคอมไพเลอร์
(separate compilation)

โปรแกรมต ้นทางสามารถแยกเป็ นโมดูลย่อยๆ ไว ้ในแต่ละ
ไฟล ์ แล ้วแปลแยกแต่ละไฟล ์ ได ้เป็ นโปรแกรมจุดหมาย
่
่
(object program) จากนั้นตัวเชือมโยงจะท
าหน้าทีรวม
่
่ สร ้าง
่
object file และชุดคาสังภาษาเครื
องจากไลบรารี
เป็ นโปรแกรมพร ้อมกระทาการ หรือ binary file
10
กำรประมวลผลแมโคร (macro
processing)

ื่ เพือ
macro คือ กำรตัง้ ชอ
่ แทนค่ำ หรือคำสงั่ เพือ
่
ื่ ควำมหมำยดีขน
่
โปรแกรมอ่ำนได ้ง่ำย สอ
ึ้ เชน
สภำพแวดล ้อมกำรทำโปรแกรม
(programming environments)
11


คือ โปรแกรมช่วยงานต่างๆ (tools) ในการพัฒนา
่
โปรแกรมคอมพิวเตอร ์ ซึงประกอบไปด
้วย editor,
compiler, linker, debugger, macro processor
้ กจะถูกรวบรวมไว ้
ในวินโดวส ์ โปรแกรมช่วยงานเหล่านี มั
ด ้วยกัน เรียกว่า
……………………………………………………………….เช่น
................................................................................................
..................
ขัน
้ ตอนกำรทำงำนของคอมไพเลอร์
12
1.
2.
3.
4.
5.
6.
lexical analysis or scanning
Syntactic analysis or parsing
Semantic analysis
Intermediate code generation
code optimization
Object code generation
ั ท์
1. กำรวิเครำะห์คำศพ
(lexical analysis or scanning)
13



ทำหน ้ำทีอ
่ ำ่ น หรือสแกนคำสงั่ ทัง้ หมดในโปรแกรม
ต ้นทำง เพือ
่ แยกคำ และเครือ
่ งหมำยต่ำงๆ ออกจำก
กัน
โดยคำ หรือ เครือ
่ งหมำย แต่ละตัว จะเรียกว่ำ
……………………
รูปแบบกำรทำงำนจำลองได ้ด ้วยเครือ
่ งจักรสมมุตท
ิ ี่
เรียกว่ำ เครือ
่ งจักรสถำนะจำกัด (finite state
automata)
Lexeme and Token
14


A lexeme is the lowest level syntactic unit of a
language (e.g., *, sum, begin)
A token is a category of lexemes (e.g., identifier)
Copyright © 2007 Addison-Wesley. All rights reserved.
Lexeme and Token
15
int index = 2 * count + 17;
Lexemes
index
=
2
*
……….
……….
……….
……….
……….
Tokens
identifier
equal_sign
int_literal
mul_op
…………………..
…………………..
…………………..
…………………..
…………………..
Copyright © 2007 Addison-Wesley. All rights reserved.
16
ตัวอย่ำงเครือ
่ งจักรสถำนะจำกัด
17
ั ท์
1. กำรวิเครำะห์คำศพ
(lexical analysis or scanning)
18



ในการแยกคาออกเป็ นโทเค็น scanner จะวิเคราะห ์ด ้วย
ว่าคานั้นๆ เป็ นคาประเภทใด โดยดูจากไวยากรณ์
เช่น รูปแบบ BNF ต่อไปนี ้
Identifier -> Letter | Identifier Letter | Identifier
Digit
Letter -> a | b| ... | z | A | B | ... | Z
Digit -> 0 | 1 | ... | 9
บาง lexical analyzer เช่น
……………………………………………สามารถตรวจสอบจาก
regular expression ได ้ เช่น
……………………………………………………………
LEX
19

โปรแกรม lexical analyzer นอกจากจะสร ้างสายของ
token แล ้ว ยังสร ้างตารางสัญลักษณ์ (symbol table)
่ นทึกชือตั
่ วแปร และชือฟั
่ งก ์ช ันต่างๆ พร ้อมทังชนิ
้
เพือบั
ด
่
ของชือเหล่
านั้น (เช่น ตัวแปรปกติ ตัวแปรอาร ์เรย ์ ฟังก ์ชัน
พารามิเตอร ์ ชนิ ดข ้อมูลต่างๆ) ทีจ่ าเป็ นต่อการตรวจสอบ
ไวยากรณ์ของโปรแกรมต ้นทาง
20
2. กำรวิเครำะห์ไวยำกรณ์
(Syntactic analysis or parsing)


ทำหน ้ำทีต
่ รวจสอบว่ำ สำยของโทเค็นนัน
้ ประกอบ
ขึน
้ เป็ นนิพจน์ทถ
ี่ ก
ู ต ้อง, ข ้อควำมสงั่ ทีถ
่ ก
ู ต ้อง, เป็ น
รูปแบบโปรแกรมทีถ
่ ก
ู ต ้องตำมข ้อกำหนดของภำษำ
หรือไม่
่ รูปแบบ BNF
โดยดูจำกไวยำกรณ์ของภำษำ เชน
grammar

กำรตรวจสอบควำมถูกต ้องของกำรวิเครำะห์
ไวยำกรณ์ประโยคข ้อควำมสงั่
จะ…………………………..ถ ้ำสำมำรถสร ้ำงพำสทรี
ได ้สมบูรณ์ครบถ ้วน แสดงว่ำโปรแกรมต ้นทำงเขียน
ได ้ถูกต ้องตำมไวยำกรณ์ของภำษำ
21
22
2. กำรวิเครำะห์ไวยำกรณ์
(Syntactic analysis or parsing)

้ ้วยการใช ้
โปรแกรมพาสเซอร ์ สามารถถูกสร ้างขึนด
่ ชอว่
โปรแกรมช่วย ทีมี
ื่ า
่
…………………………………………………………..ซึงจะสร
้าง
พาสเซอร ์ในรูปแบบของโปรแกรมภาษา C ใน unix และ
Bison (for windows)
3. ขัน
้ ตอนกำรวิเครำะห์ควำมหมำย
(Semantic analysis)
23


เป็ นกำรตรวจสอบควำมถูกต ้องของโปรแกรมต ้นทำง
ั ซอนขึ
้
กำรตรวจสอบนีก
้ ระทำในระดับทีซ
่ บ
น
้ กว่ำกำร
ตรวจสอบไวยำกรณ์ของข ้อควำมสงั่
่ ตรวจสอบว่ำตัวแปรทีใ่ ชในข
้
เชน
้อควำมสงั่ มีกำร
้
ประกำศไว ้ก่อนใชงำน,
ตรวจสอบชนิดข ้อมูลว่ำ
สำมำรถทำงำนด ้วยกันได ้, ตรวจสอบชนิดของ
พำรำมิเตอร์ และอำร์กวิ เมนต์ให ้ตรงกัน
4. กำรสร ้ำงรหัสระหว่ำงกลำง
(Intermediate code generation)
24



้
ขันตอน
1-3 เป็ นการตรวจสอบความถูกต ้องของ
โปรแกรมต ้นทาง
้
ขันตอน
4-6 จะเป็ นช่วงการแปลงไปสูโ่ ปรแกรม
่
ภาษาเครือง
้
่ 4 นี โปรแกรมต
้
ในขันตอนที
้นทางจะถูกแปลงไปเป็ นภาษา
่ นกึงกลางระหว่
่
่
ทีเป็
างภาษาระดับสูงกับภาษาเครือง
เรียกว่า …………………………….
่
………………………………….. เพือประโยชน์
ในการ
ปร ับปรุงคาสัง่ ทาให ้ประมวลผลได ้เร็วขึน้ เพราะการ
่ บภาษาเครืองท
่ าได ้ไม่สะดวก จึงต ้องสร ้าง
ปร ับปรุงคาสังกั
่ สู
่ งกว่าภาษาเครือง
่
รหัสคาสังที
4. กำรสร ้ำงรหัสระหว่ำงกลำง
(Intermediate code generation)
25



รหัสระหว่ำงกลำงทีน
่ ย
ิ มใช ้ จะเรียกว่ำ three- address
code
รูปแบบ
result = onething operator anotherthing
่
เชน
T=a+b
ิ ธิภำพคำสงั่
5. กำรเพิม
่ ประสท
(code optimization)
26




่
่ ้ดีขน
ทาหน้าที่ ปร ับปรุงลาดับการสังงานในค
าสังให
ึ ้ เช่น
่
จากคาสังในโปรแกรมต
้นทาง
x = a * y + z;
่
เมือแปลงเป็
นรหัสระหว่างกลาง ในลักษณะ three-address
code จะได ้
T1 = a*y
T2 = T1+z
x = T2
่ั
่ กสร ้างขึน้ ซึงสามารถยุ
่
โดย T1, T2 เป็ นตัวแปรชวคราวที
ถู
บ
่ ้ดังนี ้
รวมคาสังได
………………………..
………………………
6. กำรสร ้ำงรหัสเป้ ำหมำย
(Object code generation)
27


่ ้ร ับการปร ับปรุงแล ้ว จะถูกแปลงเป็ นรหัส
รหัสระหว่างกลางทีได
่
้ บเครืองคอมพิ
่
เป้ าหมาย (object code) ซึงจะขึ
นกั
วเตอร ์ที่
ใช ้
MUL A, Y // Multiply by Y
ADD A, Z // Add Z
STO X, A // Store in X
่ ได
่ ้จะยึดติดกับเครืองคอมพิ
่
รหัสคาสังที
วเตอร ์เฉพาะตระกูล
นั้นๆ ต่อมามีการพัฒนาคอมไพเลอร ์ให ้สามารถแปลงไปสูร่ หัส
่
เป้ าหมายของเครืองคอมพิ
วเตอร ์เสมือน
เครือ
่ งจักรเสมือน (Virtual machine)
28


่
หมายถึง การจาลองการทางานของเครืองคอมพิ
วเตอร ์
่ นฮาร ์ดแวร ์ ด ้วยซอฟต ์แวร ์
จริง ทีเป็
่ กรเสมือน มาช่วยเพิม
่
ผูพ
้ ฒ
ั นา Java ใช ้แนวคิดเครืองจั
่
ขีดความสามารถของภาษา Java ให ้ประมวลผลบนเครือง
่ ระบบแตกต่างกันได ้ (เรียกคุณสมบัตน
คอมพิวเตอร ์ทีมี
ิ ี ว่้ า
portability) โดยกลไกสาคัญคือ Java Virtual
Machine (JVM)
29

JVM ร ับรูปแบบไบต ์โค ้ด แล ้วแปลง(ด ้วยอินเตอร ์พรีต
่
เตอร ์) เป็ นภาษาระดับต่าบนเครืองแต่
ละระบบ เช่น
Windows, Unix, Macintosh OS…
30

่
คอมไพเลอร ์ทาหน้าทีแปลโปรแกรมจากรู
ปแบบภาษาจาวา
ให ้เป็ นรหัสระหว่างกลางเรียกว่า (bytecodes)
่ ้ช่วยในการคอมไพล ์โปรแกรมให ้เป็ นไบต ์
(คอมไพเลอร ์ทีใช
โค ้ด จะอยู่ใน………………………………………………
………………………………………………………………………..
31

นอกจากจะต ้องมี JVM แล ้ว ยังต ้องมีโปรแกรมต่างๆ ที่
ช่วยตรวจสอบความถูกต ้องของการเรียกใช ้คลาส
่ าหน้าทีเป็
่ นอินเตอร ์พรีตเตอร ์ และโปรแกรม
โปรแกรมทีท
ช่วยงานต่างๆ รวมเรียกว่า
…………………………………………..
Source
program
Source
program
Lexical analyzer
Lexical analyzer
Lexical units
Lexical units
Syntax analyzer
Syntax analyzer
Parse tree
Parse tree
Intermediate
Intermediate
Symbol code
generatorOptimization code generator
table
(and semantic analyzer)
Intermediate code
Intermediate code
Input data
Code generator
Interpreter
Machine language
Computer
Input data
Results
32
Compilation
Results
Pure Interpretation
32
Hybrid Implementation