ทั่วไปแล้วกระบวนการนี้แบ่งออกเป็นสองขั้นตอน ได้แก่ Syntax และ Semantic ซึ่งอาจเขียนแยกหรือรวมกันไว้ในกระบวนการ Parser ก็ได้ แต่ตามความเห็นส่วนตัว ผมแนะนำให้เขียนแบบรวมกันครับ (น่าจะง่ายกว่าหรือเปล่า ?)
เตรียมคลาส Parser
(รูปหมายเลข 174)
- สร้าง Constructor รับอาร์กิวเมนต์ symbolTable กำหนดให้แอตทริบิวต์ symbolTable และอาร์กิวเมนต์ tokenStream กำหนดให้แอตทริบิวต์ tokenStream ซึ่งแยกจากกันด้วย this
(รูปหมายเลข 175)
- บรรทัดที่ 11 ประกาศแอตทริบิวต์ชื่อ end พร้อมกำหนดค่าออบเจ็กต์ให้ เราจะใช้ end แสดงถึงการอ่านกระทั่งสิ้นสุดสาย tokenStream
- บรรทัดที่ 12 ประกาศตัวแปรชื่อ countOfTokenStream เพื่อนับจำนวน Token ที่ถูกอ่านโดยเมธอด read
- บรรทัดที่ 14 สร้างเมธอดชื่อ read เพื่อทำหน้าที่อ่าน Token จากออบเจ็กต์ tokenStream ทีละ Token ทุกครั้งที่เรียกเมธอดนี้ การทำงานที่สำคัญคือ copy by value จากอินสแตนท์ token ให้กับ currentToken (กรอบสีส้ม) กระทั่งอ่านจนสิ้นสาย tokenStream (ค่า countOfTokenStream เท่ากับ tokenStream.size()) currentToken จะมีค่าเป็น end
(รูปหมายเลข 176)
- กลไกที่จะทำให้ชื่อรหัส (tokenNameIndex) เปลี่ยนเป็นชื่อ Token ได้ (tokenName) จะต้องส่งชื่อรหัสดังกล่าวให้กับบริการ getTokenName ของออบเจ็คก์ symbolTable
(รูปหมายเลข 177)
(รูปหมายเลข 178)
(รูปหมายเลข 179)
- บรรทัดที่ 57 สร้างเมธอดชื่อ isType เพื่อถามว่า currentToken ปัจจุบันมีชื่อเป็น int หรือ float คืนค่า true หรือไม่คืนค่า false
- บรรทัดที่ 64 สร้างเมธอดชื่อ isLiteral เพื่อถามว่า currentToken ปัจจุบันมีประเภทเป็น INTEGER_LITERALS หรือ FLOATING_POINT_LITERALS คืนค่า true หรือไม่คืนค่า false
(รูปหมายเลข 180)
.png)
- สร้างเมธอดชื่อ isMulDivSymbol เพื่อถามว่า currentToken ปัจจุบันใช่เครื่องหมาย "*" หรือ "/" หรือ "%" หรือไม่
บทความถัดไปคือการโค้ดขั้นตอนตรวจสอบ Syntax ภาษาโปรแกรมครับ
อ่านเนื้อหาที่เกี่ยวข้อง ก่อนหน้า หรือ ถัดไป
Today, I went to the beach with my kids.
ตอบลบI found a sea shell and gave it to my 4 year old daughter and said "You can hear the ocean if you put this to your ear." She put the shell to her ear and screamed.
There was a hermit crab inside and it pinched her ear.
She never wants to go back! LoL I know this is completely off
topic but I had to tell someone!
Also visit my webpage :: cellulite treatment