วันพฤหัสบดีที่ 29 พฤษภาคม พ.ศ. 2557

ทบทวน Compiler ด้วยกันนะ part 18-1


- ต่อจาก part ที่ 18 ทดสอบการทำงานของ Parser เพื่อแจ้ง error ในส่วนการตรวจสอบ syntax ด้วย grammar ที่ผลิตการประกาศตัวแปร

ทบทวน Compiler ด้วยกันนะ part 18


- grammar ส่วนตรวจสอบไวยากรณ์

***หมายเหตุ
- เขียน found ผิดเป็น fount ขออภัยด้วยครับ

ทบทวน Compiler ด้วยกันนะ part 17


- อ่านไฟล์ด้วยคลาส StreamReader สำหรับภาษา C# และคลาส FileReader สำหรับภาษา Java พร้อมเตรียมพื้นที่ลงโค้ด

ทบทวน Compiler ด้วยกันนะ part 16


- เตรียม grammar สำหรับเขียน compiler ทั้งในส่วน การประกาศตัวแปร การเรียกฟังก์ชัน การใช้ for และนิพจน์คำนวณอย่างมีลำดับ

ทบทวน Compiler ด้วยกันนะ part 15-2


- เสนอแนะวิธีการวาง LBL กับ JUMP สำหรับ grammar ของ loop for (โจทย์ในชั้นเรียน) เทียบกับคำสั่งภาษาเครื่องสมมติ (Code Generator)

ทบทวน Compiler ด้วยกันนะ part 15-1


- การวาง LBL ร่วมกับ JUMP เพื่อสร้าง Intermediate code ของ if, if-else และ nested if

ทบทวน Compiler ด้วยกันนะ part 15


- การเขียน LBL ร่วมกับคำสั่ง Jump
- สำหรับตัวอย่างลูป while

ทบทวน Compiler ด้วยกันนะ part 14


- จากโปรแกรมที่สามารถกระทำการบวกหรือการคูณอย่างมีลำดับชั้นความสำคัญ เราเปลี่ยนการบวกหรือคูณที่นำมาซึ่งผลลัพธ์นั้นเป็น Intermediate code ในรูปแบบ
[ operator, operand1, operand2, result ]

ทบทวน Compiler ด้วยกันนะ part 13


- เขียน grammar แสดงลำดับความสำคัญของเครื่องหมายคูณซึ่งมากกว่าเครื่องหมายบวก
- เขียนโปรแกรม Parser จาก grammar ข้างต้น เพื่อหาผลลัพธ์ของ 1 + 2 * 3 ย่อมมีค่าเท่ากับ 7 โดยใช้ภาษา C#

ทบทวน Compiler ด้วยกันนะ part 12


- เขียนโปรแกรมหาผลรวมของเลขจำนวนเต็มบวกที่กำหนดให้โดยกระบวนการ Parser
- read() ล่วงหน้าทุกครั้งก่อนจะเริ่มต้นทำงานเมธอดแรกของ grammar
- เมื่อพบ terminal ให้ read() เสมอ เพื่อที่ Token ที่เรากำลังพิจารณาอยู่นั้นเปลี่ยนเป็นคำถัดไป

ทบทวน Compiler ด้วยกันนะ part 11


- อธิบาย ATG (Attribute Grammar) ของการบวกตัวเลขจำนวนเต็มบวกกี่จำนวนก็ได้ เมื่อ
- syn แทนการ Synthesized
- in แทนการ Inherited
- อ่านเพิ่มเติม การเขียน Semantic (พร้อม Source Code)

ทบทวน Compiler ด้วยกันนะ part 10


- แก้ความกำกวมของไวยากรณ์ อันได้แก่ Left Recursion และ Left Factoring

ทบทวน Compiler ด้วยกันนะ part 9


- รู้จักกับ grammar และการสร้าง grammar จาก source code
- เมื่อกำหนดให้อักษรพิมพ์ใหญ่แทน non-terminal ส่วนอักษรพิมพ์เล็กแทน terminal โดยที่ non-terminal สามารถแยก (สร้าง) ตัวเองเป็น non-terminal และ terminal อีกเท่าใดก็ได้ ต่างจาก terminal ที่ไม่สามารถแยก (สร้าง) ตัวเองได้อีก
- ใช้ non-terminal และ terminal ข้างต้นออกแบบ grammar ของการประกาศตัวแปรอย่างทั่วไป

ทบทวน Compiler ด้วยกันนะ part 8-2


- ต่อเนื่องจาก MiniCompiler (CT414) with C# and Java part 08-01 ครับ

ทบทวน Compiler ด้วยกันนะ part 8-1


- สร้างคลาส Token เก็บชื่อคำและประเภทของคำ
- สร้างคลาส TokenStream เก็บคลาส Token อีกทีหนึ่ง
- ไม่สร้าง SymbolTable เพราะชื่อคำและประเภทของคำใช้ชนิดเป็นสตริง

ทบทวน Compiler ด้วยกันนะ part 8


- แยกคำออกเป็นประเภทต่างๆต่อเนื่องจาก part ที่แล้ว
- เปรียบเทียบสตริงจะใช้เมธอด equals หรือ Equals เพราะสตริงถูกจัดเก็บในหน่วยความจำในรูปแบบเฉพาะที่ต่างจากชนิดข้อมูลอื่นๆ
- เปรียบเทียบอักษรหรือตัวเลข โดยเครื่องหมาย ==

วันพุธที่ 28 พฤษภาคม พ.ศ. 2557

ทบทวน Compiler ด้วยกันนะ part 7


- เริ่มต้นการวางคลาสที่ใช้ในการตัดคำ ใช้วิเคราะห์แกรมม่า ใช้สังเคราะห์โค้ดภาษาเครื่อง ที่ตั้งชื่อว่า MyLexical, MyParser, MyCodeGen ตามลำดับ
- ส่งสตริงโค้ดต้นฉบับ (Source Code) ให้กับออบเจ็กต์ MyLexical เพื่อเตรียมนำไปตัดคำ
- สั่งให้ออบเจ็กต์ MyLexical เรียกเมธอด Do เพื่อตัดคำ โดยเริ่มจากอ่านตัวอักษร (Character) ทีละหนึ่งตัวอักษรแล้วรวมกันเป็นคำ (Word) ก่อนจะแสดงผลออกมาว่าถูกแยกเป็น Keyword Integer Operator หรือ Separator

ทบทวน Compiler ด้วยกันนะ part 6


- แนะนำการใช้เมธอด a.get(int index) สำหรับภาษา Java และ a[int index] สำหรับภาษา C# เมื่อต้องการข้อมูลจากโครงสร้าง ArrayList ที่ชื่อ a
- ความแตกต่างระหว่าง Generic Type กับ Object Type เมื่อ Generic Type ลดการแปลงข้อมูลได้มากกว่าแบบ Object Type

ทบทวน Compiler ด้วยกันนะ part 5


- แนะนำโครงสร้างข้อมูล ArrayList ขั้นต้น สำหรับภาษา Java และ C#
***หมายเหตุ
- ขออภัยที่ part นี้มีเสียงรบกวนมากไปหน่อย
- และได้ปรับเสียงพูดให้ดังขึ้นแล้วครับ

ทบทวน Compiler ด้วยกันนะ part 4


- ดึงข้อมูลจากเมธอทโดยใช้คีย์ ref สำหรับ C#
- หรือดึงข้อมูลจากเมธอทโดยใช้การสร้างออบเจ็กต์ใหม่แล้ว Pass by Value แทนการ Pass by Reference ซึ่งใช้ได้ทั้ง Java และ C#

ทบทวน Compiler ด้วยกันนะ part 3


- อธิบายการใช้งานเมธอด toString หรือ ToString เพื่อแสดงรายละเอียดของคำ
- เขียนโปรแกรมเพิ่มและแสดงคำอย่างง่ายๆ

วันศุกร์ที่ 16 พฤษภาคม พ.ศ. 2557

ชวนคุยภาษาจาวา part 1 : พี่นรินทร


       เรามาเรียนรู้ภาษาจาวาร่วมกัน อย่างง่ายๆและค่อยเป็นค่อยไปกับพี่นรินทร ผู้เป็นอาจารย์สอนภาษาจาวาให้ผม เริ่มตั้งแต่พื้นฐาน การใช้เครื่องมือ (tools) ในการเขียนภาษาจาวาอย่างมีลำดับขั้นตอนที่ดีครับ


คนนี้แหละครับ พี่นรินทร์ (ภาพนี้เราไปกินหมูกะทะกัน)