# Fortran บน Maguyva: กราฟโค้ดสำหรับโค้ดเบสงานวิทยาศาสตร์

Canonical source: https://maguyva.ai/th/languages/fortran

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

Maguyva รองรับ Fortran ด้วย AST สัญลักษณ์ และกราฟ เพื่อให้เอเจนต์ AI ติดตามซับรูทีน โมดูล และไทป์ที่ผู้ใช้นิยามได้ก่อนแก้ไขโค้ดเชิงตัวเลข

## ภาพรวมการรองรับ

- ระดับ: รองรับ AST และสัญลักษณ์
- การเขียนโปรแกรม
- นามสกุลไฟล์: .f, .f03, .f08, .f90, .f95, .for, +อีก 1
- การแยกวิเคราะห์ AST จริงสำหรับการค้นหาที่รู้จักไวยากรณ์และบริบทเชิงโครงสร้าง
- สัญลักษณ์ที่มีชื่อป้อนข้อมูลให้การค้นหาเชิงความหมายและการอ้างอิงไขว้ การนำทางกราฟจะใช้งานได้เมื่อเปิดใช้การสกัดความสัมพันธ์
- ภาษานี้ส่งสัญลักษณ์และความสัมพันธ์ไปยังการค้นหาแบบรู้บริบทกราฟ โดยประเภทเอดจ์ที่รองรับจะแตกต่างกันตามโครงสร้างเฉพาะของภาษา
- รองรับทั้งการแยกวิเคราะห์ AST และการสกัดสัญลักษณ์

## เหมาะที่สุดสำหรับ

- ทีมวิจัย วิศวกรรม และ HPC ที่ดูแลโปรแกรมแก้สมการ การจำลอง หรือไลบรารีเชิงตัวเลขภาษา Fortran ที่เก่ากว่าทีมปัจจุบัน
- รีโพซิทอรีที่ไฟล์ `.f` แบบฟิกซ์ฟอร์มอยู่ร่วมกับไฟล์ `.f90` แบบฟรีฟอร์มและโมดูลรุ่นหลัง ซึ่งมักมีแรปเปอร์ภาษา C หรือ Python อยู่ข้างกัน
- การรีวิวที่มีเอเจนต์ช่วย ซึ่งขั้นแรกคือการหาว่าซับรูทีนใดแตะโมดูลที่ใช้ร่วมกันก่อนเปลี่ยนตรรกะเชิงตัวเลข

## เวิร์กโฟลว์ของเอเจนต์

- หาซับรูทีนและฟังก์ชันที่เรียกรูทีนของโปรแกรมแก้สมการ ก่อนเปลี่ยนอาร์กิวเมนต์หรือหน่วยของมัน
- แสดงรายการโมดูลที่หน่วยโปรแกรมนำเข้าด้วย `use` แล้วข้ามไปยังนิยามของโมดูลเหล่านั้น
- หาว่าไทป์ที่ผู้ใช้นิยามถูกประกาศไว้ที่ใดและโพรซีเยอร์ใดใช้งานมัน

## ทำไม Fortran ต้องการโครงสร้าง ไม่ใช่การจับคู่สตริง

โค้ดเบส Fortran มักเก่าและใหญ่ และเขียนโดยผู้เชี่ยวชาญเฉพาะด้าน ไม่ใช่ทีมซอฟต์แวร์ รูทีนชื่อ `SOLVE`, `Solve` และ `solve` คือรูทีนเดียวกัน โมดูลถูกใช้ร่วมกันในไฟล์หลายร้อยไฟล์ และไลบรารีโพรซีเยอร์อินทรินซิกใหญ่จนรายการการเรียกแบบง่าย ๆ เต็มไปด้วย `SQRT`, `SUM` และ `WRITE`

เอเจนต์ที่ใช้แค่ grep จะจมอยู่กับสัญญาณรบกวนนี้ Maguyva ให้โครงสร้างกับเอเจนต์ก่อน ได้แก่ หน่วยโปรแกรมที่มีอยู่ โมดูลที่หน่วยเหล่านั้นใช้ และรูทีนในโค้ดของคุณเองที่เรียกกันไปมา

## Maguyva ดึงอะไรจาก Fortran ได้บ้าง

Maguyva ครอบคลุมซอร์สทั้งแบบฟิกซ์ฟอร์มและฟรีฟอร์ม (`.f`, `.for`, `.ftn`, `.f90`, `.f95`, `.f03`, `.f08`) ฟังก์ชันและซับรูทีนถูกดึงออกมาเป็นสัญลักษณ์ที่เรียกใช้ได้ และเลือกไทป์ที่ผู้ใช้นิยามเป็นนิยามชนิดข้อมูลในการค้นหาเชิงโครงสร้างได้

การจับคู่สัญลักษณ์ไม่สนตัวพิมพ์เล็กใหญ่ เหมือนกับตัว Fortran เอง ความสัมพันธ์การนำเข้ามาจากคำสั่ง `use` และ `include` โดยตัดคีย์เวิร์ดออกเพื่อให้กราฟเก็บชื่อโมดูล นอกจากนี้กราฟยังบันทึกการเรียก การอ่าน การกำหนดค่า การอ้างอิงชนิดข้อมูล และการสืบทอดจากไทป์ที่ผู้ใช้นิยามที่ขยายต่อด้วย

ตัวกรองความสัมพันธ์ตัดโพรซีเยอร์อินทรินซิกราว 165 รายการ (คำสั่ง I/O และรูทีนคณิตศาสตร์ อาร์เรย์ สตริง การแปลงชนิดข้อมูล และการจัดการบิต) ออก เพื่อให้เส้นเชื่อมที่เหลือชี้ไปยังโค้ดของคุณเอง

## ตัวอย่างพรอมต์สำหรับเอเจนต์

- "ใครเรียก `compute_flux` และพวกนั้นใช้โมดูลอะไรบ้าง" (`find_symbol` แล้วตามด้วย `dependency_search` ทิศทางขาเข้า)
- "ติดตามว่าเงื่อนไขขอบเขตถูกใช้ในลูปของโปรแกรมแก้สมการอย่างไร" (`get_task_context`)
- "หาทุกหน่วยโปรแกรมที่ใช้โมดูล `constants`" (`text_pattern_search` สำหรับ `use constants` แล้วตามด้วย `find_symbol`)

## ข้อจำกัดที่ทราบ

- Fortran ไม่มีเดคอเรเตอร์และไม่มีการจัดการเอกซ์เซปชัน ความสัมพันธ์เหล่านี้จึงถูกทำเครื่องหมายว่าไม่เกี่ยวข้อง
- โพรซีเยอร์ที่ผูกกับไทป์ใช้โหนดเดียวกับฟังก์ชันและซับรูทีนทั่วไป ให้ใช้พรีเซ็ต `functions` ใน `structural_search` เพราะพรีเซ็ต `methods` ไม่เลือกโหนด Fortran ใดเลย
- การเรียกอินทรินซิกที่ถูกกรองจะไม่ปรากฏเป็นเส้นเชื่อมในกราฟ ใช้ `text_pattern_search` เมื่อต้องการทุก `WRITE` หรือ `OPEN`

## ขั้นตอนถัดไป

เชื่อมต่อรีโพซิทอรีด้วย[คู่มือเริ่มต้นใช้งาน](/th/docs/quickstart) แล้วดูตารางการรองรับทั้งหมดได้ที่[หน้าความเข้ากันได้](/th/docs/compatibility) หาก Fortran ของคุณอยู่ร่วมกับโค้ดเชื่อมต่อภาษา C ให้อ่าน[คู่มือภาษา C](/th/languages/c) ด้วย

## รายละเอียดเอนจิน

- การรองรับ Fortran ครอบคลุมซอร์สแบบฟิกซ์ฟอร์ม และฟรีฟอร์ม ได้แก่ `.f`, `.for`, `.ftn`, `.f90`, `.f95`, `.f03` และ `.f08`
- ฟังก์ชันและซับรูทีนเป็นสัญลักษณ์ที่เรียกใช้ได้ การจับคู่สัญลักษณ์ไม่สนตัวพิมพ์เล็กใหญ่ และ `use` กับ `include` กลายเป็นความสัมพันธ์การนำเข้า
- โพรซีเยอร์อินทรินซิกราว 165 รายการ (รูทีน I/O คณิตศาสตร์ อาร์เรย์ สตริง การแปลงชนิดข้อมูล และบิต) ถูกกรองออกจากความสัมพันธ์ ความสัมพันธ์เดคอเรเตอร์ และเอกซ์เซปชันถูกทำเครื่องหมายว่าไม่เกี่ยวข้อง

## จุดเริ่มต้น MCP ที่มีประโยชน์

- `find_symbol`: เริ่มจากชื่อซับรูทีน ฟังก์ชัน หรือโมดูล การจับคู่ไม่สนตัวพิมพ์เล็กใหญ่เหมือน Fortran
- `dependency_search`: ใช้การท่องกราฟทิศทางขาเข้าบนรูทีนของโปรแกรมแก้สมการหรือโมดูลที่ใช้ร่วมกัน เพื่อดูผู้เรียกทั้งหมดก่อนเปลี่ยนตรรกะเชิงตัวเลข
- `get_task_context`: ใช้กับพรอมต์อย่าง “ติดตามว่าเงื่อนไขขอบเขตถูกใช้ในลูปของโปรแกรมแก้สมการอย่างไร”
