FYPP เป็นตัวประมวลผล python ที่ขับเคลื่อนด้วย มันสามารถใช้สำหรับภาษาการเขียนโปรแกรมใด ๆ แต่เป้าหมายหลักของมันคือการเสนอตัวประมวลผล preprocessor ของ Fortran ซึ่งช่วยในการขยาย Fortran ด้วยความสามารถในการรวบรวมและความสามารถของเทมเพลต metaprogramming แทนที่จะแนะนำไวยากรณ์การแสดงออกของตัวเองมันใช้นิพจน์ Python ในคำสั่ง preprocessor ของมันนำเสนอความสอดคล้องและความสามารถรอบตัวของ Python เมื่อกำหนดงาน metaprogramming มันให้ความสำคัญอย่างมากกับความแข็งแกร่งและการรวมเข้ากับการพัฒนาเครื่องมือ
โครงการนี้โฮสต์บน GitHub
เอกสารโดยละเอียดมีอยู่ใน readthedocs.org
FYPP ได้รับการปล่อยตัวภายใต้ ใบอนุญาต BSD 2 ข้อ
คำจำกัดความการประเมินและการกำจัดตัวแปร:
#: ถ้า debug> 0 พิมพ์ *, "ข้อมูลการดีบัก" #: endif #: ตั้งค่า loglevel = 2 พิมพ์ *, "loglevel: $ {loglevel} $" #: del loglevel
คำจำกัดความของแมโครและการโทรมาโคร:
#: Def Assert (cond) #: ถ้า debug> 0 ถ้า (. ไม่. $ {cond} $) แล้ว พิมพ์ *, "ยืนยันล้มเหลวในไฟล์ $ {_ ไฟล์ _} $, บรรทัด $ {_ line _} $" หยุดข้อผิดพลาด สิ้นสุดถ้า #: endif #: enddef ยืนยัน - เรียกใช้ผ่านการโทรโดยตรง (อาร์กิวเมนต์ไม่ต้องการใบเสนอราคา) @: ยืนยัน (ขนาด (myArray)> 0) - เรียกใช้เป็นนิพจน์ Python (อาร์กิวเมนต์ต้องการใบเสนอราคา) $: assert ('ขนาด (myArray)> 0')
เอาต์พุตตามเงื่อนไข:
การทดสอบโปรแกรม #: ถ้ากำหนด ('with_mpi') ใช้ MPI #: Elif กำหนด ('with_openmp') ใช้ OpenMP #:อื่น ใช้อนุกรม #: endif
เอาต์พุตซ้ำ (เช่นสำหรับการสร้างเทมเพลต Fortran):
อินเทอร์เฟซ myfunc #: สำหรับ dtype ใน ['ของจริง', 'dreal', 'complex', 'dcomplex'] ขั้นตอนโมดูล myfunc _ $ {dtype} $ #: endfor สิ้นสุดอินเตอร์เฟส myfunc
คำสั่งแบบอินไลน์:
ตรรกะ, พารามิเตอร์ :: hasmpi = # {ถ้ากำหนด ('mpi')} # .true # {else}# .false #{endif}#
การแทรกการแสดงออกของงูหลามโดยพลการ:
อักขระ (*), พารามิเตอร์ :: comp_date = "$ {time.strftime ('%y-%m-%d')} $"
การรวมไฟล์ระหว่างการประมวลผลล่วงหน้า:
#: รวม "macrodefs.fypp"
การใช้สายต่อเนื่องสไตล์ Fortran ในคำสั่ง preprocessor:
#: ถ้า var1> var2 & & หรือ var2> var4 พิมพ์ *, "ทำอะไรบางอย่างที่นี่" #: endif
ผ่าน (ไม่ได้อ้างถึง) อาร์กิวเมนต์หลายสายอักขระไปยัง callables:
- ความต้องการที่เรียกเก็บเงินได้เฉพาะอาร์กิวเมนต์สตริง #: def debug_code (รหัส) #: ถ้า debug> 0 $: รหัส #: endif #: enddef debug_code - ผ่านบล็อกรหัสเป็นอาร์กิวเมนต์ตำแหน่งแรก #: บล็อก debug_code ถ้า (ขนาด (อาร์เรย์)> 100) จากนั้น พิมพ์ *, "การดีบัก: อาร์เรย์ขนาดใหญ่อย่างน่าเกรงขาม" สิ้นสุดถ้า #: endblock debug_code - ความต้องการที่เรียกเก็บเงินได้ยังประเภทอาร์กิวเมนต์ที่ไม่ใช่สตริง #: def repeat_code (รหัสทำซ้ำ) #: สำหรับ IND ในช่วง (ทำซ้ำ) $: รหัส #: endfor #: enddef repeat_code - Pass Code Block เป็นอาร์กิวเมนต์ตำแหน่งและ 3 เป็นอาร์กิวเมนต์คำหลัก "ทำซ้ำ" #: block repeet_code (ทำซ้ำ = 3) สิ่งนี้จะทำซ้ำ 3 ครั้ง #: endblock repeat_code
ความคิดเห็นของตัวประมวลผลล่วงหน้า:
- สิ่งนี้จะไม่ปรากฏในผลลัพธ์ - นอกจากนี้อักขระใหม่ในตอนท้ายของบรรทัดจะถูกระงับ
ระงับเอาต์พุต preprocessor ในภูมิภาคที่เลือก:
- มีการอ่านคำจำกัดความ แต่จะไม่มีการผลิตเอาต์พุต (เช่น newLines) #:ปิดเสียง #: รวม "macrodefs.fypp" #: endmute
คำขอที่ชัดเจนสำหรับการหยุดประมวลผลล่วงหน้า:
#: ถ้า debuglevel <0 #: หยุด 'ไม่อนุญาตให้ดีบักระดับลบ!' #: endif
ตรวจสอบได้ง่ายสำหรับพารามิเตอร์แมโคร Sanity:
#: def mymacro (อันดับ) - แมโครทำงานเฉพาะอันดับ 1 ขึ้นไป #: ยืนยันอันดับ> 0 - #: enddef mymacro
คำสั่งหมายเลขบรรทัดในเอาต์พุต:
การทดสอบโปรแกรม #: ถ้ากำหนด ('mpi') ใช้ MPI #: endif -
เปลี่ยนเป็น
# 1 "test.fypp" 1 การทดสอบโปรแกรม # 3 "test.fypp" ใช้ MPI # 5 "test.fypp" -
เมื่อ MPI
ตัวแปรถูกกำหนดและ FYPP ได้รับคำสั่งให้สร้างเครื่องหมายเส้น
การพับโดยอัตโนมัติของเส้นที่สร้างขึ้นเกินขีด จำกัด ความยาวของเส้น
FYPP ต้องการล่าม Python 3 ที่ใช้งานได้ (Python 3.5 หรือสูงกว่า)
เมื่อคุณติดตั้ง FYPP คุณจะได้รับเครื่องมือบรรทัดคำสั่ง fypp
และโมดูล Python fypp.py
หลังคุณสามารถนำเข้าหากคุณต้องการเข้าถึงฟังก์ชั่นของ FYPP โดยตรงจากภายในสคริปต์ Python ของคุณ
การเปิดตัว FYPP ที่มีเสถียรภาพครั้งสุดท้ายสามารถติดตั้งได้อย่างง่ายดายเป็นแพ็คเกจ Conda โดยการออก
Conda Install -C Conda -Forge FYPP
นอกจากนี้คุณยังสามารถใช้ pip
บรรทัดคำสั่ง Pythons เพื่อดาวน์โหลดรีลีสเสถียรจากหน้า FYPP บน PYPI และติดตั้งบนระบบของคุณ
หากคุณต้องการติดตั้ง FYPP ลงในระบบโมดูลของล่าม Python 3 ที่ใช้งานอยู่ (โดยทั่วไปจะเป็นกรณีเมื่อคุณใช้สภาพแวดล้อมเสมือนจริงของ Python) ปัญหา
pip3 ติดตั้ง fypp
หรือคุณสามารถติดตั้ง FYPP ลงในพื้นที่ผู้ใช้ (ภายใต้ ~/.local) ด้วย
PIP3 Install -ผู้ใช้ FYPP
บน Windows คุณสามารถใช้ MSYS2 Toolchain เพื่อติดตั้ง FYPP ในเทอร์มินัล MingW ในการติดตั้งการใช้ FYPP:
Pacman -s mingw-w64-x86_64-python-fypp
ตรวจสอบให้แน่ใจว่าสถาปัตยกรรมที่เลือกนั้นตรงกับเทอร์มินัล Mingw ปัจจุบันของคุณ สำหรับสถาปัตยกรรม MingW ที่สนับสนุนทั้งหมดตรวจสอบดัชนีแพ็คเกจที่นี่
สำหรับการติดตั้งด้วยตนเองคุณสามารถดาวน์โหลดซอร์สโค้ดของรุ่น ที่เสถียร จากเว็บไซต์โครงการ FYPP
หากคุณต้องการรับเวอร์ชัน การพัฒนา ล่าสุดโคลนโครงการที่เก็บ:
git clone https://github.com/aradi/fypp.git
และตรวจสอบสาขาหลัก
เครื่องมือบรรทัดคำสั่งเป็นสคริปต์แบบสแตนด์อโลนเดียว คุณสามารถเรียกใช้โดยตรงจากโฟลเดอร์ต้นทาง
fypp_source_folder/bin/fypp
หรือหลังจากคัดลอกจากโฟลเดอร์ bin ไปยังสถานที่ใด ๆ ที่ระบุไว้ในตัวแปรสภาพแวดล้อมเส้นทางของคุณโดยเพียงแค่ออก
ฟิวป์
โมดูล Python fypp.py
สามารถพบได้ใน FYP_SOURCE_FOLDER/src
เครื่องมือบรรทัดคำสั่ง FYPP อ่านไฟล์ล่วงหน้าและเขียนลงในไฟล์อื่นดังนั้นโดยทั่วไปคุณจะเรียกใช้เช่น:
fypp source.fpp Source.f90
ซึ่งจะประมวลผล source.fpp และเขียนผลลัพธ์ไปยัง source.f90 หากไม่ได้ระบุไฟล์อินพุตและเอาต์พุตข้อมูลจะถูกอ่านจาก stdin และเขียนไปยัง stdout
พฤติกรรมของ FYPP สามารถได้รับอิทธิพลจากตัวเลือกบรรทัดคำสั่งต่างๆ บทสรุปของตัวเลือกบรรทัดคำสั่งทั้งหมดสามารถรับได้โดย:
FYPP -H