// โปรแกรมภาษาไทย - ตรงตามหลักไวยากรณ์ LALRPOP
// แต่ละบรรทัดสอดคล้องกับกฎ: Item = bind | form | choose | can | give
// 1. bind: ผูกชื่อกับนิพจน์ (ฟังก์ชันหลัก)
ผูก เริ่มต้น = ทำ {
// ประกาศฟังก์ชันนับคำโดยใช้ bind
ให้ นับคำ = ฟังก์ชัน (ข้อความ) {
ถ้า ข้อความ == "" {
คืนค่า 0;
} มิฉะนั้น {
ให้ คำ = แยกข้อความ(ข้อความ, " ");
คืนค่า ความยาว(คำ);
}
};
// ประกาศ pangram หลัก
ให้ pangram = "หนูหนึ่งพ่อน้องขี่ควายไปหาดใหญ่ เราเจอเจกับเสือตัวโต งู นก เกาะแกะ เตะถุงฟ้าตกโต๊ะ แล้วพ่อว่า \"รถดี\" เอาเงินซื้อไข่เจียวใส่ชามใบใหญ่มากิน";
// ใช้ฟังก์ชันนับคำ
ให้ จำนวน = นับคำ(pangram);
พิมพ์(จำนวน);
}
// 2. form: โครงสร้างข้อมูลสำหรับสัตว์ใน pangram
รูปแบบ สัตว์ {
ชื่อ: ข้อความ,
เสียง: ข้อความ,
มีในPangram: ตรรกะ
}
// 3. choose: ชนิดข้อมูลสำหรับสถานะของสัตว์
เลือก สถานะสัตว์ {
พบในประโยค,
ไม่พบในประโยค,
กำลังค้นหา(ข้อความ)
}
// 4. can: ลักษณะสำหรับสิ่งที่ส่งเสียงได้
สามารถ ส่งเสียงได้ {
ฟังก์ชัน ร้อง() -> ข้อความ;
ฟังก์ชัน ตรวจสอบ(text: ข้อความ) -> ตรรกะ;
}
// 5. give: การนำลักษณะไปใช้กับชนิดข้อมูล
ให้ สัตว์ {
ฟังก์ชัน ร้อง() -> ข้อความ {
ถ้า ตัวเอง.ชื่อ == "แกะ" {
คืนค่า "แบร้!";
} มิฉะนั้น ถ้า ตัวเอง.ชื่อ == "เสือ" {
คืนค่า "โฮก!";
} มิฉะนั้น {
คืนค่า "...";
}
}
ฟังก์ชัน ตรวจสอบ(text: ข้อความ) -> ตรรกะ {
ตัวเอง.มีในPangram
}
}