นี่คือคำสั่ง fst-compiler-utf8 ที่สามารถเรียกใช้ในผู้ให้บริการโฮสติ้งฟรีของ OnWorks โดยใช้หนึ่งในเวิร์กสเตชันออนไลน์ฟรีของเรา เช่น Ubuntu Online, Fedora Online, โปรแกรมจำลองออนไลน์ของ Windows หรือโปรแกรมจำลองออนไลน์ของ MAC OS
โครงการ:
ชื่อ
fst-compiler, fst-compiler-utf8 - คอมไพเลอร์สองตัวสำหรับโปรแกรม SFST
เรื่องย่อ
fst-คอมไพเลอร์ ไฟล์ไวยากรณ์ [ ไฟล์เอาต์พุต ]
fst-คอมไพเลอร์-utf8 ไฟล์ไวยากรณ์ [ ไฟล์เอาต์พุต ]
OPTIONS
-c จัดเก็บทรานสดิวเซอร์ในรูปแบบกะทัดรัดซึ่งใช้โดย fst-infl2
-l จัดเก็บทรานสดิวเซอร์ในรูปแบบ lowmem
-s สลับพื้นผิวและชั้นวิเคราะห์ของทรานสดิวเซอร์ คุณต้องใช้สวิตช์นี้ใน
เพื่อใช้ Fst-infl (fst-infl2, fst-infl3) สำหรับรุ่นมากกว่าการวิเคราะห์
DESCRIPTION
fst-คอมไพเลอร์ เป็นคอมไพเลอร์สำหรับโปรแกรมตัวแปลงสัญญาณแบบไฟไนต์สเตต มันสร้างย่อเล็กสุด
ตัวแปลงสัญญาณสถานะไฟไนต์ซึ่งสามารถใช้ได้กับ fst-หมอ, Fst-infl, พิมพ์ fst, fst-เปรียบเทียบ
fst-แยกวิเคราะห์ และ fst-ตาข่าย การแสดงแทนทรานสดิวเซอร์ขนาดกะทัดรัดซึ่งสร้างขึ้นด้วย
แฟล็ก -c รองรับโดย fst-infl2, fst-รถไฟ, และ fst-การแข่งขัน หน่วยความจำที่มีประสิทธิภาพ
การแสดงแทนทรานสดิวเซอร์ซึ่งสร้างขึ้นด้วยแฟล็ก -l รองรับโดย .เท่านั้น ครั้งแรก-
infl3.
อาร์กิวเมนต์โปรแกรมแรกคือชื่อของไฟล์ที่มีโปรแกรมแปลงสัญญาณ
ภาษาโปรแกรมอธิบายไว้ด้านล่าง อาร์กิวเมนต์ที่สองคือชื่อของไฟล์
ซึ่งทรานสดิวเซอร์ที่ได้จะถูกเขียนในรูปแบบไบนารี ถ้าอาร์กิวเมนต์ที่สองคือ
หายไป ผลลัพธ์จะถูกเขียนถึง มาตรฐาน
fst-คอมไพเลอร์-utf8 แตกต่างจาก fst-คอมไพเลอร์ เฉพาะในการเข้ารหัสอักขระ fst-คอมไพเลอร์-
utf8 รองรับการเข้ารหัส UTF8 ของไฟล์ต้นฉบับในขณะที่ fst-คอมไพเลอร์ จะใช้สำหรับ
รหัสอักขระ 8 บิต เช่น latin1 ซึ่งเป็นส่วนขยายของรหัส ASCII ข้อมูล
เกี่ยวกับการเข้ารหัสจะถูกเก็บไว้ในไฟล์ตัวแปลงสัญญาณและใช้โดยโปรแกรม SFST อื่น
ไฟล์ รูปแบบ
โปรแกรมหัวโซน่าร์ประกอบด้วยลำดับ (ทางเลือก) ของ ตัวอักษร และ ตัวแปร
คำจำกัดความตามด้วยซิงเกิ้ล transducer การแสดงออก ซึ่งกำหนดผลลัพธ์
ตัวแปลงสัญญาณ
Alphabet
คำจำกัดความของตัวอักษรประกอบด้วยคำหลัก ALPHABET ตามด้วย = และตัวแปลงสัญญาณ
การแสดงออกเช่น
ALPHABET = [az]:[AZ]
คำสั่งนี้กำหนดตัวอักษรใหม่เป็นชุดของคู่สัญลักษณ์ที่เกิดขึ้นบน
การเปลี่ยนแปลงของทรานสดิวเซอร์ การเกิดขึ้นของตัวดำเนินการสองระดับ ตัวดำเนินการปฏิเสธ และ
ช่วงเวลาที่ไม่ได้ระบุจะต้องนำหน้าด้วยคำจำกัดความของตัวอักษรเสมอ
ตัวแปร
มีตัวแปรสองประเภทที่แตกต่างกัน สัญลักษณ์ ชุด ตัวแปร ถูกปิดด้วย hash
เครื่องหมาย (#) และใช้ลำดับสัญลักษณ์ (ดูด้านล่าง) เป็นค่า:
#UC# = AZ
#LC# = az
transducer ตัวแปร ล้อมรอบด้วยเครื่องหมายดอลลาร์และใช้นิพจน์ตัวแปลงสัญญาณเป็น
ค่า:
$MAP$ = [az]:[AZ]+
$MAP$ = [#LC#]:[#UC#]+
ตัวแปรที่มีชื่อขึ้นต้นด้วยสัญลักษณ์ `=' เป็นตัวแปรพิเศษ ข้อตกลง ตัวแปร ถ้า
ตัวแปรข้อตกลงเกิดขึ้นมากกว่าหนึ่งครั้งในนิพจน์ของทรานสดิวเซอร์ มันจะมี
ค่าเดียวกัน พิจารณาโปรแกรมตัวแปลงสัญญาณต่อไปนี้:
$=1$ = [เอบีซี]
$=1$ X $=1$
ตัวแปลงสัญญาณผลลัพธ์รู้จักสตริง aXa, bXb และ cXc เฉพาะตัวแปลงสัญญาณแบบอะไซคลิก
(เช่นทรานสดิวเซอร์ที่มีชุดการแมปสตริงที่จำกัด) สามารถกำหนดให้กับข้อตกลงได้
ตัวแปร
สัญลักษณ์
สัญลักษณ์ก็คือ
- อักขระตัวเดียวเช่น A s 5
- อักขระที่ยกมา เช่น \* หรือ \_
- สัญลักษณ์หลายตัวเช่น หรือ (ซึ่งก็คือเสมอ
อยู่ในวงเล็บเหลี่ยม) หรือ
- แบ็กสแลชตามด้วยตัวเลขซึ่งเป็นรหัสตัวเลขของ
ตัวอักษรที่กำหนด
- สัญลักษณ์ว่าง <>
ลำดับสัญลักษณ์
ลำดับสัญลักษณ์ คือ ลำดับของอักขระ สัญลักษณ์หลายอักขระ และอักขระ
ช่วง เช่น az \. .
ช่วงสัญลักษณ์
ช่วงสัญลักษณ์คือ
- สัญลักษณ์เดียว
- ลำดับสัญลักษณ์ที่อยู่ในวงเล็บเหลี่ยม เช่น [A-Za-z] หรือ
- ลำดับสัญลักษณ์ที่ขึ้นต้นด้วย ^ และอยู่ในวงเล็บเหลี่ยม เช่น [^A-Za-z]
(กำหนดส่วนเติมเต็มของ [a-zA-Z]) หรือ
- ช่วงเวลา (ซึ่งแสดงถึงสัญลักษณ์ใด ๆ จากตัวอักษร)
นิพจน์ตัวแปลงสัญญาณ
การแสดงออกของทรานสดิวเซอร์ (TE) ถูกกำหนดแบบเรียกซ้ำดังนี้:
- ช่วงสัญลักษณ์สองคู่คั่นด้วยเครื่องหมายทวิภาคคือ TE
[az]:[aZ]
- ช่วงสัญลักษณ์เดียวเช่น [az] คือ TE
เป็นรูปแบบย่อสำหรับ [az]:[az]
- ลำดับสัญลักษณ์สองลำดับที่อยู่ในวงเล็บปีกกาและคั่นด้วยเครื่องหมายทวิภาคคือ
กิน. {a[bc]}:{def} เทียบเท่ากับ a:db:e <>:f | a:dc:e <>:f
- XY คือ TE ถ้า X และ Y เป็น TE
(ช่องว่างจะถูกละเว้นเว้นแต่จะมีการยกมา)
- (X) คือ TE ถ้า X คือ TE
- X op คือ TE คือ X คือ TE และ op เป็นอย่างใดอย่างหนึ่ง * (ตัวดำเนินการดาวของ Kleene) +
(ตัวดำเนินการของคลีนพลัส) หรือ ? (ตัวดำเนินการทางเลือก)
- op X คือ TE คือ X คือ TE และ op เป็นอย่างใดอย่างหนึ่ง ! (ตัวดำเนินการลบ) ^
(ตัวดำเนินการแยกภาษาเป้าหมาย), _ (ตัวดำเนินการแยกภาษาต้นทาง) หรือ ^_
(ตัวดำเนินการสวิตช์ต้นทางและเป้าหมาย)
- X op Y คือ TE คือ X และ Y คือ TE และ op เป็นอย่างใดอย่างหนึ่ง & (คำสันธาน
โอเปอเรเตอร์), | (ตัวดำเนินการแยก) || (ตัวดำเนินการองค์ประกอบ) หรือ - (การลบ
โอเปอเรเตอร์)
- L x op y R คือ TE ถ้า L และ R เป็น TE, x และ y เป็นช่วงสัญลักษณ์และ
op เป็นอย่างใดอย่างหนึ่ง => (ข้อ จำกัด สองระดับ), <= (การบีบบังคับสองระดับ) หรือ <=> (สองระดับ
ข้อจำกัดและการบังคับ)
- X op L__R คือ TE ถ้า X, L และ R เป็น TE และ op เป็น ^-> (ขึ้นไป
การแทนที่), _-> (การแทนที่ลง), /-> (การแทนที่ทางซ้าย) หรือ \-> (ทางขวา
ทดแทน) นอกจากนี้ L และ R ต้องกำหนดออโตมาตา (เช่น ที่แมปสตริงของพวกมัน
ให้กับตัวเอง) ตัวดำเนินการเหล่านี้สอดคล้องกับตัวดำเนินการแทนที่ของ Karttunen ถ้า
ลูกศรตามด้วยเครื่องหมายคำถาม (?) การแทนที่จะกลายเป็นตัวเลือก
- X << l คือ TE ถ้า X คือ TE และ l เป็นอย่างใดอย่างหนึ่งของรูปแบบ
a หรือรูปแบบ a:b โดยที่ a และ b เป็นอักขระหรือสัญลักษณ์เดี่ยว ผลลัพธ์คือ
ทรานสดิวเซอร์โดยที่ l ถูกแทรกเข้าไปใน X อย่างอิสระ ทรานสดิวเซอร์ ab << c เช่น is
เทียบเท่ากับ c*ac*bc*
- X op Y L1__R2, ... , LN__RN คือ TE ถ้า X,Y, L1 ถึง LN และ R1
ผ่าน RN คือ TE และ op คือ => (ข้อจำกัดทั่วไป), <= (การบีบบังคับทั่วไป), ^=>
(ข้อจำกัดพื้นผิวทั่วไป), ^<= (การบังคับพื้นผิวทั่วไป), ^<=> (พื้นผิวทั่วไป
ข้อจำกัดและการบีบบังคับ), _=> (ข้อจำกัดเชิงลึกทั่วไป), _<= (การบังคับแบบลึกทั่วไป),
_<=> (การจำกัดลึกและการบีบบังคับทั่วไป) (ตัวดำเนินการเหล่านี้ถูกนำไปใช้ตาม
คำแนะนำโดย Anssi Yli-Jyra)
- "fname" คือ TE คอมไพเลอร์อ่านไฟล์ชื่อ fname และเปลี่ยน
เป็นตัวแปลงสัญญาณของแบบฟอร์ม line1|line2|line3|... โดยที่ linex คือบรรทัดที่ x ของ
ไฟล์. อักขระทั้งหมดอื่นที่ไม่ใช่ : และ \ ถูกตีความตามตัวอักษร (เช่น ไม่ใช่เป็น
ผู้ประกอบการ) โดยทั่วไปจะใช้ TE นี้ เช่น เพื่ออ่านรายการหน่วยคำจากไฟล์
- " " เป็น TE คอมไพเลอร์อ่านตัวแปลงสัญญาณที่คอมไพล์ล่วงหน้าจาก
ไฟล์ชื่อ fname. นี้
คุณสมบัติเพิ่มเติม
ความคิดเห็นเริ่มต้นด้วยสัญลักษณ์ % และขยายไปถึงท้ายบรรทัด ช่องว่างจะถูกละเว้น
เว้นแต่จะมีการยกมา นิพจน์สิ้นสุดที่ส่วนท้ายของบรรทัด เว้นแต่สิ้นสุดบรรทัด
นำหน้าด้วยแบ็กสแลช คำสั่ง
#รวม "fname"
สามารถใช้เพื่อแทรกซอร์สโค้ดจากไฟล์ชื่อ fname คำสั่ง
RE >> "fname"
เก็บนิพจน์ทั่วไป RE ในไฟล์ fname คำสั่ง
#ใช้ฮอปครอฟท์
บอกคอมไพเลอร์ให้ใช้อัลกอริธึมการลดขนาด Hopcroft ต่อจากนี้และ
#ใช้ค่าเริ่มต้น
เปลี่ยนกลับไปเป็นอัลกอริธึมการย่อขนาดเริ่มต้น (Brzozowski) คำสั่ง
ตัวอย่าง
นี่คือตัวอย่างโปรแกรมทรานสดิวเซอร์อย่างง่าย สมมติว่าไฟล์ "adj-stems"
ประกอบด้วยสองบรรทัด
ง่าย
สาย
ใหญ่
ตัวแปลงสัญญาณนี้จะวิเคราะห์รูปแบบคำคุณศัพท์ได้อย่างถูกต้อง ง่าย ง่ายขึ้น ง่ายที่สุด และช้า
ในภายหลังและล่าสุด
ALPHABET = [a-zA-Z] y:ie:<> :<>
$R$ = y<=>i ( :<> จ)
$R2$ = อี<=><> ( :<> จ)
$R$ = $R$ & $R2$
$Stems$ = "adj-ลำต้น"
$S$ = $ต้นกำเนิด$ ( :<>| :{เอ๋อ}| :{est})
$เอส$ || $อาร์$
EXIT สถานภาพ
fst-คอมไพเลอร์ คืนค่า 0 เว้นแต่จะมีข้อผิดพลาดเกิดขึ้น
ใช้ fst-compiler-utf8 ออนไลน์โดยใช้บริการ onworks.net